7.9.2 (2022-12-21)
Bug Fixes
- Fixed a heap use after free bug in async scan prefetching when the scan thread and another thread try to read and load the same seek block into cache.
7.9.1 (2022-12-08)
Bug Fixes
- Fixed a regression in iterator where range tombstones after
iterate_upper_bound
is processed. - Fixed a memory leak in MultiGet with async_io read option, caused by IO errors during table file open
Behavior changes
- Make best-efforts recovery verify SST unique ID before Version construction (#10962)
7.9.0 (2022-11-21)
Performance Improvements
- Fixed an iterator performance regression for delete range users when scanning through a consecutive sequence of range tombstones (#10877).
Bug Fixes
- Fix memory corruption error in scans if async_io is enabled. Memory corruption happened if there is IOError while reading the data leading to empty buffer and other buffer already in progress of async read goes again for reading.
- Fix failed memtable flush retry bug that could cause wrongly ordered updates, which would surface to writers as
Status::Corruption
in case offorce_consistency_checks=true
(default). It affects use cases that enable both parallel flush (max_background_flushes > 1
ormax_background_jobs >= 8
) and non-default memtable count (max_write_buffer_number > 2
). - Fixed an issue where the
READ_NUM_MERGE_OPERANDS
ticker was not updated when the base key-value or tombstone was read from an SST file. - Fixed a memory safety bug when using a SecondaryCache with
block_cache_compressed
.block_cache_compressed
no longer attempts to use SecondaryCache features. - Fixed a regression in scan for async_io. During seek, valid buffers were getting cleared causing a regression.
- Tiered Storage: fixed excessive keys written to penultimate level in non-debug builds.
New Features
- Add basic support for user-defined timestamp to Merge (#10819).
- Add stats for ReadAsync time spent and async read errors.
- Basic support for the wide-column data model is now available. Wide-column entities can be stored using the
PutEntity
API, and retrieved usingGetEntity
and the newcolumns
API of iterator. For compatibility, the classic APIsGet
andMultiGet
, as well as iterator'svalue
API return the value of the anonymous default column of wide-column entities; also,GetEntity
and iterator'scolumns
return any plain key-values in the form of an entity which only has the anonymous default column.Merge
(andGetMergeOperands
) currently also apply to the default column; any other columns of entities are unaffected byMerge
operations. Note that some features like compaction filters, transactions, user-defined timestamps, and the SST file writer do not yet support wide-column entities; also, there is currently noMultiGet
-like API to retrieve multiple entities at once. We plan to gradually close the above gaps and also implement new features like column-level operations (e.g. updating or querying only certain columns of an entity). - Marked HyperClockCache as a production-ready alternative to LRUCache for the block cache. HyperClockCache greatly improves hot-path CPU efficiency under high parallel load or high contention, with some documented caveats and limitations. As much as 4.5x higher ops/sec vs. LRUCache has been seen in db_bench under high parallel load.
- Add periodic diagnostics to info_log (LOG file) for HyperClockCache block cache if performance is degraded by bad
estimated_entry_charge
option.
Public API Changes
- Marked
block_cache_compressed
as a deprecated feature. Use SecondaryCache instead. - Added a
SecondaryCache::InsertSaved()
API, with default implementation depending onInsert()
. Some implementations might need to add a custom implementation ofInsertSaved()
. (Details in API comments.)