6.15.2 (2020-12-22)
Bug Fixes
- Fix failing RocksJava test compilation and add CI jobs
- Fix jemalloc compilation issue on macOS
- Fix build issues - compatibility with older gcc, older jemalloc libraries, docker warning when building i686 binaries
6.15.1 (2020-12-01)
Bug Fixes
- Truncated WALs ending in incomplete records can no longer produce gaps in the recovered data when
WALRecoveryMode::kPointInTimeRecovery
is used. Gaps are still possible when WALs are truncated exactly on record boundaries. - Fix a bug where compressed blocks read by MultiGet are not inserted into the compressed block cache when use_direct_reads = true.
6.15.0 (2020-11-13)
Bug Fixes
- Fixed a bug in the following combination of features: indexes with user keys (
format_version >= 3
), indexes are partitioned (index_type == kTwoLevelIndexSearch
), and some index partitions are pinned in memory (BlockBasedTableOptions::pin_l0_filter_and_index_blocks_in_cache
). The bug could cause keys to be truncated when read from the index leading to wrong read results or other unexpected behavior. - Fixed a bug when indexes are partitioned (
index_type == kTwoLevelIndexSearch
), some index partitions are pinned in memory (BlockBasedTableOptions::pin_l0_filter_and_index_blocks_in_cache
), and partitions reads could be mixed between block cache and directly from the file (e.g., withenable_index_compression == 1
andmmap_read == 1
, partitions that were stored uncompressed due to poor compression ratio would be read directly from the file via mmap, while partitions that were stored compressed would be read from block cache). The bug could cause index partitions to be mistakenly considered empty during reads leading to wrong read results. - Since 6.12, memtable lookup should report unrecognized value_type as corruption (#7121).
- Since 6.14, fix false positive flush/compaction
Status::Corruption
failure whenparanoid_file_checks == true
and range tombstones were written to the compaction output files. - Since 6.14, fix a bug that could cause a stalled write to crash with mixed of slowdown and no_slowdown writes (
WriteOptions.no_slowdown=true
). - Fixed a bug which causes hang in closing DB when refit level is set in opt build. It was because ContinueBackgroundWork() was called in assert statement which is a no op. It was introduced in 6.14.
- Fixed a bug which causes Get() to return incorrect result when a key's merge operand is applied twice. This can occur if the thread performing Get() runs concurrently with a background flush thread and another thread writing to the MANIFEST file (PR6069).
- Reverted a behavior change silently introduced in 6.14.2, in which the effects of the
ignore_unknown_options
flag (used in option parsing/loading functions) changed. - Reverted a behavior change silently introduced in 6.14, in which options parsing/loading functions began returning
NotFound
instead ofInvalidArgument
for option names not available in the present version. - Fixed MultiGet bugs it doesn't return valid data with user defined timestamp.
- Fixed a potential bug caused by evaluating
TableBuilder::NeedCompact()
beforeTableBuilder::Finish()
in compaction job. For example, theNeedCompact()
method ofCompactOnDeletionCollector
returned by built-inCompactOnDeletionCollectorFactory
requiresBlockBasedTable::Finish()
to return the correct result. The bug can cause a compaction-generated file not to be marked for future compaction based on deletion ratio. - Fixed a seek issue with prefix extractor and timestamp.
- Fixed a bug of encoding and parsing BlockBasedTableOptions::read_amp_bytes_per_bit as a 64-bit integer.
- Fixed the logic of populating native data structure for
read_amp_bytes_per_bit
during OPTIONS file parsing on big-endian architecture. Without this fix, original code introduced in PR7659, when running on big-endian machine, can mistakenly store read_amp_bytes_per_bit (an uint32) in little endian format. Future access toread_amp_bytes_per_bit
will give wrong values. Little endian architecture is not affected.
Public API Change
- Deprecate
BlockBasedTableOptions::pin_l0_filter_and_index_blocks_in_cache
andBlockBasedTableOptions::pin_top_level_index_and_filter
. These options still take effect until users migrate to the replacement APIs inBlockBasedTableOptions::metadata_cache_options
. Migration guidance can be found in the API comments on the deprecated options. - Add new API
DB::VerifyFileChecksums
to verify SST file checksum with corresponding entries in the MANIFEST if present. Current implementation requires scanning and recomputing file checksums.
Behavior Changes
- The dictionary compression settings specified in
ColumnFamilyOptions::compression_opts
now additionally affect files generated by flush and compaction to non-bottommost level. Previously those settings at most affected files generated by compaction to bottommost level, depending on whetherColumnFamilyOptions::bottommost_compression_opts
overrode them. Users who relied on dictionary compression settings inColumnFamilyOptions::compression_opts
affecting only the bottommost level can keep the behavior by moving their dictionary settings toColumnFamilyOptions::bottommost_compression_opts
and setting itsenabled
flag. - When the
enabled
flag is set inColumnFamilyOptions::bottommost_compression_opts
, those compression options now take effect regardless of the value inColumnFamilyOptions::bottommost_compression
. Previously, those compression options only took effect whenColumnFamilyOptions::bottommost_compression != kDisableCompressionOption
. Now, they additionally take effect whenColumnFamilyOptions::bottommost_compression == kDisableCompressionOption
(such a setting causes bottommost compression type to fall back toColumnFamilyOptions::compression_per_level
if configured, and otherwise fall back toColumnFamilyOptions::compression
).
New Features
- An EXPERIMENTAL new Bloom alternative that saves about 30% space compared to Bloom filters, with about 3-4x construction time and similar query times is available using NewExperimentalRibbonFilterPolicy.