RocksDB v6.28.0 Release Notes
Release Date: 2021-12-17 // over 2 years ago-
🆕 New Features
- 👍 Introduced 'CommitWithTimestamp' as a new tag. Currently, there is no API for user to trigger a write with this tag to the WAL. This is part of the efforts to support write-commited transactions with user-defined timestamps.
- 🚤 Introduce SimulatedHybridFileSystem which can help simulating HDD latency in db_bench. Tiered Storage latency simulation can be enabled using -simulate_hybrid_fs_file (note that it doesn't work if db_bench is interrupted in the middle). -simulate_hdd can also be used to simulate all files on HDD.
🐛 Bug Fixes
- 🛠 Fixed a bug in rocksdb automatic implicit prefetching which got broken because of new feature adaptive_readahead and internal prefetching got disabled when iterator moves from one file to next.
- Fixed a bug in TableOptions.prepopulate_block_cache which causes segmentation fault when used with TableOptions.partition_filters = true and TableOptions.cache_index_and_filter_blocks = true.
- 🛠 Fixed a bug affecting custom memtable factories which are not registered with the
ObjectRegistry
. The bug could result in failure to save the OPTIONS file. - 🛠 Fixed a bug causing two duplicate entries to be appended to a file opened in non-direct mode and tracked by
FaultInjectionTestFS
. - Fixed a bug in TableOptions.prepopulate_block_cache to support block-based filters also.
- 🚚 Block cache keys no longer use
FSRandomAccessFile::GetUniqueId()
(previously used when available), so a filesystem recycling unique ids can no longer lead to incorrect result or crash (#7405). For files generated by RocksDB >= 6.24, the cache keys are stable across DB::Open and DB directory move / copy / import / export / migration, etc. Although collisions are still theoretically possible, they are (a) impossible in many common cases, (b) not dependent on environmental factors, and (c) much less likely than a CPU miscalculation while executing RocksDB. - 🛠 Fixed a bug in C bindings causing iterator to return incorrect result (#9343).
Behavior Changes
- MemTableList::TrimHistory now use allocated bytes when max_write_buffer_size_to_maintain > 0(default in TrasactionDB, introduced in PR#5022) Fix #8371.
Public API change
- Extend WriteBatch::AssignTimestamp and AssignTimestamps API so that both functions can accept an optional
checker
argument that performs additional checking on timestamp sizes. - Introduce a new EventListener callback that will be called upon the end of automatic error recovery.
- Add IncreaseFullHistoryTsLow API so users can advance each column family's full_history_ts_low seperately.
- Add GetFullHistoryTsLow API so users can query current full_history_low value of specified column family.
🐎 Performance Improvements
- Replaced map property
TableProperties::properties_offsets
with uint64_t propertyexternal_sst_file_global_seqno_offset
to save table properties's memory. - 🛠 Block cache accesses are faster by RocksDB using cache keys of fixed size (16 bytes).
Java API Changes
- ✂ Removed Java API
TableProperties.getPropertiesOffsets()
as it exposed internal details to external users.