RocksDB v6.10 Release Notes

Release Date: 2020-05-02 // almost 4 years ago
  • ๐Ÿ› Bug Fixes

    • ๐Ÿ›  Fix wrong result being read from ingested file. May happen when a key in the file happen to be prefix of another key also in the file. The issue can further cause more data corruption. The issue exists with rocksdb >= 5.0.0 since DB::IngestExternalFile() was introduced.
    • ๐Ÿ‘€ Finish implementation of BlockBasedTableOptions::IndexType::kBinarySearchWithFirstKey. It's now ready for use. Significantly reduces read amplification in some setups, especially for iterator seeks.
    • ๐Ÿ›  Fix a bug by updating CURRENT file so that it points to the correct MANIFEST file after best-efforts recovery.
    • ๐Ÿ›  Fixed a bug where ColumnFamilyHandle objects were not cleaned up in case an error happened during BlobDB's open after the base DB had been opened.
    • ๐Ÿ›  Fix a potential undefined behavior caused by trying to dereference nullable pointer (timestamp argument) in DB::MultiGet.
    • ๐Ÿ›  Fix a bug caused by not including user timestamp in MultiGet LookupKey construction. This can lead to wrong query result since the trailing bytes of a user key, if not shorter than timestamp, will be mistaken for user timestamp.
    • ๐Ÿ›  Fix a bug caused by using wrong compare function when sorting the input keys of MultiGet with timestamps.
    • โฌ†๏ธ Upgraded version of bzip library (1.0.6 -> 1.0.8) used with RocksJava to address potential vulnerabilities if an attacker can manipulate compressed data saved and loaded by RocksDB (not normal). See issue #6703.

    Public API Change

    • Add a ConfigOptions argument to the APIs dealing with converting options to and from strings and files. The ConfigOptions is meant to replace some of the options (such as input_strings_escaped and ignore_unknown_options) and allow for more parameters to be passed in the future without changing the function signature.
    • โž• Add NewFileChecksumGenCrc32cFactory to the file checksum public API, such that the builtin Crc32c based file checksum generator factory can be used by applications.
    • โž• Add IsDirectory to Env and FS to indicate if a path is a directory.

    ๐Ÿ†• New Features

    • โž• Added support for pipelined & parallel compression optimization for BlockBasedTableBuilder. This optimization makes block building, block compression and block appending a pipeline, and uses multiple threads to accelerate block compression. Users can set CompressionOptions::parallel_threads greater than 1 to enable compression parallelism. This feature is experimental for now.
    • Provide an allocator for memkind to be used with block cache. This is to work with memory technologies (Intel DCPMM is one such technology currently available) that require different libraries for allocation and management (such as PMDK and memkind). The high capacities available make it possible to provision large caches (up to several TBs in size) beyond what is achievable with DRAM.
    • Option max_background_flushes can be set dynamically using DB::SetDBOptions().
    • ๐Ÿ–จ Added functionality in sst_dump tool to check the compressed file size for different compression levels and print the time spent on compressing files with each compression type. Added arguments --compression_level_from and --compression_level_to to report size of all compression levels and one compression_type must be specified with it so that it will report compressed sizes of one compression type with different levels.
    • โž• Added statistics for redundant insertions into block cache: rocksdb.block.cache.*add.redundant. (There is currently no coordination to ensure that only one thread loads a table block when many threads are trying to access that same table block.)

    ๐Ÿ› Bug Fixes

    • Fix a bug when making options.bottommost_compression, options.compression_opts and options.bottommost_compression_opts dynamically changeable: the modified values are not written to option files or returned back to users when being queried.
    • Fix a bug where index key comparisons were unaccounted in PerfContext::user_key_comparison_count for lookups in files written with format_version >= 3.
    • ๐Ÿ›  Fix many bloom.filter statistics not being updated in batch MultiGet.

    ๐ŸŽ Performance Improvements

    • ๐Ÿ‘Œ Improve performance of batch MultiGet with partitioned filters, by sharing block cache lookups to applicable filter blocks.
    • โฌ‡๏ธ Reduced memory copies when fetching and uncompressing compressed blocks from sst files.