1. 11 6月, 2022 1 次提交
    • Y
      Snapshots with user-specified timestamps (#9879) · 1777e5f7
      Yanqin Jin 提交于
      Summary:
      In RocksDB, keys are associated with (internal) sequence numbers which denote when the keys are written
      to the database. Sequence numbers in different RocksDB instances are unrelated, thus not comparable.
      
      It is nice if we can associate sequence numbers with their corresponding actual timestamps. One thing we can
      do is to support user-defined timestamp, which allows the applications to specify the format of custom timestamps
      and encode a timestamp with each key. More details can be found at https://github.com/facebook/rocksdb/wiki/User-defined-Timestamp-%28Experimental%29.
      
      This PR provides a different but complementary approach. We can associate rocksdb snapshots (defined in
      https://github.com/facebook/rocksdb/blob/7.2.fb/include/rocksdb/snapshot.h#L20) with **user-specified** timestamps.
      Since a snapshot is essentially an object representing a sequence number, this PR establishes a bi-directional mapping between sequence numbers and timestamps.
      
      In the past, snapshots are usually taken by readers. The current super-version is grabbed, and a `rocksdb::Snapshot`
      object is created with the last published sequence number of the super-version. You can see that the reader actually
      has no good idea of what timestamp to assign to this snapshot, because by the time the `GetSnapshot()` is called,
      an arbitrarily long period of time may have already elapsed since the last write, which is when the last published
      sequence number is written.
      
      This observation motivates the creation of "timestamped" snapshots on the write path. Currently, this functionality is
      exposed only to the layer of `TransactionDB`. Application can tell RocksDB to create a snapshot when a transaction
      commits, effectively associating the last sequence number with a timestamp. It is also assumed that application will
      ensure any two snapshots with timestamps should satisfy the following:
      ```
      snapshot1.seq < snapshot2.seq iff. snapshot1.ts < snapshot2.ts
      ```
      
      If the application can guarantee that when a reader takes a timestamped snapshot, there is no active writes going on
      in the database, then we also allow the user to use a new API `TransactionDB::CreateTimestampedSnapshot()` to create
      a snapshot with associated timestamp.
      
      Code example
      ```cpp
      // Create a timestamped snapshot when committing transaction.
      txn->SetCommitTimestamp(100);
      txn->SetSnapshotOnNextOperation();
      txn->Commit();
      
      // A wrapper API for convenience
      Status Transaction::CommitAndTryCreateSnapshot(
          std::shared_ptr<TransactionNotifier> notifier,
          TxnTimestamp ts,
          std::shared_ptr<const Snapshot>* ret);
      
      // Create a timestamped snapshot if caller guarantees no concurrent writes
      std::pair<Status, std::shared_ptr<const Snapshot>> snapshot = txn_db->CreateTimestampedSnapshot(100);
      ```
      
      The snapshots created in this way will be managed by RocksDB with ref-counting and potentially shared with
      other readers. We provide the following APIs for readers to retrieve a snapshot given a timestamp.
      ```cpp
      // Return the timestamped snapshot correponding to given timestamp. If ts is
      // kMaxTxnTimestamp, then we return the latest timestamped snapshot if present.
      // Othersise, we return the snapshot whose timestamp is equal to `ts`. If no
      // such snapshot exists, then we return null.
      std::shared_ptr<const Snapshot> TransactionDB::GetTimestampedSnapshot(TxnTimestamp ts) const;
      // Return the latest timestamped snapshot if present.
      std::shared_ptr<const Snapshot> TransactionDB::GetLatestTimestampedSnapshot() const;
      ```
      
      We also provide two additional APIs for stats collection and reporting purposes.
      
      ```cpp
      Status TransactionDB::GetAllTimestampedSnapshots(
          std::vector<std::shared_ptr<const Snapshot>>& snapshots) const;
      // Return timestamped snapshots whose timestamps fall in [ts_lb, ts_ub) and store them in `snapshots`.
      Status TransactionDB::GetTimestampedSnapshots(
          TxnTimestamp ts_lb,
          TxnTimestamp ts_ub,
          std::vector<std::shared_ptr<const Snapshot>>& snapshots) const;
      ```
      
      To prevent the number of timestamped snapshots from growing infinitely, we provide the following API to release
      timestamped snapshots whose timestamps are older than or equal to a given threshold.
      ```cpp
      void TransactionDB::ReleaseTimestampedSnapshotsOlderThan(TxnTimestamp ts);
      ```
      
      Before shutdown, RocksDB will release all timestamped snapshots.
      
      Comparison with user-defined timestamp and how they can be combined:
      User-defined timestamp persists every key with a timestamp, while timestamped snapshots maintain a volatile
      mapping between snapshots (sequence numbers) and timestamps.
      Different internal keys with the same user key but different timestamps will be treated as different by compaction,
      thus a newer version will not hide older versions (with smaller timestamps) unless they are eligible for garbage collection.
      In contrast, taking a timestamped snapshot at a certain sequence number and timestamp prevents all the keys visible in
      this snapshot from been dropped by compaction. Here, visible means (seq < snapshot and most recent).
      The timestamped snapshot supports the semantics of reading at an exact point in time.
      
      Timestamped snapshots can also be used with user-defined timestamp.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/9879
      
      Test Plan:
      ```
      make check
      TEST_TMPDIR=/dev/shm make crash_test_with_txn
      ```
      
      Reviewed By: siying
      
      Differential Revision: D35783919
      
      Pulled By: riversand963
      
      fbshipit-source-id: 586ad905e169189e19d3bfc0cb0177a7239d1bd4
      1777e5f7
  2. 08 6月, 2022 1 次提交
    • Y
      Update test for secondary instance in stress test (#10121) · f890527b
      Yanqin Jin 提交于
      Summary:
      This PR updates secondary instance testing in stress test by default.
      
      A background thread will be started (disabled by default), running a secondary instance tailing the logs of the primary.
      
      Periodically (every 1 sec), this thread calls `TryCatchUpWithPrimary()` and uses point lookup or range scan
      to read some random keys with only very basic verification to make sure no assertion failure is triggered.
      
      Thanks to https://github.com/facebook/rocksdb/issues/10061 , we can enable secondary instance when user-defined timestamp is enabled.
      
      Also removed a less useful test configuration, `secondary_catch_up_one_in`. This is very similar to the periodic
      catch-up.
      
      In the last commit, I decided not to enable it now, but just update the tests, since secondary instance does not
      work well when the underlying file is renamed by primary, e.g. SstFileManager.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/10121
      
      Test Plan:
      ```
      TEST_TMPDIR=/dev/shm/rocksdb make crash_test
      TEST_TMPDIR=/dev/shm/rocksdb make crash_test_with_ts
      TEST_TMPDIR=/dev/shm/rocksdb make crash_test_with_atomic_flush
      ```
      
      Reviewed By: ajkr
      
      Differential Revision: D36939458
      
      Pulled By: riversand963
      
      fbshipit-source-id: 1c065b7efc3690fc341569b9d369a5cbd8ef6b3e
      f890527b
  3. 19 5月, 2022 1 次提交
    • Y
      Avoid overwriting options loaded from OPTIONS (#9943) · e3a3dbf2
      Yanqin Jin 提交于
      Summary:
      This is similar to https://github.com/facebook/rocksdb/issues/9862, including the following fixes/refactoring:
      
      1. If OPTIONS file is specified via `-options_file`, majority of options will be loaded from the file. We should not
      overwrite options that have been loaded from the file. Instead, we configure only fields of options which are
      shared objects and not set by the OPTIONS file. We also configure a few fields, e.g. `create_if_missing` necessary
      for stress test to run.
      
      2. Refactor options initialization into three functions, `InitializeOptionsFromFile()`, `InitializeOptionsFromFlags()`
      and `InitializeOptionsGeneral()` similar to db_bench. I hope they can be shared in the future. The high-level logic is
      as follows:
      ```cpp
      if (!InitializeOptionsFromFile(...)) {
        InitializeOptionsFromFlags(...);
      }
      InitializeOptionsGeneral(...);
      ```
      
      3. Currently, the setting for `block_cache_compressed` does not seem correct because it by default specifies a
      size of `numeric_limits<size_t>::max()` ((size_t)-1). According to code comments, `-1` indicates default value,
      which should be referring to `num_shard_bits` argument.
      
      4. Clarify `fail_if_options_file_error`.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/9943
      
      Test Plan:
      1. make check
      2. Run stress tests, and manually check generated OPTIONS file and compare them with input OPTIONS files
      
      Reviewed By: jay-zhuang
      
      Differential Revision: D36133769
      
      Pulled By: riversand963
      
      fbshipit-source-id: 35dacdc090a0a72c922907170cd132b9ecaa073e
      e3a3dbf2
  4. 03 5月, 2022 1 次提交
    • Y
      Fix a bug of CompactionIterator/CompactionFilter using `Delete` (#9929) · 06394ff4
      Yanqin Jin 提交于
      Summary:
      When compaction filter determines that a key should be removed, it updates the internal key's type
      to `Delete`. If this internal key is preserved in current compaction but seen by a later compaction
      together with `SingleDelete`, it will cause compaction iterator to return Corruption.
      
      To fix the issue, compaction filter should return more information in addition to the intention of removing
      a key. Therefore, we add a new `kRemoveWithSingleDelete` to `CompactionFilter::Decision`. Seeing
      `kRemoveWithSingleDelete`, compaction iterator will update the op type of the internal key to `kTypeSingleDelete`.
      
      In addition, I updated db_stress_shared_state.[cc|h] so that `no_overwrite_ids_` becomes `const`. It is easier to
      reason about thread-safety if accessed from multiple threads. This information is passed to `PrepareTxnDBOptions()`
      when calling from `Open()` so that we can set up the rollback deletion type callback for transactions.
      
      Finally, disable compaction filter for multiops_txn because the key removal logic of `DbStressCompactionFilter` does
      not quite work with `MultiOpsTxnsStressTest`.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/9929
      
      Test Plan:
      make check
      make crash_test
      make crash_test_with_txn
      
      Reviewed By: anand1976
      
      Differential Revision: D36069678
      
      Pulled By: riversand963
      
      fbshipit-source-id: cedd2f1ba958af59ad3916f1ba6f424307955f92
      06394ff4
  5. 28 4月, 2022 1 次提交
    • Y
      Improve stress test for MultiOpsTxnsStressTest (#9829) · 94e245a1
      Yanqin Jin 提交于
      Summary:
      Adds more coverage to `MultiOpsTxnsStressTest` with a focus on write-prepared transactions.
      
      1. Add a hack to manually evict commit cache entries. We currently cannot assign small values to `wp_commit_cache_bits` because it requires a prepared transaction to commit within a certain range of sequence numbers, otherwise it will throw.
      2. Add coverage for commit-time-write-batch. If write policy is write-prepared, we need to set `use_only_the_last_commit_time_batch_for_recovery` to true.
      3. After each flush/compaction, verify data consistency. This is possible since data size can be small: default numbers of primary/secondary keys are just 1000.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/9829
      
      Test Plan:
      ```
      TEST_TMPDIR=/dev/shm/rocksdb_crashtest_blackbox/ make blackbox_crash_test_with_multiops_wp_txn
      ```
      
      Reviewed By: pdillinger
      
      Differential Revision: D35806678
      
      Pulled By: riversand963
      
      fbshipit-source-id: d7fde7a29fda0fb481a61f553e0ca0c47da93616
      94e245a1
  6. 01 2月, 2022 1 次提交
    • A
      db_stress begin tracking expected state after verification (#9470) · c7ce03dc
      Andrew Kryczka 提交于
      Summary:
      Previously we enabled tracking expected state changes during
      `FinishInitDb()`, as soon as the DB was opened. This meant tracing was
      enabled during `VerifyDb()`. This cost extra CPU by requiring
      `DBImpl::trace_mutex_` to be acquired on each read operation. It was
      unnecessary since we know there are no expected state changes during the
      `VerifyDb()` phase. So, this PR delays tracking expected state changes
      until after the `VerifyDb()` phase has completed.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/9470
      
      Test Plan:
      Measured this PR reduced `VerifyDb()` 76% (387 -> 92 seconds) with
      `-disable_wal=1` (i.e., expected state tracking enabled).
      
      - benchmark command: `./db_stress -max_key=100000000 -ops_per_thread=1 -destroy_db_initially=1 -expected_values_dir=/dev/shm/dbstress_expected/ -db=/dev/shm/dbstress/ --clear_column_family_one_in=0 --disable_wal=1 --reopen=0`
      - without this PR, `VerifyDb()` takes 387 seconds:
      
      ```
      2022/01/30-21:43:04  Initializing worker threads
      Crash-recovery verification passed :)
      2022/01/30-21:49:31  Starting database operations
      ```
      
      - with this PR, `VerifyDb()` takes 92 seconds
      
      ```
      2022/01/30-21:59:06  Initializing worker threads
      Crash-recovery verification passed :)
      2022/01/30-22:00:38  Starting database operations
      ```
      
      Reviewed By: riversand963
      
      Differential Revision: D33884596
      
      Pulled By: ajkr
      
      fbshipit-source-id: 5f259de8087de5b0531f088e11297f37ed2f7685
      c7ce03dc
  7. 15 12月, 2021 1 次提交
    • Y
      Stress test for RocksDB transactions (#8936) · e05c2bb5
      Yanqin Jin 提交于
      Summary:
      Current db_stress does not cover complex read-write transactions. Therefore, this PR adds
      coverage for emulated MyRocks-style transactions in `MultiOpsTxnsStressTest`. To achieve this, we need:
      
      - Add a new operation type 'customops' so that we can add new complex groups of operations, e.g. transactions involving multiple read-write operations.
      - Implement three read-write transactions and two read-only ones to emulate MyRocks-style transactions.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8936
      
      Test Plan:
      ```
      make check
      ./db_stress -test_multi_ops_txns -use_txn -clear_column_family_one_in=0 -column_families=1 -writepercent=0 -delpercent=0 -delrangepercent=0 -customopspercent=60 -readpercent=20 -prefixpercent=0 -iterpercent=20 -reopen=0 -ops_per_thread=100000
      ```
      
      Next step is to add more configurability and refine input generation and result reporting, which will done in separate follow-up PRs.
      
      Reviewed By: zhichao-cao
      
      Differential Revision: D31071795
      
      Pulled By: riversand963
      
      fbshipit-source-id: 50d7c828346ec643311336b904848a1588a37006
      e05c2bb5
  8. 08 12月, 2021 1 次提交
    • A
      db_stress support tracking historical values (#8960) · a6a6aad7
      Andrew Kryczka 提交于
      Summary:
      When `--sync_fault_injection` is set, this PR takes a snapshot of the expected values and starts an operation trace when the DB is opened. These files are stored in `--expected_values_dir`. They will be used for recovering the expected state of the DB following a crash where a suffix of unsynced operations are allowed to be lost.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8960
      
      Test Plan: injected crashed at various points in `FileExpectedStateManager` and verified the next run recovers the state/trace file with highest seqno and removes all older/temporary files. Note we don't use sync_fault_injection in CI crash tests yet.
      
      Reviewed By: pdillinger
      
      Differential Revision: D31194941
      
      Pulled By: ajkr
      
      fbshipit-source-id: b0f935a529a0186c5a9c7709fcaa8829de8a84cf
      a6a6aad7
  9. 02 7月, 2021 1 次提交
    • Z
      Inject fatal write failures to db_stress when DB is running (#8479) · a95a776d
      Zhichao Cao 提交于
      Summary:
      add the injest_error_severity to control if it is a retryable IO Error or a fatal or unrecoverable error. Use a flag to indicate, if fatal error comes, the flag is set and db is stopped (but not corrupted).
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8479
      
      Test Plan: run  ./db_stress --reopen=0 --read_fault_one_in=1000 --write_fault_one_in=5 --disable_wal=true --write_buffer_size=3000000 -writepercent=5 -readpercent=50 --injest_error_severity=2 --column_families=1, make check
      
      Reviewed By: anand1976
      
      Differential Revision: D29524271
      
      Pulled By: zhichao-cao
      
      fbshipit-source-id: 1aa9fb9b5655b0adba6f5ad12005ca8c074c795b
      a95a776d
  10. 28 6月, 2021 1 次提交
    • A
      Allow db_stress to use a secondary cache (#8455) · 6f9ed59b
      anand76 提交于
      Summary:
      Add a ```-secondary_cache_uri``` to db_stress to allow the user to specify a custom ```SecondaryCache``` object from the object registry. Also allow db_crashtest.py to be run with an alternate db_stress location. Together, these changes will allow us to run db_stress using FB internal components.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8455
      
      Reviewed By: zhichao-cao
      
      Differential Revision: D29371972
      
      Pulled By: anand1976
      
      fbshipit-source-id: dd1b1fd80ebbedc11aa63d9246ea6ae49edb77c4
      6f9ed59b
  11. 23 3月, 2021 1 次提交
    • Y
      Add user-defined timestamps to db_stress (#8061) · 08144bc2
      Yanqin Jin 提交于
      Summary:
      Add some basic test for user-defined timestamp to db_stress. Currently,
      read with timestamp always tries to read using the current timestamp.
      Due to the per-key timestamp-sequence ordering constraint, we only add timestamp-
      related tests to the `NonBatchedOpsStressTest` since this test serializes accesses
      to the same key and uses a file to cross-check data correctness.
      The timestamp feature is not supported in a number of components, e.g. Merge, SingleDelete,
      DeleteRange, CompactionFilter, Readonly instance, secondary instance, SST file ingestion, transaction,
      etc. Therefore, db_stress should exit if user enables both timestamp and these features at the same
      time. The (currently) incompatible features can be found in
      `CheckAndSetOptionsForUserTimestamp`.
      
      This PR also fixes a bug triggered when timestamp is enabled together with
      `index_type=kBinarySearchWithFirstKey`. This bug fix will also be in another separate PR
      with more unit tests coverage. Fixing it here because I do not want to exclude the index type
      from crash test.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8061
      
      Test Plan: make crash_test_with_ts
      
      Reviewed By: jay-zhuang
      
      Differential Revision: D27056282
      
      Pulled By: riversand963
      
      fbshipit-source-id: c3e00ad1023fdb9ebbdf9601ec18270c5e2925a9
      08144bc2
  12. 15 3月, 2021 1 次提交
    • M
      Use SystemClock* instead of std::shared_ptr<SystemClock> in lower level routines (#8033) · 3dff28cf
      mrambacher 提交于
      Summary:
      For performance purposes, the lower level routines were changed to use a SystemClock* instead of a std::shared_ptr<SystemClock>.  The shared ptr has some performance degradation on certain hardware classes.
      
      For most of the system, there is no risk of the pointer being deleted/invalid because the shared_ptr will be stored elsewhere.  For example, the ImmutableDBOptions stores the Env which has a std::shared_ptr<SystemClock> in it.  The SystemClock* within the ImmutableDBOptions is essentially a "short cut" to gain access to this constant resource.
      
      There were a few classes (PeriodicWorkScheduler?) where the "short cut" property did not hold.  In those cases, the shared pointer was preserved.
      
      Using db_bench readrandom perf_level=3 on my EC2 box, this change performed as well or better than 6.17:
      
      6.17: readrandom   :      28.046 micros/op 854902 ops/sec;   61.3 MB/s (355999 of 355999 found)
      6.18: readrandom   :      32.615 micros/op 735306 ops/sec;   52.7 MB/s (290999 of 290999 found)
      PR: readrandom   :      27.500 micros/op 871909 ops/sec;   62.5 MB/s (367999 of 367999 found)
      
      (Note that the times for 6.18 are prior to revert of the SystemClock).
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/8033
      
      Reviewed By: pdillinger
      
      Differential Revision: D27014563
      
      Pulled By: mrambacher
      
      fbshipit-source-id: ad0459eba03182e454391b5926bf5cdd45657b67
      3dff28cf
  13. 03 2月, 2021 1 次提交
    • L
      Add the integrated BlobDB to the stress/crash tests (#7900) · 0288bdbc
      Levi Tamasi 提交于
      Summary:
      The patch adds support for the options related to the new BlobDB implementation
      to `db_stress`, including support for dynamically adjusting them using `SetOptions`
      when `set_options_one_in` and a new flag `allow_setting_blob_options_dynamically`
      are specified. (The latter is used to prevent the options from being enabled when
      incompatible features are in use.)
      
      The patch also updates the `db_stress` help messages of the existing stacked BlobDB
      related options to clarify that they pertain to the old implementation. In addition, it
      adds the new BlobDB to the crash test script. In order to prevent a combinatorial explosion
      of jobs and still perform whitebox/blackbox testing (including under ASAN/TSAN/UBSAN),
      and to also test BlobDB in conjunction with atomic flush and transactions, the script sets
      the BlobDB options in 10% of normal/`cf_consistency`/`txn` crash test runs.
      
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/7900
      
      Test Plan: Ran `make check` and `db_stress`/`db_crashtest.py` with various options.
      
      Reviewed By: jay-zhuang
      
      Differential Revision: D26094913
      
      Pulled By: ltamasi
      
      fbshipit-source-id: c2ef3391a05e43a9687f24e297df05f4a5584814
      0288bdbc
  14. 15 7月, 2020 1 次提交
  15. 19 6月, 2020 1 次提交
    • A
      add `CompactionFilter` to stress/crash tests (#6988) · 775dc623
      Andrew Kryczka 提交于
      Summary:
      Added a `CompactionFilter` that is aware of the stress test's expected state. It only drops key versions that are already covered according to the expected state. It is incompatible with snapshots (same as all `CompactionFilter`s), so disables all snapshot-related features when used in the crash test.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6988
      
      Test Plan:
      running a minified blackbox crash test
      
      ```
      $ TEST_TMPDIR=/dev/shm python tools/db_crashtest.py blackbox --max_key=1000000 -write_buffer_size=1048576 -max_bytes_for_level_base=4194304 -target_file_size_base=1048576 -value_size_mult=33 --interval=10 --duration=3600
      ```
      
      Reviewed By: anand1976
      
      Differential Revision: D22072888
      
      Pulled By: ajkr
      
      fbshipit-source-id: 727b9d7a90d5eab18be0ec6cd5a810712ac13320
      775dc623
  16. 19 3月, 2020 1 次提交
    • L
      Remove GetSortedWalFiles/GetCurrentWalFile from the crash test (#6491) · 217ce200
      Levi Tamasi 提交于
      Summary:
      Currently, `db_stress` tests a randomly picked one of `GetLiveFiles`,
      `GetSortedWalFiles`, and `GetCurrentWalFile` with a 1/N chance when the
      command line parameter `get_live_files_and_wal_files_one_in` is specified.
      The problem is that `GetSortedWalFiles` and `GetCurrentWalFile` are unreliable
      in the sense that they can return errors if another thread removes a WAL file
      while they are executing (which is a perfectly plausible and legitimate scenario).
      The patch splits this command line parameter into three (one for each API),
      and changes the crash test script so that only `GetLiveFiles` is tested during
      our continuous crash test runs.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6491
      
      Test Plan:
      ```
      make check
      python tools/db_crashtest.py whitebox
      ```
      
      Reviewed By: siying
      
      Differential Revision: D20312200
      
      Pulled By: ltamasi
      
      fbshipit-source-id: e7c3481eddfe3bd3d5349476e34abc9eee5b7dc8
      217ce200
  17. 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
  18. 21 12月, 2019 5 次提交
    • A
      Add Transaction::MultiGet to db_stress (#6227) · d4da4128
      anand76 提交于
      Summary:
      Call Transaction::MultiGet from TestMultiGet() in db_stress. We add some Puts/Merges/Deletes into the transaction in order to exercise MultiGetFromBatchAndDB. There is no data verification on read, just check status. There is currently no read data verification in db_stress as it requires synchronization with writes. It needs to be tackled separately.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6227
      
      Test Plan: make crash_test_with_txn
      
      Differential Revision: D19204611
      
      Pulled By: anand1976
      
      fbshipit-source-id: 770d0e30d002e88626c264c58103f1d709bb060c
      d4da4128
    • S
      db_stress: cover approximate size (#6213) · 79cc8dc2
      sdong 提交于
      Summary:
      db_stress to execute DB::GetApproximateSizes() with randomized keys and options. Return value is not validated but error will be reported.
      Two ways to generate the range keys: (1) two random keys; (2) a small range.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6213
      
      Test Plan: (1) run "make crash_test" for a while; (2) hack the code to ingest some errors to see it is reported.
      
      Differential Revision: D19204665
      
      fbshipit-source-id: 652db36f13bcb5a3bd8fe4a10c0aa22a77a0bce2
      79cc8dc2
    • S
      db_stress: improvements in TestIterator (#6166) · e55c2b3f
      sdong 提交于
      Summary:
      1. Cover SeekToFirst() and SeekToLast().
      2. Try to record the history of iterator operations.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6166
      
      Test Plan: Do some manual changes in the code to cover the failure cases and see the error printing is correct and SeekToFirst() and SeekToLast() sometimes show up.
      
      Differential Revision: D19047079
      
      fbshipit-source-id: 1ed616f919fe4d32c0a021fc37932a7bd3063bcd
      e55c2b3f
    • Z
      db_stress: Added the verification for GetLiveFiles, GetSortedWalFiles and GetCurrentWalFile (#6224) · f89dea4f
      Zhichao Cao 提交于
      Summary:
      Add the verification in operateDB to verify GetLiveFiles, GetSortedWalFiles and GetCurrentWalFile. The test will be called every 1 out of N, N is decided by get_live_files_and_wal_files_one_i, whose default is 1000000.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6224
      
      Test Plan: pass db_stress default run.
      
      Differential Revision: D19183358
      
      Pulled By: zhichao-cao
      
      fbshipit-source-id: 20073cf72ede77a3e0d3cf5f28304f1f605d2b1a
      f89dea4f
    • Y
      Add more verification to db_stress (#6173) · 670a916d
      Yanqin Jin 提交于
      Summary:
      Currently, db_stress performs verification by calling `VerifyDb()` at the end of test and optionally before tests start. In case of corruption or incorrect result, it will be too late. This PR adds more verification in two ways.
      1. For cf consistency test, each test thread takes a snapshot and verifies every N ops. N is configurable via `-verify_db_one_in`. This option is not supported in other stress tests.
      2. For cf consistency test, we use another background thread in which a secondary instance periodically tails the primary (interval is configurable). We verify the secondary. Once an error is detected, we terminate the test and report. This does not affect other stress tests.
      
      Test plan (devserver)
      ```
      $./db_stress -test_cf_consistency -verify_db_one_in=0 -ops_per_thread=100000 -continuous_verification_interval=100
      $./db_stress -test_cf_consistency -verify_db_one_in=1000 -ops_per_thread=10000 -continuous_verification_interval=0
      $make crash_test
      ```
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6173
      
      Differential Revision: D19047367
      
      Pulled By: riversand963
      
      fbshipit-source-id: aeed584ad71f9310c111445f34975e5ab47a0615
      670a916d
  19. 20 12月, 2019 1 次提交
  20. 11 12月, 2019 2 次提交
    • S
      db_stress: sometimes call CancelAllBackgroundWork() and Close() before closing DB (#6141) · 7a99162a
      sdong 提交于
      Summary:
      CancelAllBackgroundWork() and Close() are frequently used features but we don't cover it in stress test. Simply execute them before closing the DB with 1/2 chance.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6141
      
      Test Plan: Run "db_stress".
      
      Differential Revision: D18900861
      
      fbshipit-source-id: 49b46ccfae120d0f9de3e0543b82fb6d715949d0
      7a99162a
    • S
      db_stress: sometimes validate compact range data (#6140) · 14c38bac
      sdong 提交于
      Summary:
      Right now, in db_stress, compact range is simply executed without any immediate data validation. Add a simply validation which compares hash for all keys within the compact range to stay the same against the same snapshot before and after the compaction.
      
      Also, randomly tune most knobs of CompactRangeOptions.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6140
      
      Test Plan: Run db_stress with "--compact_range_one_in=2000 --compact_range_width=100000000" for a while. Manually ingest some hacky code and observe the error path.
      
      Differential Revision: D18900230
      
      fbshipit-source-id: d96e75bc8c38dd5ec702571ffe7cf5f4ea93ee10
      14c38bac
  21. 09 12月, 2019 1 次提交
    • S
      Break db_stress_tool.cc to a list of source files (#6134) · 7d79b326
      sdong 提交于
      Summary:
      db_stress_tool.cc now is a giant file. In order to main it easier to improve and maintain, break it down to multiple source files.
      Most classes are turned into their own files. Separate .h and .cc files are created for gflag definiations. Another .h and .cc files are created for some common functions. Some test execution logic that is only loosely related to class StressTest is moved to db_stress_driver.h and db_stress_driver.cc. All the files are located under db_stress_tool/. The directory name is created as such because if we end it with either stress or test, .gitignore will ignore any file under it and makes it prone to issues in developements.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6134
      
      Test Plan: Build under GCC7 with and without LITE on using GNU Make. Build with GCC 4.8. Build with cmake with -DWITH_TOOL=1
      
      Differential Revision: D18876064
      
      fbshipit-source-id: b25d0a7451840f31ac0f5ebb0068785f783fdf7d
      7d79b326