Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #1307 +/- ##
==========================================
+ Coverage 91.48% 91.58% +0.10%
==========================================
Files 39 39
Lines 20050 20050
==========================================
+ Hits 18342 18363 +21
+ Misses 1708 1687 -21
🚀 New features to boost your workflow:
|
0efc210 to
563b62c
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0efc210e5c
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
11fe58d to
c9005ab
Compare
c9005ab to
7f84f54
Compare
7f84f54 to
be9b19c
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: be9b19c03e
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
be9b19c to
d5233fb
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d5233fb1b6
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
d5233fb to
467255b
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 467255b700
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
…cations The inherent ReadOnlyTable::get(), ReadOnlyTable::range(), ReadOnlyMultimapTable::get(), and ReadOnlyMultimapTable::range() hand out 'static AccessGuards that, contrary to their documentation, do not keep the read transaction alive on their own. What holds it open is the ReadOnlyTable, which owns a clone of the TransactionGuard, together with the iterators and MultimapValues, which own clones of their own. A guard that outlives all of them lets a concurrent writer reclaim the pages it references, which panics the writer's commit() on a debug assertion. Mark them deprecated behind the new experimental-pre-api-5-deprecations feature, so default builds stay warning-free for the rest of 4.x while users who opt in get pointed at the replacements: the Readable* trait accessors, whose guards borrow from the table so that the compiler enforces the lifetime, or the _owned() variants if the guards need to keep the transaction alive on their own. The doc comments are corrected to describe the actual behavior, including which objects a guard must not outlive. The experimental-api-5 feature already removes these methods outright, so the deprecation only applies to builds that enable the deprecations feature without the redb 5 preview. The pre-existing tests that exercise the deprecated accessors keep doing so, so the methods stay covered until they are removed. The suites built throughout on them carry a crate-level allow(deprecated) gated on the feature combination that deprecates them, and the handful of incidental reads elsewhere carry a function-level allow, so unrelated deprecations are still reported in every configuration. Assisted-by: Claude Code
467255b to
57b5c97
Compare
Follow-up to #1306 and #1343.
Change
Marks
ReadOnlyTable::get(),ReadOnlyTable::range(),ReadOnlyMultimapTable::get(), andReadOnlyMultimapTable::range()deprecated behind a newexperimental-pre-api-5-deprecationsfeature. Contrary to their documentation, the'staticaccess guards these methods return, or yield, do not keep the transaction alive on their own. What holds it open is theReadOnlyTable, which owns a clone of theTransactionGuard, together with the iterators andMultimapValues, which own clones of their own. A guard that outlives all of them lets a concurrent writer reclaim the pages it references, which panics the writer'scommit()on a debug assertion. The doc comments are corrected to describe the actual behavior, including which objects a guard must not outlive.Because the attribute is behind an opt-in feature, default builds stay warning-free for the rest of 4.x. Users who enable it get pointed at the replacements: the
ReadableTable/ReadableMultimapTabletrait accessors, whose guards borrow from the table so that the compiler enforces the lifetime, or the_owned()variants if the guards need to keep the transaction alive on their own.experimental-api-5already removes these methods outright, so the deprecation only applies to builds that enable the deprecations feature without the redb 5 preview — under--all-features(CI) the removal wins and the attribute is moot. Method bodies are untouched.The pre-existing tests that exercise the deprecated accessors keep doing so, so the methods stay covered until they are removed. The suites built throughout on them carry a crate-level
allow(deprecated)gated onall(feature = "experimental-pre-api-5-deprecations", not(feature = "experimental-api-5")), and the handful of incidental reads elsewhere carry a function-level#[allow(deprecated)], so unrelated deprecations are still reported in every configuration. Theredb-derivetest targets cannot use that gate, sincefeature = "..."there resolves againstredb-derive's own features, so they use the function-level form.Testing
--all-features(475 tests)--deny warningsin four configurations: default,experimental-pre-api-5-deprecations,experimental-api-5, and--all-features🤖 Generated with Claude Code
https://claude.ai/code/session_01YCYPuM4nb94pF36ZX7R8sa