Skip to content

Bump redb from 4.1.0 to 4.2.0 - #517

Merged
Ralith merged 1 commit into
masterfrom
dependabot/cargo/redb-4.2.0
Aug 21, 2026
Merged

Bump redb from 4.1.0 to 4.2.0#517
Ralith merged 1 commit into
masterfrom
dependabot/cargo/redb-4.2.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Aug 21, 2026

Copy link
Copy Markdown
Contributor

Bumps redb from 4.1.0 to 4.2.0.

Release notes

Sourced from redb's releases.

4.2.0

New features

  • Add an experimental cursor API, behind the experimental_cursor feature flag: Table::lower_bound_mut() and Table::upper_bound_mut() return a CursorMut pointing at a gap between entries, modeled on the standard library's BTreeMap cursors. Inserting sorted data through its insert_before() method can be around 3x faster than calling insert() with the same data; insert_after() inserts through the gap in descending order at the same speed. ReadableTable::lower_bound() and ReadableTable::upper_bound() return a read-only Cursor. The feature is unstable and may change incompatibly, or be removed, in any release.
  • Add ReadOnlyTable::get_owned(), ReadOnlyTable::range_owned(), ReadOnlyMultimapTable::get_owned(), and ReadOnlyMultimapTable::range_owned(), which return the new OwnedAccessGuard, OwnedRange, OwnedMultimapValue, and OwnedMultimapRange types. These keep the read transaction alive until they are dropped, including the guards yielded by the iterators, which may outlive the iterator that produced them.
  • Add Table::entry() and the associated Entry, OccupiedEntry, and VacantEntry types, mirroring std::collections::BTreeMap::entry. Supports or_insert, or_insert_with, or_insert_with_key, and_modify, and the usual OccupiedEntry / VacantEntry accessors.
  • Add ExtractIf::close() to explicitly finalize an extract iterator without removing unread entries.

Optimizations

  • Improve write performance: Durability::None commits are about 2x faster, and writes that do not split a page are about 15% faster for single-key Durability::None commits and about 6% faster for batched writes.
  • Improve write performance when tables of a single WriteTransaction are modified concurrently from multiple threads. Writes to separate tables previously serialized on internal locks and could be slower than writing from a single thread; they now scale with the number of threads. Up to about 4x faster.
  • Optimize Table::pop_first() and Table::pop_last() to be about 2x faster.
  • Optimize inserting in ascending key order. A table loaded in key order occupies about half as much space, and loads faster.
  • Optimize Table::retain(), Table::retain_in(), Table::extract_if(), and Table::extract_from_if(). Benchmarks on large tables show a 30-100x speedup for retaining and an 18-65x speedup for extracting, depending on the fraction of entries affected. Iterating an extract iterator from both ends no longer degrades removal batching.
  • Avoid unnecessary write amplification when removing a value that is not present from a multimap table. Such a removal is now a no-op.

Minor improvements

  • Table::retain(), Table::retain_in(), Table::extract_if(), and Table::extract_from_if() now poison the write transaction if their predicate panics or an internal error prevents removals from being applied, causing WriteTransaction::commit() to return CommitError::TransactionPoisoned. After an extract iterator returns an error, later calls keep returning an error instead of continuing.
  • Enable file space reclamation during non-durable transactions performed while a savepoint exists.
  • Reuse pages freed by a durable write transaction in the next write transaction when no live read transaction or savepoint still needs them. Previously, pages were not reused for one additional transaction.

... (truncated)

Changelog

Sourced from redb's changelog.

4.2.0 - 2026-08-17

