1. 10 9月, 2021 1 次提交
  2. 09 9月, 2021 6 次提交
    • A
      Support custom Env in db_sst_test and external_sst_file_basic_test (#8888) · eea56686
      anand76 提交于
      Summary:
      Support custom Env in these tests. Some custom Envs do not support reopening a file for write, either normal mode or Random RW mode. Added some additional checks in external_sst_file_basic_test to accommodate those Envs.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8888
      
      Reviewed By: riversand963
      
      Differential Revision: D30824481
      
      Pulled By: anand1976
      
      fbshipit-source-id: c3ac7a628e6df29e94f42e370e679934a4f77eac
      eea56686
    • H
      Charge read to rate limiter in BackupEngine (#8722) · 45175ca2
      hx235 提交于
      Summary:
      Context:
      While all the non-trivial write operations in BackupEngine go through the RateLimiter, reads currently do not. In general, this is not a huge issue because (especially since some I/O efficiency fixes) reads in BackupEngine are mostly limited by corresponding writes, for both backup and restore. But in principle we should charge the RateLimiter for reads as well.
      - Charged read operations in `BackupEngineImpl::CopyOrCreateFile`, `BackupEngineImpl::ReadFileAndComputeChecksum`, `BackupEngineImpl::BackupMeta::LoadFromFile` and `BackupEngineImpl::GetFileDbIdentities`
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8722
      
      Test Plan:
      - Passed existing tests
      - Passed added unit tests
      
      Reviewed By: pdillinger
      
      Differential Revision: D30610464
      
      Pulled By: hx235
      
      fbshipit-source-id: 9b08c9387159a5385c8d390d6666377a0d0117e5
      45175ca2
    • A
      prevent stranded LATEST_BACKUP in BackupEngineTest.NoDeleteWithReadOnly (#8887) · dd092c2d
      Andrew Kryczka 提交于
      Summary:
      A "LATEST_BACKUP" file was left in the backup directory by
      "BackupEngineTest.NoDeleteWithReadOnly" test, affecting future test
      runs. In particular, it caused "BackupEngineTest.IOStats" to fail since
      it relies on backup directory containing only data written by its
      `BackupEngine`.
      
      The fix is to promote "LATEST_BACKUP" to an explicitly managed file so
      it is deleted in `BackupEngineTest` constructor if it exists.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8887
      
      Test Plan:
      below command used to fail. Now it passes:
      
      ```
      $ TEST_TMPDIR=/dev/shm ./backupable_db_test --gtest_filter='BackupEngineTest.NoDeleteWithReadOnly:BackupEngineTest.IOStats'
      ```
      
      Reviewed By: pdillinger
      
      Differential Revision: D30812336
      
      Pulled By: ajkr
      
      fbshipit-source-id: 32dfbe1368ebdab872e610764bfea5daf9a2af09
      dd092c2d
    • H
      Account for dictionary-building buffer in global memory limit (#8428) · 91b95cad
      Hui Xiao 提交于
      Summary:
      Context:
      Some data blocks are temporarily buffered in memory in BlockBasedTableBuilder for building compression dictionary used in data block compression. Currently this memory usage is not counted toward our global memory usage utilizing block cache capacity. To improve that, this PR charges that memory usage into the block cache to achieve better memory tracking and limiting.
      
      - Reserve memory in block cache for buffered data blocks that are used to build a compression dictionary
      - Release all the memory associated with buffering the data blocks mentioned above in EnterUnbuffered(), which is called when (a) buffer limit is exceeded after buffering OR (b) the block cache becomes full after reservation OR (c) BlockBasedTableBuilder calls Finish()
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8428
      
      Test Plan:
      - Passing existing unit tests
      - Passing new unit tests
      
      Reviewed By: ajkr
      
      Differential Revision: D30755305
      
      Pulled By: hx235
      
      fbshipit-source-id: 6e66665020b775154a94c4c5e0f2adaeaff13981
      91b95cad
    • Z
      Add DB properties for BlobDB (#8734) · 0cb0fc6f
      Zhiyi Zhang 提交于
      Summary:
      RocksDB exposes certain internal statistics via the DB property interface.
      However, there are currently no properties related to BlobDB.
      
      For starters, we would like to add the following BlobDB properties:
      `rocksdb.num-blob-files`: number of blob files in the current Version (kind of like `num-files-at-level` but note this is not per level, since blob files are not part of the LSM tree).
      `rocksdb.blob-stats`: this could return the total number and size of all blob files, and potentially also the total amount of garbage (in bytes) in the blob files in the current Version.
      `rocksdb.total-blob-file-size`: the total size of all blob files (as a blob counterpart for `total-sst-file-size`) of all Versions.
      `rocksdb.live-blob-file-size`: the total size of all blob files in the current Version.
      `rocksdb.estimate-live-data-size`: this is actually an existing property that we can extend so it considers blob files as well. When it comes to blobs, we actually have an exact value for live bytes. Namely, live bytes can be computed simply as total bytes minus garbage bytes, summed over the entire set of blob files in the Version.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8734
      
      Test Plan:
      ```
      ➜  rocksdb git:(new_feature_blobDB_properties) ./db_blob_basic_test
      [==========] Running 16 tests from 2 test cases.
      [----------] Global test environment set-up.
      [----------] 10 tests from DBBlobBasicTest
      [ RUN      ] DBBlobBasicTest.GetBlob
      [       OK ] DBBlobBasicTest.GetBlob (12 ms)
      [ RUN      ] DBBlobBasicTest.MultiGetBlobs
      [       OK ] DBBlobBasicTest.MultiGetBlobs (11 ms)
      [ RUN      ] DBBlobBasicTest.GetBlob_CorruptIndex
      [       OK ] DBBlobBasicTest.GetBlob_CorruptIndex (10 ms)
      [ RUN      ] DBBlobBasicTest.GetBlob_InlinedTTLIndex
      [       OK ] DBBlobBasicTest.GetBlob_InlinedTTLIndex (12 ms)
      [ RUN      ] DBBlobBasicTest.GetBlob_IndexWithInvalidFileNumber
      [       OK ] DBBlobBasicTest.GetBlob_IndexWithInvalidFileNumber (9 ms)
      [ RUN      ] DBBlobBasicTest.GenerateIOTracing
      [       OK ] DBBlobBasicTest.GenerateIOTracing (11 ms)
      [ RUN      ] DBBlobBasicTest.BestEffortsRecovery_MissingNewestBlobFile
      [       OK ] DBBlobBasicTest.BestEffortsRecovery_MissingNewestBlobFile (13 ms)
      [ RUN      ] DBBlobBasicTest.GetMergeBlobWithPut
      [       OK ] DBBlobBasicTest.GetMergeBlobWithPut (11 ms)
      [ RUN      ] DBBlobBasicTest.MultiGetMergeBlobWithPut
      [       OK ] DBBlobBasicTest.MultiGetMergeBlobWithPut (14 ms)
      [ RUN      ] DBBlobBasicTest.BlobDBProperties
      [       OK ] DBBlobBasicTest.BlobDBProperties (21 ms)
      [----------] 10 tests from DBBlobBasicTest (124 ms total)
      
      [----------] 6 tests from DBBlobBasicTest/DBBlobBasicIOErrorTest
      [ RUN      ] DBBlobBasicTest/DBBlobBasicIOErrorTest.GetBlob_IOError/0
      [       OK ] DBBlobBasicTest/DBBlobBasicIOErrorTest.GetBlob_IOError/0 (12 ms)
      [ RUN      ] DBBlobBasicTest/DBBlobBasicIOErrorTest.GetBlob_IOError/1
      [       OK ] DBBlobBasicTest/DBBlobBasicIOErrorTest.GetBlob_IOError/1 (10 ms)
      [ RUN      ] DBBlobBasicTest/DBBlobBasicIOErrorTest.MultiGetBlobs_IOError/0
      [       OK ] DBBlobBasicTest/DBBlobBasicIOErrorTest.MultiGetBlobs_IOError/0 (10 ms)
      [ RUN      ] DBBlobBasicTest/DBBlobBasicIOErrorTest.MultiGetBlobs_IOError/1
      [       OK ] DBBlobBasicTest/DBBlobBasicIOErrorTest.MultiGetBlobs_IOError/1 (10 ms)
      [ RUN      ] DBBlobBasicTest/DBBlobBasicIOErrorTest.CompactionFilterReadBlob_IOError/0
      [       OK ] DBBlobBasicTest/DBBlobBasicIOErrorTest.CompactionFilterReadBlob_IOError/0 (1011 ms)
      [ RUN      ] DBBlobBasicTest/DBBlobBasicIOErrorTest.CompactionFilterReadBlob_IOError/1
      [       OK ] DBBlobBasicTest/DBBlobBasicIOErrorTest.CompactionFilterReadBlob_IOError/1 (1013 ms)
      [----------] 6 tests from DBBlobBasicTest/DBBlobBasicIOErrorTest (2066 ms total)
      
      [----------] Global test environment tear-down
      [==========] 16 tests from 2 test cases ran. (2190 ms total)
      [  PASSED  ] 16 tests.
      ```
      
      Reviewed By: ltamasi
      
      Differential Revision: D30690849
      
      Pulled By: Zhiyi-Zhang
      
      fbshipit-source-id: a7567319487ad76bd1a2e24bf143afdbbd9e4346
      0cb0fc6f
    • C
      Add Milvus in USERS (#8822) · 7aa84477
      Cheng Chang 提交于
      Summary:
      Milvus is a new database using RocksDB.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8822
      
      Test Plan: N/A
      
      Reviewed By: mrambacher
      
      Differential Revision: D30802413
      
      Pulled By: cheng-chang
      
      fbshipit-source-id: 7c506f30688d4bb6b4cb8cddfc90e9414a397a53
      7aa84477
  3. 08 9月, 2021 9 次提交
    • M
      Make MemTableRepFactory into a Customizable class (#8419) · beed8647
      mrambacher 提交于
      Summary:
      This PR does the following:
      -> Makes the MemTableRepFactory into a Customizable class and creatable/configurable via CreateFromString
      -> Makes the existing implementations compatible with configurations
      -> Moves the "SpecialRepFactory" test class into testutil, accessible via the ObjectRegistry or a NewSpecial API
      
      New tests were added to validate the functionality and all existing tests pass.  db_bench and memtablerep_bench were hand-tested to verify the functionality in those tools.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8419
      
      Reviewed By: zhichao-cao
      
      Differential Revision: D29558961
      
      Pulled By: mrambacher
      
      fbshipit-source-id: 81b7229636e4e649a0c914e73ac7b0f8454c931c
      beed8647
    • P
      Fix POSIX LockFile after failure to create file (#8747) · e40b04e9
      Peter Dillinger 提交于
      Summary:
      Failure to create the lock file (e.g. out of space) could
      prevent future LockFile attempts in the same process on the same file
      from succeeding.
      
      Also added DEBUG code to fail assertion if PosixFileLock is destroyed
      without using UnlockFile (which is a risk because FileLock is in the
      public API with virtual destructor).
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8747
      
      Test Plan: test added
      
      Reviewed By: ajkr
      
      Differential Revision: D30732543
      
      Pulled By: pdillinger
      
      fbshipit-source-id: 4c30a959566d91f778d6fad3fbbd5f3941b097c1
      e40b04e9
    • P
      Add (& fix) some simple source code checks (#8821) · cb5b851f
      Peter Dillinger 提交于
      Summary:
      * Don't hardcode namespace rocksdb (use ROCKSDB_NAMESPACE)
      * Don't #include <rocksdb/...> (use double quotes)
      * Support putting NOCOMMIT (any case) in source code that should not be
      committed/pushed in current state.
      
      These will be run with `make check` and in GitHub actions
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8821
      
      Test Plan: existing tests, manually try out new checks
      
      Reviewed By: zhichao-cao
      
      Differential Revision: D30791726
      
      Pulled By: pdillinger
      
      fbshipit-source-id: 399c883f312be24d9e55c58951d4013e18429d92
      cb5b851f
    • A
      Bytes read/written stats for `CreateNewBackup*()` (#8819) · 9308ff36
      Andrew Kryczka 提交于
      Summary:
      Gets `Statistics` from the options associated with the `DB` undergoing backup, and populates new ticker stats with the thread-local `IOContext` read/write counters for the threads doing backup work.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8819
      
      Reviewed By: pdillinger
      
      Differential Revision: D30779238
      
      Pulled By: ajkr
      
      fbshipit-source-id: 75ccafc355f90906df5cf80367f7245b985772d8
      9308ff36
    • J
      Remove asan_symbolize.py for internal asan build (#8737) · 6cca9fab
      Jay Zhuang 提交于
      Summary:
      asan_symbolize.py is not compatible with python3. Also make it
      consistent with public CI, which doesn't use asan_symbolize.py
      And update coverage_test.sh to use python3.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8737
      
      Test Plan: CI
      
      Reviewed By: pdillinger
      
      Differential Revision: D30702430
      
      Pulled By: jay-zhuang
      
      fbshipit-source-id: ef09947b1232294d31b09a855c2f0ce149097dd9
      6cca9fab
    • A
      Bytes read stat for `VerifyChecksum()` and `VerifyFileChecksums()` APIs (#8741) · 94154372
      Andrew Kryczka 提交于
      Summary:
      - Clarified some comments on compatibility for adding new ticker stats
      - Added read I/O stats for `VerifyChecksum()` and `VerifyFileChecksums()` APIs
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8741
      
      Test Plan: new unit test
      
      Reviewed By: zhichao-cao
      
      Differential Revision: D30708578
      
      Pulled By: ajkr
      
      fbshipit-source-id: d06b961f7e199ae92c266b683e39870aa8f63449
      94154372
    • P
      Improve support for using regexes (#8740) · 0ef88538
      Peter Dillinger 提交于
      Summary:
      * Consolidate use of std::regex for testing to testharness.cc, to
      minimize Facebook linters constantly flagging uses in non-production
      code.
      * Improve syntax and error messages for asserting some string matches a
      regex in tests.
      * Add a public Regex wrapper class to encapsulate existing usage in
      ObjectRegistry.
      * Remove unnecessary include <regex>
      * Put warnings that use of Regex in production code could cause bad
      performance or stack overflow.
      
      Intended follow-up work:
      * Replace std::regex with another underlying implementation like RE2
      * Improve ObjectRegistry interface in terms of possibly confusing literal
      string matching vs. regex and in terms of reporting invalid regex.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8740
      
      Test Plan:
      tests updated, basic unit test for public Regex, and some manual
      testing of temporary changes to see example error messages:
      
      utilities/backupable/backupable_db_test.cc:917: Failure
      000010_1162373755_138626.blob (child.name)
      does not match regex
      [0-9]+_[0-9]+_[0-9]+[.]blobHAHAHA (pattern)
      
      db/db_basic_test.cc:74: Failure
      R3SHSBA8C4U0CIMV2ZB0 (sid3)
      does not match regex [0-9A-Z]{20}HAHAHA
      
      Reviewed By: mrambacher
      
      Differential Revision: D30706246
      
      Pulled By: pdillinger
      
      fbshipit-source-id: ba845e8f563ccad39bdb58f44f04e9da8f78c3fd
      0ef88538
    • P
      Replace most typedef with using= (#8751) · 4750421e
      Peter Dillinger 提交于
      Summary:
      Old typedef syntax is confusing
      
      Most but not all changes with
      
          perl -pi -e 's/typedef (.*) ([a-zA-Z0-9_]+);/using $2 = $1;/g' list_of_files
          make format
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8751
      
      Test Plan: existing
      
      Reviewed By: zhichao-cao
      
      Differential Revision: D30745277
      
      Pulled By: pdillinger
      
      fbshipit-source-id: 6f65f0631c3563382d43347896020413cc2366d9
      4750421e
    • L
      Support custom env in db_blob_{basic,compaction,corruption,index}_test (#8817) · 55ef8972
      Levi Tamasi 提交于
      Summary: Pull Request resolved: https://github.com/facebook/rocksdb/pull/8817
      
      Test Plan: Ran `make check` and built/tested using internal custom environment.
      
      Reviewed By: riversand963
      
      Differential Revision: D30768215
      
      Pulled By: ltamasi
      
      fbshipit-source-id: cce96211d4c097612d20247f2e997358f40cc3d3
      55ef8972
  4. 05 9月, 2021 1 次提交
  5. 04 9月, 2021 2 次提交
  6. 03 9月, 2021 1 次提交
  7. 02 9月, 2021 13 次提交
  8. 01 9月, 2021 2 次提交
    • H
      Implement superior user & mid IO priority level in GenericRateLimiter (#8595) · 240c4126
      Hui Xiao 提交于
      Summary:
      Context:
      An extra IO_USER priority in rate limiter allows users to optionally charge WAL writes / SST reads to rate limiter at this priority level, which then has higher priority than IO_HIGH and IO_LOW. With an extra IO_USER priority, it allows users to better specify the relative urgency/importance among different requests in rate limiter. As a consequence, IO resource management can better prioritize and limit resource based on user's need.
      
      The IO_USER is implemented as superior priority in GenericRateLimiter, in the sense that its request queue will always be iterated first without being constrained to fairness. The reason is that the notion of fairness is only meaningful in helping lower priorities in background IO (i.e, IO_HIGH/MID/LOW) to gain some fair chance to run so that it does not block foreground IO (i.e, the ones that are charged at the level of IO_USER). As we can see, the ultimate goal here is to not blocking foreground IO at IO_USER level, which justifies the superiority of IO_USER.
      
      Similar benefits exist for IO_MID priority.
      - Rewrote the logic of deciding the order of iterating request queues of high/low priorities to include the extra user/mid priority w/o affecting the existing behavior (see PR's [comment](https://github.com/facebook/rocksdb/pull/8595/files#r678749331))
      - Included the request queue of user-pri/mid-pri in the code path of next-leader-candidate signaling and GenericRateLimiter's destructor
      - Included the extra user/mid-pri in bookkeeping data structures: total_bytes_through_ and total_requests_
      - Re-written the previous impl of explicitly iterating priorities with a loop from Env::IO_LOW to Env::IO_TOTAL
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8595
      
      Test Plan:
      - passed existing rate_limiter_test.cc
      - passed added unit tests in rate_limiter_test.cc
      - run performance test to verify performance with only high/low requests is not affected by this change
         - Set-up command:
         `TEST_TMPDIR=/dev/shm ./db_bench --benchmarks=fillrandom --duration=5 --compression_type=none --num=100000000 --disable_auto_compactions=true --write_buffer_size=1048576 --writable_file_max_buffer_size=65536 --target_file_size_base=1048576 --max_bytes_for_level_base=4194304 --level0_slowdown_writes_trigger=$(((1 << 31) - 1)) --level0_stop_writes_trigger=$(((1 << 31) - 1))`
      
          - Test command:
         `TEST_TMPDIR=/dev/shm ./db_bench --benchmarks=overwrite --use_existing_db=true --disable_wal=true --duration=30 --compression_type=none --num=100000000 --write_buffer_size=1048576 --writable_file_max_buffer_size=65536 --target_file_size_base=1048576 --max_bytes_for_level_base=4194304 --level0_slowdown_writes_trigger=$(((1 << 31) - 1)) --level0_stop_writes_trigger=$(((1 << 31) - 1)) --statistics=true --rate_limiter_bytes_per_sec=1048576 --rate_limiter_refill_period_us=1000  --threads=32 |& grep -E '(flush|compact)\.write\.bytes'`
      
         - Before (on branch upstream/master):
         `rocksdb.compact.write.bytes COUNT : 4014162`
         `rocksdb.flush.write.bytes COUNT : 26715832`
          rocksdb.flush.write.bytes/rocksdb.compact.write.bytes ~= 6.66
      
         - After (on branch rate_limiter_user_pri):
        `rocksdb.compact.write.bytes COUNT : 3807822`
        `rocksdb.flush.write.bytes COUNT : 26098659`
         rocksdb.flush.write.bytes/rocksdb.compact.write.bytes ~= 6.85
      
      Reviewed By: ajkr
      
      Differential Revision: D30577783
      
      Pulled By: hx235
      
      fbshipit-source-id: 0881f2705ffd13ecd331256bde7e8ec874a353f4
      240c4126
    • Q
      Replace `std::shared_ptr<SystemClock>` by `SystemClock*` in `TraceExecutionHandler` (#8729) · 7b555546
      Qizhong Mao 提交于
      Summary:
      All/most trace related APIs directly use `SystemClock*` (https://github.com/facebook/rocksdb/pull/8033). Do the same in `TraceExecutionHandler`.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8729
      
      Test Plan: None
      
      Reviewed By: zhichao-cao
      
      Differential Revision: D30672159
      
      Pulled By: autopear
      
      fbshipit-source-id: 017db4912c6ac1cfede842b8b122cf569a394f25
      7b555546
  9. 31 8月, 2021 2 次提交
    • A
      Fix a race in LRUCacheShard::Promote (#8717) · ec9f52ec
      anand76 提交于
      Summary:
      In ```LRUCacheShard::Promote```, a reference is released outside the LRU mutex. Fix the race condition.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8717
      
      Reviewed By: zhichao-cao
      
      Differential Revision: D30649206
      
      Pulled By: anand1976
      
      fbshipit-source-id: 09c0af05b2294a7fe2c02876a61b0bad6e3ada61
      ec9f52ec
    • P
      Built-in support for generating unique IDs, bug fix (#8708) · 13ded694
      Peter Dillinger 提交于
      Summary:
      Env::GenerateUniqueId() works fine on Windows and on POSIX
      where /proc/sys/kernel/random/uuid exists. Our other implementation is
      flawed and easily produces collision in a new multi-threaded test.
      As we rely more heavily on DB session ID uniqueness, this becomes a
      serious issue.
      
      This change combines several individually suitable entropy sources
      for reliable generation of random unique IDs, with goal of uniqueness
      and portability, not cryptographic strength nor maximum speed.
      
      Specifically:
      * Moves code for getting UUIDs from the OS to port::GenerateRfcUuid
      rather than in Env implementation details. Callers are now told whether
      the operation fails or succeeds.
      * Adds an internal API GenerateRawUniqueId for generating high-quality
      128-bit unique identifiers, by combining entropy from three "tracks":
        * Lots of info from default Env like time, process id, and hostname.
        * std::random_device
        * port::GenerateRfcUuid (when working)
      * Built-in implementations of Env::GenerateUniqueId() will now always
      produce an RFC 4122 UUID string, either from platform-specific API or
      by converting the output of GenerateRawUniqueId.
      
      DB session IDs now use GenerateRawUniqueId while DB IDs (not as
      critical) try to use port::GenerateRfcUuid but fall back on
      GenerateRawUniqueId with conversion to an RFC 4122 UUID.
      
      GenerateRawUniqueId is declared and defined under env/ rather than util/
      or even port/ because of the Env dependency.
      
      Likely follow-up: enhance GenerateRawUniqueId to be faster after the
      first call and to guarantee uniqueness within the lifetime of a single
      process (imparting the same property onto DB session IDs).
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8708
      
      Test Plan:
      A new mini-stress test in env_test checks the various public
      and internal APIs for uniqueness, including each track of
      GenerateRawUniqueId individually. We can't hope to verify anywhere close
      to 128 bits of entropy, but it can at least detect flaws as bad as the
      old code. Serial execution of the new tests takes about 350 ms on
      my machine.
      
      Reviewed By: zhichao-cao, mrambacher
      
      Differential Revision: D30563780
      
      Pulled By: pdillinger
      
      fbshipit-source-id: de4c9ff4b2f581cf784fcedb5f39f16e5185c364
      13ded694
  10. 28 8月, 2021 3 次提交