1. 02 7月, 2021 1 次提交
    • B
      Memtable "MemPurge" prototype (#8454) · 9dc887ec
      Baptiste Lemaire 提交于
      Summary:
      Implement an experimental feature called "MemPurge", which consists in purging "garbage" bytes out of a memtable and reuse the memtable struct instead of making it immutable and eventually flushing its content to storage.
      The prototype is by default deactivated and is not intended for use. It is intended for correctness and validation testing. At the moment, the "MemPurge" feature can be switched on by using the `options.experimental_allow_mempurge` flag. For this early stage, when the allow_mempurge flag is set to `true`, all the flush operations will be rerouted to perform a MemPurge. This is a temporary design decision that will give us the time to explore meaningful heuristics to use MemPurge at the right time for relevant workloads . Moreover, the current MemPurge operation only supports `Puts`, `Deletes`, `DeleteRange` operations, and handles `Iterators` as well as `CompactionFilter`s that are invoked at flush time .
      Three unit tests are added to `db_flush_test.cc` to test if MemPurge works correctly (and checks that the previously mentioned operations are fully supported thoroughly tested).
      One noticeable design decision is the timing of the MemPurge operation in the memtable workflow: for this prototype, the mempurge happens when the memtable is switched (and usually made immutable). This is an inefficient process because it implies that the entirety of the MemPurge operation happens while holding the db_mutex. Future commits will make the MemPurge operation a background task (akin to the regular flush operation) and aim at drastically enhancing the performance of this operation. The MemPurge is also not fully "WAL-compatible" yet, but when the WAL is full, or when the regular MemPurge operation fails (or when the purged memtable still needs to be flushed), a regular flush operation takes place. Later commits will also correct these behaviors.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8454
      
      Reviewed By: anand1976
      
      Differential Revision: D29433971
      
      Pulled By: bjlemaire
      
      fbshipit-source-id: 6af48213554e35048a7e03816955100a80a26dc5
      9dc887ec
  2. 18 5月, 2021 1 次提交
  3. 28 4月, 2021 2 次提交
  4. 23 4月, 2021 1 次提交
  5. 16 4月, 2021 1 次提交
    • M
      Add Blob Options to C API (#8148) · 4c41e51c
      mrambacher 提交于
      Summary:
      Added the Blob option settings from the AdvancedColmnFamilyOptions to the C API.
      
      There are no tests for getting/setting options in the C API currently, hence no specific test plans.  Should there be a some?
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8148
      
      Reviewed By: ltamasi
      
      Differential Revision: D27568495
      
      Pulled By: mrambacher
      
      fbshipit-source-id: 3a52b784467ea2c4bc58be5f75c5d41f0a5c55d6
      4c41e51c
  6. 10 4月, 2021 1 次提交
  7. 27 3月, 2021 1 次提交
  8. 20 3月, 2021 2 次提交
    • S
      Include C++ standard library headers instead of C compatibility headers (#8068) · d9be6556
      storagezhang 提交于
      Summary: Pull Request resolved: https://github.com/facebook/rocksdb/pull/8068
      
      Reviewed By: zhichao-cao
      
      Differential Revision: D27147685
      
      Pulled By: riversand963
      
      fbshipit-source-id: 5428b1c0142ecae17c977fba31a6d49b52983d1c
      d9be6556
    • S
      Add default in switch (#8065) · c7063242
      storagezhang 提交于
      Summary:
      switch may not cover all branch in `db/c.cc`:
      
      ```c++
      void rocksdb_options_set_access_hint_on_compaction_start(
          rocksdb_options_t* opt, int v) {
        switch(v) {
          case 0:
            opt->rep.access_hint_on_compaction_start =
                ROCKSDB_NAMESPACE::Options::NONE;
            break;
          case 1:
            opt->rep.access_hint_on_compaction_start =
                ROCKSDB_NAMESPACE::Options::NORMAL;
            break;
          case 2:
            opt->rep.access_hint_on_compaction_start =
                ROCKSDB_NAMESPACE::Options::SEQUENTIAL;
            break;
          case 3:
            opt->rep.access_hint_on_compaction_start =
                ROCKSDB_NAMESPACE::Options::WILLNEED;
            break;
        }
      }
      ```
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8065
      
      Reviewed By: riversand963
      
      Differential Revision: D27102892
      
      Pulled By: zhichao-cao
      
      fbshipit-source-id: ad1d20d192712878e61597311ba75b55df0066d7
      c7063242
  9. 20 2月, 2021 1 次提交
    • A
      Limit buffering for collecting samples for compression dictionary (#7970) · d904233d
      Andrew Kryczka 提交于
      Summary:
      For dictionary compression, we need to collect some representative samples of the data to be compressed, which we use to either generate or train (when `CompressionOptions::zstd_max_train_bytes > 0`) a dictionary. Previously, the strategy was to buffer all the data blocks during flush, and up to the target file size during compaction. That strategy allowed us to randomly pick samples from as wide a range as possible that'd be guaranteed to land in a single output file.
      
      However, some users try to make huge files in memory-constrained environments, where this strategy can cause OOM. This PR introduces an option, `CompressionOptions::max_dict_buffer_bytes`, that limits how much data blocks are buffered before we switch to unbuffered mode (which means creating the per-SST dictionary, writing out the buffered data, and compressing/writing new blocks as soon as they are built). It is not strict as we currently buffer more than just data blocks -- also keys are buffered. But it does make a step towards giving users predictable memory usage.
      
      Related changes include:
      
      - Changed sampling for dictionary compression to select unique data blocks when there is limited availability of data blocks
      - Made use of `BlockBuilder::SwapAndReset()` to save an allocation+memcpy when buffering data blocks for building a dictionary
      - Changed `ParseBoolean()` to accept an input containing characters after the boolean. This is necessary since, with this PR, a value for `CompressionOptions::enabled` is no longer necessarily the final component in the `CompressionOptions` string.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7970
      
      Test Plan:
      - updated `CompressionOptions` unit tests to verify limit is respected (to the extent expected in the current implementation) in various scenarios of flush/compaction to bottommost/non-bottommost level
      - looked at jemalloc heap profiles right before and after switching to unbuffered mode during flush/compaction. Verified memory usage in buffering is proportional to the limit set.
      
      Reviewed By: pdillinger
      
      Differential Revision: D26467994
      
      Pulled By: ajkr
      
      fbshipit-source-id: 3da4ef9fba59974e4ef40e40c01611002c861465
      d904233d
  10. 05 2月, 2021 1 次提交
  11. 07 1月, 2021 1 次提交
    • A
      Add more tests to ASSERT_STATUS_CHECKED (3), API change (#7715) · 6e0f62f2
      Adam Retter 提交于
      Summary:
      Third batch of adding more tests to ASSERT_STATUS_CHECKED.
      
      * db_compaction_filter_test
      * db_compaction_test
      * db_dynamic_level_test
      * db_inplace_update_test
      * db_sst_test
      * db_tailing_iter_test
      * db_io_failure_test
      
      Also update GetApproximateSizes APIs to all return Status.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7715
      
      Reviewed By: jay-zhuang
      
      Differential Revision: D25806896
      
      Pulled By: pdillinger
      
      fbshipit-source-id: 6cb9d62ba5a756c645812754c596ad3995d7c262
      6e0f62f2
  12. 29 10月, 2020 1 次提交
    • Y
      Remove unused includes (#7604) · 394210f2
      Yanqin Jin 提交于
      Summary:
      This is a PR generated **semi-automatically** by an internal tool to remove unused includes and `using` statements.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7604
      
      Test Plan: make check
      
      Reviewed By: ajkr
      
      Differential Revision: D24579392
      
      Pulled By: riversand963
      
      fbshipit-source-id: c4bfa6c6b08da1de186690d37eb73d8fff45aecd
      394210f2
  13. 17 10月, 2020 1 次提交
  14. 15 10月, 2020 1 次提交
  15. 18 9月, 2020 1 次提交
  16. 10 9月, 2020 1 次提交
  17. 04 9月, 2020 1 次提交
  18. 21 8月, 2020 1 次提交
  19. 30 7月, 2020 1 次提交
  20. 29 7月, 2020 1 次提交
  21. 11 7月, 2020 1 次提交
  22. 09 7月, 2020 1 次提交
  23. 30 6月, 2020 1 次提交
  24. 26 6月, 2020 1 次提交
  25. 04 6月, 2020 2 次提交
  26. 03 6月, 2020 1 次提交
  27. 13 5月, 2020 1 次提交
  28. 08 4月, 2020 1 次提交
  29. 22 2月, 2020 1 次提交
  30. 21 2月, 2020 1 次提交
    • S
      Replace namespace name "rocksdb" with ROCKSDB_NAMESPACE (#6433) · fdf882de
      sdong 提交于
      Summary:
      When dynamically linking two binaries together, different builds of RocksDB from two sources might cause errors. To provide a tool for user to solve the problem, the RocksDB namespace is changed to a flag which can be overridden in build time.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6433
      
      Test Plan: Build release, all and jtest. Try to build with ROCKSDB_NAMESPACE with another flag.
      
      Differential Revision: D19977691
      
      fbshipit-source-id: aa7f2d0972e1c31d75339ac48478f34f6cfcfb3e
      fdf882de
  31. 04 2月, 2020 1 次提交
    • M
      Add an option to prevent DB::Open() from querying sizes of all sst files (#6353) · 637e64b9
      Mike Kolupaev 提交于
      Summary:
      When paranoid_checks is on, DBImpl::CheckConsistency() iterates over all sst files and calls Env::GetFileSize() for each of them. As far as I could understand, this is pretty arbitrary and doesn't affect correctness - if filesystem doesn't corrupt fsynced files, the file sizes will always match; if it does, it may as well corrupt contents as well as sizes, and rocksdb doesn't check contents on open.
      
      If there are thousands of sst files, getting all their sizes takes a while. If, on top of that, Env is overridden to use some remote storage instead of local filesystem, it can be *really* slow and overload the remote storage service. This PR adds an option to not do GetFileSize(); instead it does GetChildren() for parent directory to check that all the expected sst files are at least present, but doesn't check their sizes.
      
      We can't just disable paranoid_checks instead because paranoid_checks do a few other important things: make the DB read-only on write errors, print error messages on read errors, etc.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6353
      
      Test Plan: ran the added sanity check unit test. Will try it out in a LogDevice test cluster where the GetFileSize() calls are causing a lot of trouble.
      
      Differential Revision: D19656425
      
      Pulled By: al13n321
      
      fbshipit-source-id: c2c421b367633033760d1f56747bad206d1fbf82
      637e64b9
  32. 31 1月, 2020 1 次提交
  33. 18 1月, 2020 1 次提交
  34. 11 1月, 2020 1 次提交
  35. 08 1月, 2020 1 次提交
  36. 07 1月, 2020 1 次提交
  37. 10 12月, 2019 1 次提交