New features

  • Add an experimental cursor API, behind the experimental_cursor feature flag: Table::lower_bound_mut() and Table::upper_bound_mut() return a CursorMut pointing at a gap between entries, modeled on the standard library's BTreeMap cursors. Inserting sorted data through its insert_before() method can be around 3x faster than calling insert() with the same data; insert_after() inserts through the gap in descending order at the same speed. ReadableTable::lower_bound() and ReadableTable::upper_bound() return a read-only Cursor. The feature is unstable and may change incompatibly, or be removed, in any release.
  • Add ReadOnlyTable::get_owned(), ReadOnlyTable::range_owned(), ReadOnlyMultimapTable::get_owned(), and ReadOnlyMultimapTable::range_owned(), which return the new OwnedAccessGuard, OwnedRange, OwnedMultimapValue, and OwnedMultimapRange types. These keep the read transaction alive until they are dropped, including the guards yielded by the iterators, which may outlive the iterator that produced them.
  • Add Table::entry() and the associated Entry, OccupiedEntry, and VacantEntry types, mirroring std::collections::BTreeMap::entry. Supports or_insert, or_insert_with, or_insert_with_key, and_modify, and the usual OccupiedEntry / VacantEntry accessors.
  • Add ExtractIf::close() to explicitly finalize an extract iterator without removing unread entries.

Optimizations

  • Improve write performance: Durability::None commits are about 2x faster, and writes that do not split a page are about 15% faster for single-key Durability::None commits and about 6% faster for batched writes.
  • Improve write performance when tables of a single WriteTransaction are modified concurrently from multiple threads. Writes to separate tables previously serialized on internal locks and could be slower than writing from a single thread; they now scale with the number of threads. Up to about 4x faster.
  • Optimize Table::pop_first() and Table::pop_last() to be about 2x faster.
  • Optimize inserting in ascending key order. A table loaded in key order occupies about half as much space, and loads faster.
  • Optimize Table::retain(), Table::retain_in(), Table::extract_if(), and Table::extract_from_if(). Benchmarks on large tables show a 30-100x speedup for retaining and an 18-65x speedup for extracting, depending on the fraction of entries affected. Iterating an extract iterator from both ends no longer degrades removal batching.
  • Avoid unnecessary write amplification when removing a value that is not present from a multimap table. Such a removal is now a no-op.

Minor improvements

  • Table::retain(), Table::retain_in(), Table::extract_if(), and Table::extract_from_if() now poison the write transaction if their predicate panics or an internal error prevents removals from being applied, causing WriteTransaction::commit() to return CommitError::TransactionPoisoned. After an extract iterator returns an error, later calls keep returning an error instead of continuing.
  • Enable file space reclamation during non-durable transactions performed while a savepoint exists.
  • Reuse pages freed by a durable write transaction in the next write transaction when no live read transaction or savepoint still needs them. Previously, pages were not reused for one additional

... (truncated)

Commits
  • 23b6ba0 Bump version to 4.2.0
  • a382aa4 Update changelog
  • e433e52 Update the post-commit epilogue's pages in place
  • cff6e50 Report the repeated benchmark read phases as a single row
  • e01dfab Report benchmark results as rates rather than durations
  • 553cacd Build without std
  • 55735f8 Call StorageBackend::close() when opening a database fails
  • 927c2e4 Report backend failures through crate::io::Error
  • 2471234 Report malformed freed-page records instead of panicking
  • d0d9ed8 Generate a lockfile in test_wasi when one is missing
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [redb](https://github.com/cberner/redb) from 4.1.0 to 4.2.0.
- [Release notes](https://github.com/cberner/redb/releases)
- [Changelog](https://github.com/cberner/redb/blob/master/CHANGELOG.md)
- [Commits](cberner/redb@v4.1.0...v4.2.0)

---
updated-dependencies:
- dependency-name: redb
  dependency-version: 4.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file rust Pull requests that update rust code labels Aug 21, 2026
@Ralith
Ralith merged commit bf34de5 into master Aug 21, 2026
3 of 4 checks passed
@Ralith
Ralith deleted the dependabot/cargo/redb-4.2.0 branch August 21, 2026 06:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file rust Pull requests that update rust code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant