• P
    Experimental support for SST unique IDs (#8990) · ad5325a7
    Peter Dillinger 提交于
    Summary:
    * New public header unique_id.h and function GetUniqueIdFromTableProperties
    which computes a universally unique identifier based on table properties
    of table files from recent RocksDB versions.
    * Generation of DB session IDs is refactored so that they are
    guaranteed unique in the lifetime of a process running RocksDB.
    (SemiStructuredUniqueIdGen, new test included.) Along with file numbers,
    this enables SST unique IDs to be guaranteed unique among SSTs generated
    in a single process, and "better than random" between processes.
    See https://github.com/pdillinger/unique_id
    * In addition to public API producing 'external' unique IDs, there is a function
    for producing 'internal' unique IDs, with functions for converting between the
    two. In short, the external ID is "safe" for things people might do with it, and
    the internal ID enables more "power user" features for the future. Specifically,
    the external ID goes through a hashing layer so that any subset of bits in the
    external ID can be used as a hash of the full ID, while also preserving
    uniqueness guarantees in the first 128 bits (bijective both on first 128 bits
    and on full 192 bits).
    
    Intended follow-up:
    * Use the internal unique IDs in cache keys. (Avoid conflicts with https://github.com/facebook/rocksdb/issues/8912) (The file offset can be XORed into
    the third 64-bit value of the unique ID.)
    * Publish the external unique IDs in FileStorageInfo (https://github.com/facebook/rocksdb/issues/8968)
    
    Pull Request resolved: https://github.com/facebook/rocksdb/pull/8990
    
    Test Plan:
    Unit tests added, and checking of unique ids in stress test.
    NOTE in stress test we do not generate nearly enough files to thoroughly
    stress uniqueness, but the test trims off pieces of the ID to check for
    uniqueness so that we can infer (with some assumptions) stronger
    properties in the aggregate.
    
    Reviewed By: zhichao-cao, mrambacher
    
    Differential Revision: D31582865
    
    Pulled By: pdillinger
    
    fbshipit-source-id: 1f620c4c86af9abe2a8d177b9ccf2ad2b9f48243
    ad5325a7
CMakeLists.txt 49.4 KB