RocksDB v6.7.3 Release Notes

Release Date: 2020-03-19 // about 4 years ago
  • 6.7.3 (2020-03-18)

    🐛 Bug Fixes

    • 🛠 Fix a data race that might cause crash when calling DB::GetCreationTimeOfOldestFile() by a small chance. The bug was introduced in 6.6 Release.

    6.7.2 (2020-02-24)

    🐛 Bug Fixes

    • 🛠 Fixed a bug of IO Uring partial result handling introduced in 6.7.0.

    6.7.1 (2020-02-13)

    🐛 Bug Fixes

    • 🛠 Fixed issue #6316 that can cause a corruption of the MANIFEST file in the middle when writing to it fails due to no disk space.
    • Batched MultiGet() ignores IO errors while reading data blocks, causing it to potentially continue looking for a key and returning stale results.

    6.7.0 (2020-01-21)

    Public API Change

    • Added a rocksdb::FileSystem class in include/rocksdb/file_system.h to encapsulate file creation/read/write operations, and an option DBOptions::file_system to allow a user to pass in an instance of rocksdb::FileSystem. If its a non-null value, this will take precendence over DBOptions::env for file operations. A new API rocksdb::FileSystem::Default() returns a platform default object. The DBOptions::env option and Env::Default() API will continue to be used for threading and other OS related functions, and where DBOptions::file_system is not specified, for file operations. For storage developers who are accustomed to rocksdb::Env, the interface in rocksdb::FileSystem is new and will probably undergo some changes as more storage systems are ported to it from rocksdb::Env. As of now, no env other than Posix has been ported to the new interface.
    • A new rocksdb::NewSstFileManager() API that allows the caller to pass in separate Env and FileSystem objects.
    • 🔄 Changed Java API for RocksDB.keyMayExist functions to use Holder<byte[]> instead of StringBuilder, so that retrieved values need not decode to Strings.
    • 🔧 A new OptimisticTransactionDBOptions Option that allows users to configure occ validation policy. The default policy changes from kValidateSerial to kValidateParallel to reduce mutex contention.

    🐛 Bug Fixes

    • 🛠 Fix a bug that can cause unnecessary bg thread to be scheduled(#6104).
    • 🛠 Fix crash caused by concurrent CF iterations and drops(#6147).
    • Fix a race condition for cfd->log_number_ between manifest switch and memtable switch (PR 6249) when number of column families is greater than 1.
    • 🛠 Fix a bug on fractional cascading index when multiple files at the same level contain the same smallest user key, and those user keys are for merge operands. In this case, Get() the exact key may miss some merge operands.
    • Delcare kHashSearch index type feature-incompatible with index_block_restart_interval larger than 1.
    • Fixed an issue where the thread pools were not resized upon setting max_background_jobs dynamically through the SetDBOptions interface.
    • 🛠 Fix a bug that can cause write threads to hang when a slowdown/stall happens and there is a mix of writers with WriteOptions::no_slowdown set/unset.
    • 🛠 Fixed an issue where an incorrect "number of input records" value was used to compute the "records dropped" statistics for compactions.

    🆕 New Features

    • It is now possible to enable periodic compactions for the base DB when using BlobDB.
    • BlobDB now garbage collects non-TTL blobs when enable_garbage_collection is set to true in BlobDBOptions. Garbage collection is performed during compaction: any valid blobs located in the oldest N files (where N is the number of non-TTL blob files multiplied by the value of BlobDBOptions::garbage_collection_cutoff) encountered during compaction get relocated to new blob files, and old blob files are dropped once they are no longer needed. Note: we recommend enabling periodic compactions for the base DB when using this feature to deal with the case when some old blob files are kept alive by SSTs that otherwise do not get picked for compaction.
    • 👍 db_bench now supports the garbage_collection_cutoff option for BlobDB.
    • 👉 MultiGet() can use IO Uring to parallelize read from the same SST file. This featuer is by default disabled. It can be enabled with environment variable ROCKSDB_USE_IO_URING.