1. 19 8月, 2021 1 次提交
    • M
      Allow Replayer to report the results of TraceRecords. (#8657) · d10801e9
      Merlin Mao 提交于
      Summary:
      `Replayer::Execute()` can directly returns the result (e.g, request latency, DB::Get() return code, returned value, etc.)
      `Replayer::Replay()` reports the results via a callback function.
      
      New interface:
      `TraceRecordResult` in "rocksdb/trace_record_result.h".
      
      `DBTest2.TraceAndReplay` and `DBTest2.TraceAndManualReplay` are updated accordingly.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8657
      
      Reviewed By: ajkr
      
      Differential Revision: D30290216
      
      Pulled By: autopear
      
      fbshipit-source-id: 3c8d4e6b180ec743de1a9d9dcaee86064c74f0d6
      d10801e9
  2. 12 8月, 2021 1 次提交
    • M
      Make TraceRecord and Replayer public (#8611) · f58d2767
      Merlin Mao 提交于
      Summary:
      New public interfaces:
      `TraceRecord` and `TraceRecord::Handler`, available in "rocksdb/trace_record.h".
      `Replayer`, available in `rocksdb/utilities/replayer.h`.
      
      User can use `DB::NewDefaultReplayer()` to create a Replayer to auto/manual replay a trace file.
      
      Unit tests:
      - `./db_test2 --gtest_filter="DBTest2.TraceAndReplay"`: Updated with the internal API changes.
      - `./db_test2 --gtest_filter="DBTest2.TraceAndManualReplay"`: New for manual replay.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8611
      
      Reviewed By: ajkr
      
      Differential Revision: D30266329
      
      Pulled By: autopear
      
      fbshipit-source-id: 1ecb3cbbedae0f6a67c18f0cc82e002b4d81b6f8
      f58d2767
  3. 06 8月, 2021 1 次提交
    • M
      Make MergeOperator+CompactionFilter/Factory into Customizable Classes (#8481) · d057e832
      mrambacher 提交于
      Summary:
      - Changed MergeOperator, CompactionFilter, and CompactionFilterFactory into Customizable classes.
       - Added Options/Configurable/Object Registration for TTL and Cassandra variants
       - Changed the StringAppend MergeOperators to accept a string delimiter rather than a simple char.  Made the delimiter into a configurable option
       - Added tests for new functionality
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8481
      
      Reviewed By: zhichao-cao
      
      Differential Revision: D30136050
      
      Pulled By: mrambacher
      
      fbshipit-source-id: 271d1772835935b6773abaf018ee71e42f9491af
      d057e832
  4. 09 7月, 2021 1 次提交
    • J
      Add micro-benchmark support (#8493) · 5dd18a8d
      Jay Zhuang 提交于
      Summary:
      Add google benchmark for microbench.
      Add ribbon_bench for benchmark ribbon filter vs. other filters.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8493
      
      Test Plan:
      added test to CI
      To run the benchmark on devhost:
      Install benchmark: `$ sudo dnf install google-benchmark-devel`
      Build and run:
      `$ ROCKSDB_NO_FBCODE=1 DEBUG_LEVEL=0 make microbench`
      or with cmake:
      `$ mkdir build && cd build && cmake .. -DCMAKE_BUILD_TYPE=Release -DWITH_BENCHMARK=1 && make microbench`
      
      Reviewed By: pdillinger
      
      Differential Revision: D29589649
      
      Pulled By: jay-zhuang
      
      fbshipit-source-id: 8fed13b562bef4472f161ecacec1ab6b18911dff
      5dd18a8d
  5. 29 6月, 2021 1 次提交
  6. 24 6月, 2021 1 次提交
  7. 22 6月, 2021 1 次提交
    • L
      Add a class for measuring the amount of garbage generated during compaction (#8426) · 065bea15
      Levi Tamasi 提交于
      Summary:
      This is part of an alternative approach to https://github.com/facebook/rocksdb/issues/8316.
      Unlike that approach, this one relies on key-values getting processed one by one
      during compaction, and does not involve persistence.
      
      Specifically, the patch adds a class `BlobGarbageMeter` that can track the number
      and total size of blobs in a (sub)compaction's input and output on a per-blob file
      basis. This information can then be used to compute the amount of additional
      garbage generated by the compaction for any given blob file by subtracting the
      "outflow" from the "inflow."
      
      Note: this patch only adds `BlobGarbageMeter` and associated unit tests. I plan to
      hook up this class to the input and output of `CompactionIterator` in a subsequent PR.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8426
      
      Test Plan: `make check`
      
      Reviewed By: jay-zhuang
      
      Differential Revision: D29242250
      
      Pulled By: ltamasi
      
      fbshipit-source-id: 597e50ad556540e413a50e804ba15bc044d809bb
      065bea15
  8. 15 6月, 2021 1 次提交
  9. 11 6月, 2021 1 次提交
  10. 10 6月, 2021 1 次提交
    • L
      Add a clipping internal iterator (#8327) · db325a59
      Levi Tamasi 提交于
      Summary:
      Logically, subcompactions process a key range [start, end); however, the way
      this is currently implemented is that the `CompactionIterator` for any given
      subcompaction keeps processing key-values until it actually outputs a key that
      is out of range, which is then discarded. Instead of doing this, the patch
      introduces a new type of internal iterator called `ClippingIterator` which wraps
      another internal iterator and "clips" its range of key-values so that any KVs
      returned are strictly in the [start, end) interval. This does eliminate a (minor)
      inefficiency by stopping processing in subcompactions exactly at the limit;
      however, the main motivation is related to BlobDB: namely, we need this to be
      able to measure the amount of garbage generated by a subcompaction
      precisely and prevent off-by-one errors.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8327
      
      Test Plan: `make check`
      
      Reviewed By: siying
      
      Differential Revision: D28761541
      
      Pulled By: ltamasi
      
      fbshipit-source-id: ee0e7229f04edabbc7bed5adb51771fbdc287f69
      db325a59
  11. 02 6月, 2021 1 次提交
    • J
      Fix cmake build failure with gflags (#8324) · eda83eaa
      Jay Zhuang 提交于
      Summary:
      - Fix cmake build failure with gflags.
      - Add CI tests for both gflags 2.1 and 2.2.
      - Fix ctest config with gtest.
      - Add CI to run test with ctest.
      
      One benefit of ctest is it support timeout, it's set to 5min in our CI, so we will know which test is hang.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8324
      
      Test Plan: CI pass
      
      Reviewed By: ajkr
      
      Differential Revision: D28762517
      
      Pulled By: jay-zhuang
      
      fbshipit-source-id: 09063c5af5f9f33abfcdeb48593acbd9826cd199
      eda83eaa
  12. 22 5月, 2021 1 次提交
    • S
      Try to build with liburing by default. (#8322) · bd3d080e
      sdong 提交于
      Summary:
      By default, try to build with liburing. For make, if ROCKSDB_USE_IO_URING is not set, treat as 1, which means RocksDB will try to build with liburing. For cmake, add WITH_LIBURING to control it, with default on.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8322
      
      Test Plan: Build using cmake and make.
      
      Reviewed By: anand1976
      
      Differential Revision: D28586498
      
      fbshipit-source-id: cfd39159ab697f4b93a9293a59c07f839b1e7ed5
      bd3d080e
  13. 20 5月, 2021 3 次提交
    • J
      Add remote compaction public API (#8300) · 3786181a
      Jay Zhuang 提交于
      Summary: Pull Request resolved: https://github.com/facebook/rocksdb/pull/8300
      
      Reviewed By: ajkr
      
      Differential Revision: D28464726
      
      Pulled By: jay-zhuang
      
      fbshipit-source-id: 49e9f4fb791808a6cbf39a7b1a331373f645fc5e
      3786181a
    • P
      Use deleters to label cache entries and collect stats (#8297) · 311a544c
      Peter Dillinger 提交于
      Summary:
      This change gathers and publishes statistics about the
      kinds of items in block cache. This is especially important for
      profiling relative usage of cache by index vs. filter vs. data blocks.
      It works by iterating over the cache during periodic stats dump
      (InternalStats, stats_dump_period_sec) or on demand when
      DB::Get(Map)Property(kBlockCacheEntryStats), except that for
      efficiency and sharing among column families, saved data from
      the last scan is used when the data is not considered too old.
      
      The new information can be seen in info LOG, for example:
      
          Block cache LRUCache@0x7fca62229330 capacity: 95.37 MB collections: 8 last_copies: 0 last_secs: 0.00178 secs_since: 0
          Block cache entry stats(count,size,portion): DataBlock(7092,28.24 MB,29.6136%) FilterBlock(215,867.90 KB,0.888728%) FilterMetaBlock(2,5.31 KB,0.00544%) IndexBlock(217,180.11 KB,0.184432%) WriteBuffer(1,256.00 KB,0.262144%) Misc(1,0.00 KB,0%)
      
      And also through DB::GetProperty and GetMapProperty (here using
      ldb just for demonstration):
      
          $ ./ldb --db=/dev/shm/dbbench/ get_property rocksdb.block-cache-entry-stats
          rocksdb.block-cache-entry-stats.bytes.data-block: 0
          rocksdb.block-cache-entry-stats.bytes.deprecated-filter-block: 0
          rocksdb.block-cache-entry-stats.bytes.filter-block: 0
          rocksdb.block-cache-entry-stats.bytes.filter-meta-block: 0
          rocksdb.block-cache-entry-stats.bytes.index-block: 178992
          rocksdb.block-cache-entry-stats.bytes.misc: 0
          rocksdb.block-cache-entry-stats.bytes.other-block: 0
          rocksdb.block-cache-entry-stats.bytes.write-buffer: 0
          rocksdb.block-cache-entry-stats.capacity: 8388608
          rocksdb.block-cache-entry-stats.count.data-block: 0
          rocksdb.block-cache-entry-stats.count.deprecated-filter-block: 0
          rocksdb.block-cache-entry-stats.count.filter-block: 0
          rocksdb.block-cache-entry-stats.count.filter-meta-block: 0
          rocksdb.block-cache-entry-stats.count.index-block: 215
          rocksdb.block-cache-entry-stats.count.misc: 1
          rocksdb.block-cache-entry-stats.count.other-block: 0
          rocksdb.block-cache-entry-stats.count.write-buffer: 0
          rocksdb.block-cache-entry-stats.id: LRUCache@0x7f3636661290
          rocksdb.block-cache-entry-stats.percent.data-block: 0.000000
          rocksdb.block-cache-entry-stats.percent.deprecated-filter-block: 0.000000
          rocksdb.block-cache-entry-stats.percent.filter-block: 0.000000
          rocksdb.block-cache-entry-stats.percent.filter-meta-block: 0.000000
          rocksdb.block-cache-entry-stats.percent.index-block: 2.133751
          rocksdb.block-cache-entry-stats.percent.misc: 0.000000
          rocksdb.block-cache-entry-stats.percent.other-block: 0.000000
          rocksdb.block-cache-entry-stats.percent.write-buffer: 0.000000
          rocksdb.block-cache-entry-stats.secs_for_last_collection: 0.000052
          rocksdb.block-cache-entry-stats.secs_since_last_collection: 0
      
      Solution detail - We need some way to flag what kind of blocks each
      entry belongs to, preferably without changing the Cache API.
      One of the complications is that Cache is a general interface that could
      have other users that don't adhere to whichever convention we decide
      on for keys and values. Or we would pay for an extra field in the Handle
      that would only be used for this purpose.
      
      This change uses a back-door approach, the deleter, to indicate the
      "role" of a Cache entry (in addition to the value type, implicitly).
      This has the added benefit of ensuring proper code origin whenever we
      recognize a particular role for a cache entry; if the entry came from
      some other part of the code, it will use an unrecognized deleter, which
      we simply attribute to the "Misc" role.
      
      An internal API makes for simple instantiation and automatic
      registration of Cache deleters for a given value type and "role".
      
      Another internal API, CacheEntryStatsCollector, solves the problem of
      caching the results of a scan and sharing them, to ensure scans are
      neither excessive nor redundant so as not to harm Cache performance.
      
      Because code is added to BlocklikeTraits, it is pulled out of
      block_based_table_reader.cc into its own file.
      
      This is a reformulation of https://github.com/facebook/rocksdb/issues/8276, without the type checking option
      (could still be added), and with actual stat gathering.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8297
      
      Test Plan: manual testing with db_bench, and a couple of basic unit tests
      
      Reviewed By: ltamasi
      
      Differential Revision: D28488721
      
      Pulled By: pdillinger
      
      fbshipit-source-id: 472f524a9691b5afb107934be2d41d84f2b129fb
      311a544c
    • A
      Allow cache_bench/db_bench to use a custom secondary cache (#8312) · 13232e11
      anand76 提交于
      Summary:
      This PR adds a ```-secondary_cache_uri``` option to the cache_bench and db_bench tools to allow the user to specify a custom secondary cache URI. The object registry is used to create an instance of the ```SecondaryCache``` object of the type specified in the URI.
      
      The main cache_bench code is packaged into a separate library, similar to db_bench.
      
      An example invocation of db_bench with a secondary cache URI -
      ```db_bench --env_uri=ws://ws.flash_sandbox.vll1_2/ -db=anand/nvm_cache_2 -use_existing_db=true -benchmarks=readrandom -num=30000000 -key_size=32 -value_size=256 -use_direct_reads=true -cache_size=67108864 -cache_index_and_filter_blocks=true  -secondary_cache_uri='cachelibwrapper://filename=/home/anand76/nvm_cache/cache_file;size=2147483648;regionSize=16777216;admPolicy=random;admProbability=1.0;volatileSize=8388608;bktPower=20;lockPower=12' -partition_index_and_filters=true -duration=1800```
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8312
      
      Reviewed By: zhichao-cao
      
      Differential Revision: D28544325
      
      Pulled By: anand1976
      
      fbshipit-source-id: 8f209b9af900c459dc42daa7a610d5f00176eeed
      13232e11
  14. 13 5月, 2021 1 次提交
  15. 22 4月, 2021 1 次提交
  16. 13 4月, 2021 1 次提交
  17. 07 4月, 2021 1 次提交
    • P
      Make backups openable as read-only DBs (#8142) · 879357fd
      Peter Dillinger 提交于
      Summary:
      A current limitation of backups is that you don't know the
      exact database state of when the backup was taken. With this new
      feature, you can at least inspect the backup's DB state without
      restoring it by opening it as a read-only DB.
      
      Rather than add something like OpenAsReadOnlyDB to the BackupEngine API,
      which would inhibit opening stackable DB implementations read-only
      (if/when their APIs support it), we instead provide a DB name and Env
      that can be used to open as a read-only DB.
      
      Possible follow-up work:
      
      * Add a version of GetBackupInfo for a single backup.
      * Let CreateNewBackup return the BackupID of the newly-created backup.
      
      Implementation details:
      
      Refactored ChrootFileSystem to split off new base class RemapFileSystem,
      which allows more general remapping of files. We use this base class to
      implement BackupEngineImpl::RemapSharedFileSystem.
      
      To minimize API impact, I decided to just add these fields `name_for_open`
      and `env_for_open` to those set by GetBackupInfo when
      include_file_details=true. Creating the RemapSharedFileSystem adds a bit
      to the memory consumption, perhaps unnecessarily in some cases, but this
      has been mitigated by (a) only initialize the RemapSharedFileSystem
      lazily when GetBackupInfo with include_file_details=true is called, and
      (b) using the existing `shared_ptr<FileInfo>` objects to hold most of the
      mapping data.
      
      To enhance API safety, RemapSharedFileSystem is wrapped by new
      ReadOnlyFileSystem which rejects any attempts to write. This uncovered a
      couple of places in which DB::OpenForReadOnly would write to the
      filesystem, so I fixed these. Added a release note because this affects
      logging.
      
      Additional minor refactoring in backupable_db.cc to support the new
      functionality.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8142
      
      Test Plan:
      new test (run with ASAN and UBSAN), added to stress test and
      ran it for a while with amplified backup_one_in
      
      Reviewed By: ajkr
      
      Differential Revision: D27535408
      
      Pulled By: pdillinger
      
      fbshipit-source-id: 04666d310aa0261ef6b2385c43ca793ce1dfd148
      879357fd
  18. 24 3月, 2021 1 次提交
  19. 16 3月, 2021 1 次提交
  20. 10 3月, 2021 3 次提交
    • E
      make:Fix c header prototypes (#7994) · 7381dad1
      Ed rodriguez 提交于
      Summary: Pull Request resolved: https://github.com/facebook/rocksdb/pull/7994
      
      Reviewed By: jay-zhuang
      
      Differential Revision: D26904603
      
      Pulled By: ajkr
      
      fbshipit-source-id: 0af92a51de895b40c7faaa4f0870b3f63279fe21
      7381dad1
    • P
      Refactor: add LineFileReader and Status::MustCheck (#8026) · 4b18c46d
      Peter Dillinger 提交于
      Summary:
      Removed confusing, awkward, and undocumented internal API
      ReadOneLine and replaced with very simple LineFileReader.
      
      In refactoring backupable_db.cc, this has the side benefit of
      removing the arbitrary cap on the size of backup metadata files.
      
      Also added Status::MustCheck to make it easy to mark a Status as
      "must check." Using this, I can ensure that after
      LineFileReader::ReadLine returns false the caller checks GetStatus().
      
      Also removed some excessive conditional compilation in status.h
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8026
      
      Test Plan: added unit test, and running tests with ASSERT_STATUS_CHECKED
      
      Reviewed By: mrambacher
      
      Differential Revision: D26831687
      
      Pulled By: pdillinger
      
      fbshipit-source-id: ef749c265a7a26bb13cd44f6f0f97db2955f6f0f
      4b18c46d
    • X
      Add $(ARTIFACT_SUFFIX} to benchmark tools built with cmake (#8016) · 8643d63b
      xinyuliu 提交于
      Summary:
      Add ${ARTIFACT_SUFFIX} to benchmark tool names to enable differentiating jemalloc and non-jemalloc versions.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8016
      
      Reviewed By: jay-zhuang
      
      Differential Revision: D26907007
      
      Pulled By: ajkr
      
      fbshipit-source-id: 78d3b3372b5454d52d5b663ea982135ea9cf7bf8
      8643d63b
  21. 27 2月, 2021 1 次提交
    • P
      Refine Ribbon configuration, improve testing, add Homogeneous (#7879) · a8b3b9a2
      Peter Dillinger 提交于
      Summary:
      This change only affects non-schema-critical aspects of the production candidate Ribbon filter. Specifically, it refines choice of internal configuration parameters based on inputs. The changes are minor enough that the schema tests in bloom_test, some of which depend on this, are unaffected. There are also some minor optimizations and refactorings.
      
      This would be a schema change for "smash" Ribbon, to fix some known issues with small filters, but "smash" Ribbon is not accessible in public APIs. Unit test CompactnessAndBacktrackAndFpRate updated to test small and medium-large filters. Run with --thoroughness=100 or so for much better detection power (not appropriate for continuous regression testing).
      
      Homogenous Ribbon:
      This change adds internally a Ribbon filter variant we call Homogeneous Ribbon, in collaboration with Stefan Walzer. The expected "result" value for every key is zero, instead of computed from a hash. Entropy for queries not to be false positives comes from free variables ("overhead") in the solution structure, which are populated pseudorandomly. Construction is slightly faster for not tracking result values, and never fails. Instead, FP rate can jump up whenever and whereever entries are packed too tightly. For small structures, we can choose overhead to make this FP rate jump unlikely, as seen in updated unit test CompactnessAndBacktrackAndFpRate.
      
      Unlike standard Ribbon, Homogeneous Ribbon seems to scale to arbitrary number of keys when accepting an FP rate penalty for small pockets of high FP rate in the structure. For example, 64-bit ribbon with 8 solution columns and 10% allocated space overhead for slots seems to achieve about 10.5% space overhead vs. information-theoretic minimum based on its observed FP rate with expected pockets of degradation. (FP rate is close to 1/256.) If targeting a higher FP rate with fewer solution columns, Homogeneous Ribbon can be even more space efficient, because the penalty from degradation is relatively smaller. If targeting a lower FP rate, Homogeneous Ribbon is less space efficient, as more allocated overhead is needed to keep the FP rate impact of degradation relatively under control. The new OptimizeHomogAtScale tool in ribbon_test helps to find these optimal allocation overheads for different numbers of solution columns. And Ribbon widths, with 128-bit Ribbon apparently cutting space overheads in half vs. 64-bit.
      
      Other misc item specifics:
      * Ribbon APIs in util/ribbon_config.h now provide configuration data for not just 5% construction failure rate (95% success), but also 50% and 0.1%.
        * Note that the Ribbon structure does not exhibit "threshold" behavior as standard Xor filter does, so there is a roughly fixed space penalty to cut construction failure rate in half. Thus, there isn't really an "almost sure" setting.
        * Although we can extrapolate settings for large filters, we don't have a good formula for configuring smaller filters (< 2^17 slots or so), and efforts to summarize with a formula have failed. Thus, small data is hard-coded from updated FindOccupancy tool.
      * Enhances ApproximateNumEntries for public API Ribbon using more precise data (new API GetNumToAdd), thus a more accurate but not perfect reversal of CalculateSpace. (bloom_test updated to expect the greater precision)
      * Move EndianSwapValue from coding.h to coding_lean.h to keep Ribbon code easily transferable from RocksDB
      * Add some missing 'const' to member functions
      * Small optimization to 128-bit BitParity
      * Small refactoring of BandingStorage in ribbon_alg.h to support Homogeneous Ribbon
      * CompactnessAndBacktrackAndFpRate now has an "expand" test: on construction failure, a possible alternative to re-seeding hash functions is simply to increase the number of slots (allocated space overhead) and try again with essentially the same hash values. (Start locations will be different roundings of the same scaled hash values--because fastrange not mod.) This seems to be as effective or more effective than re-seeding, as long as we increase the number of slots (m) by roughly m += m/w where w is the Ribbon width. This way, there is effectively an expansion by one slot for each ribbon-width window in the banding. (This approach assumes that getting "bad data" from your hash function is as unlikely as it naturally should be, e.g. no adversary.)
      * 32-bit and 16-bit Ribbon configurations are added to ribbon_test for understanding their behavior, e.g. with FindOccupancy. They are not considered useful at this time and not tested with CompactnessAndBacktrackAndFpRate.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7879
      
      Test Plan: unit test updates included
      
      Reviewed By: jay-zhuang
      
      Differential Revision: D26371245
      
      Pulled By: pdillinger
      
      fbshipit-source-id: da6600d90a3785b99ad17a88b2a3027710b4ea3a
      a8b3b9a2
  22. 26 2月, 2021 1 次提交
    • Y
      Compaction filter support for (new) BlobDB (#7974) · cef4a6c4
      Yanqin Jin 提交于
      Summary:
      Allow applications to implement a custom compaction filter and pass it to BlobDB.
      
      The compaction filter's custom logic can operate on blobs.
      To do so, application needs to subclass `CompactionFilter` abstract class and implement `FilterV2()` method.
      Optionally, a method called `ShouldFilterBlobByKey()` can be implemented if application's custom logic rely solely
      on the key to make a decision without reading the blob, thus saving extra IO. Examples can be found in
      db/blob/db_blob_compaction_test.cc.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7974
      
      Test Plan: make check
      
      Reviewed By: ltamasi
      
      Differential Revision: D26509280
      
      Pulled By: riversand963
      
      fbshipit-source-id: 59f9ae5614c4359de32f4f2b16684193cc537b39
      cef4a6c4
  23. 24 2月, 2021 1 次提交
    • S
      Always expose WITH_GFLAGS option to user (#7990) · 75c6ffb9
      sherriiiliu 提交于
      Summary:
      WITH_GFLAGS option does not work on MSVC.
      
       I checked the usage of [CMAKE_DEPENDENT_OPTION](https://cmake.org/cmake/help/latest/module/CMakeDependentOption.html). It says if the `depends` condition is not true, it will set the `option` to the value given by `force` and hides the option from the user. Therefore, `CMAKE_DEPENDENT_OPTION(WITH_GFLAGS "build with GFlags" ON "NOT MSVC;NOT MINGW" OFF)` will hide WITH_GFLAGS option from user if it is running on MSVC or MINGW and always set WITH_GFLAGS to be OFF. To expose WITH_GFLAGS option to user, I removed CMAKE_DEPENDENT_OPTION and split the logic into if-else statements
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7990
      
      Reviewed By: jay-zhuang
      
      Differential Revision: D26615755
      
      Pulled By: ajkr
      
      fbshipit-source-id: 33ca39a73423d9516510c15aaf9efb5c4072cdf9
      75c6ffb9
  24. 23 2月, 2021 1 次提交
  25. 11 2月, 2021 1 次提交
    • X
      Build a full RocksDB on M1 macs (#7943) · 7ebde3da
      Xavier Deguillard 提交于
      Summary:
      With M1 macs being available, it is possible that RocksDB will be built on them, without the resulting artifacts to be intended for iOS, where a non-lite RocksDB is needed.
      
      It is not clear to me why the ROCKSDB_LITE cmake option isn't used for iOS consumer, so sending this pull request as a way to foster discussion and to find a path forward to get a full RocksDB build on M1.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7943
      
      Test Plan:
      Applied the following patch:
      ```
       diff --git a/fbcode/opensource/fbcode_builder/manifests/rocksdb b/fbcode/opensource/fbcode_builder/manifests/rocksdb
       --- a/fbcode/opensource/fbcode_builder/manifests/rocksdb
      +++ b/fbcode/opensource/fbcode_builder/manifests/rocksdb
      @@ -2,8 +2,8 @@
       name = rocksdb
      
       [download]
      -url = https://github.com/facebook/rocksdb/archive/v6.8.1.tar.gz
      -sha256 = ca192a06ed3bcb9f09060add7e9d0daee1ae7a8705a3d5ecbe41867c5e2796a2
      +url = https://github.com/xavierd/rocksdb/archive/master.zip
      +sha256 = f93f3f92df66a8401659e35398749d5910b92bd9c14b8354a35ea8852865c422
      
       [dependencies]
       lz4
      @@ -11,7 +11,7 @@
      
       [build]
       builder = cmake
      -subdir = rocksdb-6.8.1
      +subdir = rocksdb-master
      
       [cmake.defines]
       WITH_SNAPPY=ON
      ```
      
      And ran `getdeps build eden` on an M1 macbook. The build used to fail at link time due to some RocksDB symbols not being found, it now fails for another reason (x86_64 Rust symbols).
      
      Reviewed By: jay-zhuang
      
      Differential Revision: D26324049
      
      Pulled By: xavierd
      
      fbshipit-source-id: 12d86f3395709c4c323f440844e3ae65672aef2d
      7ebde3da
  26. 02 2月, 2021 1 次提交
    • M
      Fix build_version.cc generation error if GIT not found (#7916) · 21218316
      mrambacher 提交于
      Summary:
      (Fixes a regression introduced in the build_version generation PR https://github.com/facebook/rocksdb/issues/7866 )
      
      In the Makefile case, needed to ignore stderr on the tag (everywhere else was fine).
      
      In the CMAKE case, no GIT implies "changes" so that we use the system date rather than the empty GIT date.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7916
      
      Test Plan: Built in a tree that did not contain the ".git" directory.  Validated that no errors appeared during the build process and that the build version date was not empty.
      
      Reviewed By: jay-zhuang
      
      Differential Revision: D26169203
      
      Pulled By: mrambacher
      
      fbshipit-source-id: 3288a23b48d97efed5e5b38c9aefb3ef1153fa16
      21218316
  27. 30 1月, 2021 1 次提交
    • A
      Integrity protection for live updates to WriteBatch (#7748) · 78ee8564
      Andrew Kryczka 提交于
      Summary:
      This PR adds the foundation classes for key-value integrity protection and the first use case: protecting live updates from the source buffers added to `WriteBatch` through the destination buffer in `MemTable`. The width of the protection info is not yet configurable -- only eight bytes per key is supported. This PR allows users to enable protection by constructing `WriteBatch` with `protection_bytes_per_key == 8`. It does not yet expose a way for users to get integrity protection via other write APIs (e.g., `Put()`, `Merge()`, `Delete()`, etc.).
      
      The foundation classes (`ProtectionInfo.*`) embed the coverage info in their type, and provide `Protect.*()` and `Strip.*()` functions to navigate between types with different coverage. For making bytes per key configurable (for powers of two up to eight) in the future, these classes are templated on the unsigned integer type used to store the protection info. That integer contains the XOR'd result of hashes with independent seeds for all covered fields. For integer fields, the hash is computed on the raw unadjusted bytes, so the result is endian-dependent. The most significant bytes are truncated when the hash value (8 bytes) is wider than the protection integer.
      
      When `WriteBatch` is constructed with `protection_bytes_per_key == 8`, we hold a `ProtectionInfoKVOTC` (i.e., one that covers key, value, optype aka `ValueType`, timestamp, and CF ID) for each entry added to the batch. The protection info is generated from the original buffers passed by the user, as well as the original metadata generated internally. When writing to memtable, each entry is transformed to a `ProtectionInfoKVOTS` (i.e., dropping coverage of CF ID and adding coverage of sequence number), since at that point we know the sequence number, and have already selected a memtable corresponding to a particular CF. This protection info is verified once the entry is encoded in the `MemTable` buffer.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7748
      
      Test Plan:
      - an integration test to verify a wide variety of single-byte changes to the encoded `MemTable` buffer are caught
      - add to stress/crash test to verify it works in variety of configs/operations without intentional corruption
      - [deferred] unit tests for `ProtectionInfo.*` classes for edge cases like KV swap, `SliceParts` and `Slice` APIs are interchangeable, etc.
      
      Reviewed By: pdillinger
      
      Differential Revision: D25754492
      
      Pulled By: ajkr
      
      fbshipit-source-id: e481bac6c03c2ab268be41359730f1ceb9964866
      78ee8564
  28. 29 1月, 2021 1 次提交
    • M
      Make builds reproducible (#7866) · 0a9a05ae
      mrambacher 提交于
      Summary:
      Closes https://github.com/facebook/rocksdb/issues/7035
      
      Changed how build_version.cc was generated:
      - Included the GIT tag/branch in the build_version file
      - Changed the "Build Date" to be:
            - If the GIT branch is "clean" (no changes), the date of the last git commit
            - If the branch is not clean, the current date
       - Added APIs to access the "build information", rather than accessing the strings directly.
      
      The build_version.cc file is now regenerated whenever the library objects are rebuilt.
      
      Verified that the built files remain the same size across builds on a "clean build" and the same information is reported by sst_dump --version
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7866
      
      Reviewed By: pdillinger
      
      Differential Revision: D26086565
      
      Pulled By: mrambacher
      
      fbshipit-source-id: 6fcbe47f6033989d5cf26a0ccb6dfdd9dd239d7f
      0a9a05ae
  29. 26 1月, 2021 1 次提交
    • M
      Add a SystemClock class to capture the time functions of an Env (#7858) · 12f11373
      mrambacher 提交于
      Summary:
      Introduces and uses a SystemClock class to RocksDB.  This class contains the time-related functions of an Env and these functions can be redirected from the Env to the SystemClock.
      
      Many of the places that used an Env (Timer, PerfStepTimer, RepeatableThread, RateLimiter, WriteController) for time-related functions have been changed to use SystemClock instead.  There are likely more places that can be changed, but this is a start to show what can/should be done.  Over time it would be nice to migrate most (if not all) of the uses of the time functions from the Env to the SystemClock.
      
      There are several Env classes that implement these functions.  Most of these have not been converted yet to SystemClock implementations; that will come in a subsequent PR.  It would be good to unify many of the Mock Timer implementations, so that they behave similarly and be tested similarly (some override Sleep, some use a MockSleep, etc).
      
      Additionally, this change will allow new methods to be introduced to the SystemClock (like https://github.com/facebook/rocksdb/issues/7101 WaitFor) in a consistent manner across a smaller number of classes.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7858
      
      Reviewed By: pdillinger
      
      Differential Revision: D26006406
      
      Pulled By: mrambacher
      
      fbshipit-source-id: ed10a8abbdab7ff2e23d69d85bd25b3e7e899e90
      12f11373
  30. 22 1月, 2021 1 次提交
  31. 21 1月, 2021 1 次提交
  32. 23 12月, 2020 1 次提交
    • S
      Range Locking: Implementation of range locking (#7506) · daab7603
      Sergei Petrunia 提交于
      Summary:
      Range Locking - an implementation based on the locktree library
      
      - Add a RangeTreeLockManager and RangeTreeLockTracker which implement
        range locking using the locktree library.
      - Point locks are handled as locks on single-point ranges.
      - Add a unit test: range_locking_test
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7506
      
      Reviewed By: akankshamahajan15
      
      Differential Revision: D25320703
      
      Pulled By: cheng-chang
      
      fbshipit-source-id: f86347384b42ba2b0257d67eca0f45f806b69da7
      daab7603
  33. 22 12月, 2020 1 次提交
  34. 10 12月, 2020 1 次提交
  35. 12 11月, 2020 1 次提交
    • M
      Create a Customizable class to load classes and configurations (#6590) · c442f680
      mrambacher 提交于
      Summary:
      The Customizable class is an extension of the Configurable class and allows instances to be created by a name/ID.  Classes that extend customizable can define their Type (e.g. "TableFactory", "Cache") and  a method to instantiate them (TableFactory::CreateFromString).  Customizable objects can be registered with the ObjectRegistry and created dynamically.
      
      Future PRs will make more types of objects extend Customizable.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6590
      
      Reviewed By: cheng-chang
      
      Differential Revision: D24841553
      
      Pulled By: zhichao-cao
      
      fbshipit-source-id: d0c2132bd932e971cbfe2c908ca2e5db30c5e155
      c442f680
  36. 26 10月, 2020 1 次提交
    • P
      Ribbon: initial (general) algorithms and basic unit test (#7491) · 25d54c79
      Peter Dillinger 提交于
      Summary:
      This is intended as the first commit toward a near-optimal alternative to static Bloom filters for SSTs. Stephan Walzer and I have agreed upon the name "Ribbon" for a PHSF based on his linear system construction in "Efficient Gauss Elimination for Near-Quadratic Matrices with One Short Random Block per Row, with Applications" ("SGauss") and my much faster "on the fly" algorithm for gaussian elimination (or for this linear system, "banding"), which can be faster than peeling while also more compact and flexible. See util/ribbon_alg.h for more detailed introduction and background. RIBBON = Rapid Incremental Boolean Banding ON-the-fly
      
      This commit just adds generic (templatized) core algorithms and a basic unit test showing some features, including the ability to construct structures within 2.5% space overhead vs. information theoretic lower bound. (Compare to cache-local Bloom filter's ~50% space overhead -> ~30% reduction anticipated.) This commit does not include the storage scheme necessary to make queries fast, especially for filter queries, nor fractional "result bits", but there is some description already and those implementations will come soon. Nor does this commit add FilterPolicy support, for use in SST files, but that will also come soon.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7491
      
      Reviewed By: jay-zhuang
      
      Differential Revision: D24517954
      
      Pulled By: pdillinger
      
      fbshipit-source-id: 0119ee597e250d7e0edd38ada2ba50d755606fa7
      25d54c79