1. 13 6月, 2020 1 次提交
    • Y
      Add stress test for best-efforts recovery (#6819) · 15d9f28d
      Yanqin Jin 提交于
      Summary:
      Add crash test for the case of best-efforts recovery.
      After a certain amount of time, we kill the db_stress process, randomly delete some certain table files and restart db_stress. Given the randomness of file deletion, it is difficult to verify against a reference for data correctness. Therefore, we just check that the db can restart successfully.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6819
      
      Test Plan:
      ```
      ./db_stress -best_efforts_recovery=true -disable_wal=1 -reopen=0
      ./db_stress -best_efforts_recovery=true -disable_wal=0 -skip_verifydb=1 -verify_db_one_in=0 -continuous_verification_interval=0
      make crash_test_with_best_efforts_recovery
      ```
      
      Reviewed By: anand1976
      
      Differential Revision: D21436753
      
      Pulled By: riversand963
      
      fbshipit-source-id: 0b3605c922a16c37ed17d5ab6682ca4240e47926
      15d9f28d
  2. 03 6月, 2020 1 次提交
    • Z
      Fix potential overflow of unsigned type in for loop (#6902) · 2adb7e37
      Zhichao Cao 提交于
      Summary:
      x.size() -1 or y - 1 can overflow to an extremely large value when x.size() pr y is 0 when they are unsigned type. The end condition of i in the for loop will be extremely large, potentially causes segment fault. Fix them.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6902
      
      Test Plan: pass make asan_check
      
      Reviewed By: ajkr
      
      Differential Revision: D21843767
      
      Pulled By: zhichao-cao
      
      fbshipit-source-id: 5b8b88155ac5a93d86246d832e89905a783bb5a1
      2adb7e37
  3. 25 5月, 2020 1 次提交
    • A
      fix transaction rollback in db_stress TestMultiGet (#6873) · b464a85e
      Andrew Kryczka 提交于
      Summary:
      There were further uses of `txn` after `RollbackTxn(txn)` leading to
      stress test errors. Moved the rollback to the end of the function.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6873
      
      Test Plan:
      found a command from the crash test that previously failed immediately under TSAN; verified now it succeeds.
      ```
      ./db_stress --acquire_snapshot_one_in=10000 --allow_concurrent_memtable_write=1 --avoid_flush_during_recovery=0 --avoid_unnecessary_blocking_io=1 --block_size=16384 --bloom_bits=222.913637674 --bottommost_compression_type=none --cache_index_and_filter_blocks=1 --cache_size=1048576 --checkpoint_one_in=0 --checksum_type=kCRC32c --clear_column_family_one_in=0 --compact_files_one_in=1000000 --compact_range_one_in=1000000 --compaction_style=1 --compaction_ttl=0 --compression_max_dict_bytes=0 --compression_parallel_threads=1 --compression_type=zstd --compression_zstd_max_train_bytes=0 --continuous_verification_interval=0 --db=/dev/shm/rocksdb/rocksdb_crashtest_whitebox --db_write_buffer_size=1048576 --delpercent=5 --delrangepercent=0 --destroy_db_initially=0 --disable_wal=0 --enable_pipelined_write=0 --flush_one_in=1000000 --format_version=5 --get_current_wal_file_one_in=0 --get_live_files_one_in=1000000 --get_sorted_wal_files_one_in=0 --index_block_restart_interval=12 --index_type=2 --key_len_percent_dist=1,30,69 --level_compaction_dynamic_level_bytes=True --log2_keys_per_lock=22 --long_running_snapshots=0 --max_background_compactions=20 --max_bytes_for_level_base=10485760 --max_key=1000000 --max_key_len=3 --max_manifest_file_size=1073741824 --max_write_batch_group_size_bytes=1048576 --max_write_buffer_number=3 --memtablerep=skip_list --mmap_read=1 --mock_direct_io=False --nooverwritepercent=1 --num_levels=1 --open_files=100 --ops_per_thread=200000 --partition_filters=1 --pause_background_one_in=1000000 --periodic_compaction_seconds=0 --prefixpercent=5 --progress_reports=0 --read_fault_one_in=0 --readpercent=45 --recycle_log_file_num=0 --reopen=20 --snapshot_hold_ops=100000 --subcompactions=4 --sync=0 --sync_fault_injection=False --target_file_size_base=2097152 --target_file_size_multiplier=2 --test_batches_snapshots=0 --txn_write_policy=1 --unordered_write=1 --use_block_based_filter=0 --use_direct_io_for_flush_and_compaction=0 --use_direct_reads=0 --use_full_merge_v1=1 --use_merge=1 --use_multiget=1 --use_txn=1 --verify_checksum=1 --verify_checksum_one_in=1000000 --verify_db_one_in=100000 --write_buffer_size=4194304 --write_dbid_to_manifest=0 --writepercent=35
      ```
      
      Reviewed By: pdillinger
      
      Differential Revision: D21708338
      
      Pulled By: ajkr
      
      fbshipit-source-id: dcf55cddee0a14f429a75e7a8a505acf8025f2b1
      b464a85e
  4. 21 5月, 2020 1 次提交
  5. 20 5月, 2020 1 次提交
  6. 13 5月, 2020 1 次提交
  7. 07 5月, 2020 1 次提交
    • A
      cover single level universal in crash test (#6818) · 1f20df2f
      Andrew Kryczka 提交于
      Summary: Pull Request resolved: https://github.com/facebook/rocksdb/pull/6818
      
      Test Plan:
      fast whitebox test and verify there are some single-level universal and
      some multi-level universal runs.
      
      ```
      $ python ./tools/db_crashtest.py whitebox --simple -max_key=1000000 -value_size_mult=33 -write_buffer_size=524288 -target_file_size_base=524288 -max_bytes_for_level_base=2097152 --duration=120 --interval=10 --ops_per_thread=1000 --random_kill_odd=887
      ```
      
      Reviewed By: riversand963
      
      Differential Revision: D21432138
      
      Pulled By: ajkr
      
      fbshipit-source-id: 2fc5ba9f3dfa49bb11e81da7dd00a17b476e64d7
      1f20df2f
  8. 01 5月, 2020 1 次提交
  9. 25 4月, 2020 2 次提交
    • C
      Disable O_DIRECT in stress test when db directory does not support direct IO (#6727) · 0a776178
      Cheng Chang 提交于
      Summary:
      In crash test, the db directory might be set to /dev/shm or /tmp, in certain environments such as internal testing infrastructure, neither of these directories support direct IO, so direct IO is never enabled in crash test.
      
      This PR sets up SyncPoints in direct IO related code paths to disable O_DIRECT flag in calls to `open`, so the direct IO code paths will be executed, all direct IO related assertions will be checked, but no real direct IO request will be issued to the file system.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6727
      
      Test Plan:
      export CRASH_TEST_EXT_ARGS="--use_direct_reads=1 --mmap_read=0"
      make -j24 crash_test
      
      Reviewed By: zhichao-cao
      
      Differential Revision: D21139250
      
      Pulled By: cheng-chang
      
      fbshipit-source-id: db9adfe78d91aa4759835b1af91c5db7b27b62ee
      0a776178
    • A
      Silence false alarms in db_stress fault injection (#6741) · 9e7b7e2c
      anand76 提交于
      Summary:
      False alarms are caused by codepaths that intentionally swallow IO
      errors.
      
      Tests:
      make crash_test
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6741
      
      Reviewed By: ltamasi
      
      Differential Revision: D21181138
      
      Pulled By: anand1976
      
      fbshipit-source-id: 5ccfbc68eb192033488de6269e59c00f2c65ce00
      9e7b7e2c
  10. 17 4月, 2020 2 次提交
    • S
      crash_test to cover options.avoid_flush_during_recovery (#6712) · 73523bae
      sdong 提交于
      Summary:
      Options.avoid_flush_during_recovery is uncovered in crash_test. Add the coverage with a chance of 1/8, as it is a less frequently used options.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6712
      
      Test Plan: Run crash_test and see the option can be used or not used by chance.
      
      Reviewed By: ltamasi
      
      Differential Revision: D21056566
      
      fbshipit-source-id: c3b1521517cfc204786e6ef8c6acd7fffda64793
      73523bae
    • Y
      Add env_fault_injection argument to db_stress (#6687) · 5801af46
      Yueh-Hsuan Chiang 提交于
      Summary:
      Add env_fault_injection argument to db_stress.  When enabled,
      FaultInjectionTestEnv will be used instead.  Currently this
      option does not support running with other env setting.
      
      This will allow
      us to later manually produce error when running db_crashtest.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6687
      
      Test Plan:
      make db_stress -j32
      ./db_stress --env_fault_injection
      ./db_stress --env_fault_injection --hdfs   // expect error message
      
      Reviewed By: ajkr
      
      Differential Revision: D21014683
      
      Pulled By: yhchiang
      
      fbshipit-source-id: 0724aeac37efd57adb72a37defe6dbd3bfa8106a
      5801af46
  11. 16 4月, 2020 1 次提交
  12. 15 4月, 2020 1 次提交
    • A
      Fix a couple of bugs in db_stress fault injection (#6700) · 234e2ed5
      anand76 提交于
      Summary:
      1. Fix a memory leak in FaultInjectionTestFS in the stack trace related
      code
      2. Check status of all MultiGet keys before deciding whether an error
      was swallowed, instead of assuming an ok status for any key means an
      undetected error
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6700
      
      Test Plan: Run db_stress with asan and fault injection
      
      Reviewed By: cheng-chang
      
      Differential Revision: D21021498
      
      Pulled By: anand1976
      
      fbshipit-source-id: 489191efd1ab0fa834923a1e1d57253a7a315465
      234e2ed5
  13. 11 4月, 2020 1 次提交
    • A
      Fault injection in db_stress (#6538) · 5c19a441
      anand76 提交于
      Summary:
      This PR implements a fault injection mechanism for injecting errors in reads in db_stress. The FaultInjectionTestFS is used for this purpose. A thread local structure is used to track the errors, so that each db_stress thread can independently enable/disable error injection and verify observed errors against expected errors. This is initially enabled only for Get and MultiGet, but can be extended to iterator as well once its proven stable.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6538
      
      Test Plan:
      crash_test
      make check
      
      Reviewed By: riversand963
      
      Differential Revision: D20714347
      
      Pulled By: anand1976
      
      fbshipit-source-id: d7598321d4a2d72bda0ced57411a337a91d87dc7
      5c19a441
  14. 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
  15. 17 3月, 2020 1 次提交
  16. 26 2月, 2020 1 次提交
    • A
      support SstFileManager in db_stress (#6454) · f52db846
      Andrew Kryczka 提交于
      Summary:
      Add some flags for configuring an SstFileManager. An
      SstFileManager is only created when one or more of these flags are
      set.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6454
      
      Test Plan:
      - ran it a while:
      
      ```
      $ python ./tools/db_crashtest.py blackbox --simple -max_key=100000 -write_buffer_size=131072 -target_file_size_base=131072 -max_bytes_for_level_base=524288 -value_size_mult=33 --interval=10 -max_background_compactions=4 -max_background_flushes=2 -sst_file_manager_bytes_per_sec=1048576
      ```
      
      - verified with strace the SstFileManager is behaving as configured:
      
      ```
      $ strace -fp `pidof db_stress` -e ftruncate,unlink
      ...
      [pid 3074805]
      ftruncate(9</tmp/rocksdb_crashtest_blackbox6OJywh/000070.sst.trash>,
      67423) = 0
      [pid 3074805]
      ftruncate(9</tmp/rocksdb_crashtest_blackbox6OJywh/000070.sst.trash>,
      51039) = 0
      [pid 3074805]
      ftruncate(9</tmp/rocksdb_crashtest_blackbox6OJywh/000070.sst.trash>,
      34655) = 0
      [pid 3074805]
      ftruncate(9</tmp/rocksdb_crashtest_blackbox6OJywh/000070.sst.trash>,
      18271) = 0
      [pid 3074805]
      ftruncate(9</tmp/rocksdb_crashtest_blackbox6OJywh/000070.sst.trash>,
      1887) = 0
      [pid 3074805]
      unlink("/tmp/rocksdb_crashtest_blackbox6OJywh/000070.sst.trash") = 0
      ...
      ```
      
      Differential Revision: D20103315
      
      Pulled By: ajkr
      
      fbshipit-source-id: b3e1092747157459d244b047947a979b85c98f48
      f52db846
  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. 01 2月, 2020 2 次提交
  19. 31 1月, 2020 1 次提交
  20. 29 1月, 2020 1 次提交
    • S
      Add ReadOptions.auto_prefix_mode (#6314) · 8f2bee67
      sdong 提交于
      Summary:
      Add a new option ReadOptions.auto_prefix_mode. When set to true, iterator should return the same result as total order seek, but may choose to do prefix seek internally, based on iterator upper bounds. Also fix two previous bugs when handling prefix extrator changes: (1) reverse iterator should not rely on upper bound to determine prefix. Fix it with skipping prefix check. (2) block-based filter is not handled properly.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6314
      
      Test Plan: (1) add a unit test; (2) add the check to stress test and run see whether it can pass at least one run.
      
      Differential Revision: D19458717
      
      fbshipit-source-id: 51c1bcc5cdd826c2469af201979a39600e779bce
      8f2bee67
  21. 10 1月, 2020 1 次提交
  22. 09 1月, 2020 2 次提交
    • S
      Stress Test: relax prefix iterator check condition (#6269) · 1244abef
      sdong 提交于
      Summary:
      Right now, when validating prefix iterator, if control iterator is invalidate but prefix iterator shows value, we determine it as a test failure. However, this fails to consider the case where a file or memtable containing a tombstone is filtered out by a prefix bloom filter. The fix is to relax the check in this case. If we are out of prefix range, then ignore the check.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6269
      
      Test Plan: Run crash_test for a short while and it still passes.
      
      Differential Revision: D19317594
      
      fbshipit-source-id: b964a1cdc1df5efe439d4b32f8023e1fbc8598c1
      1244abef
    • M
      Print out non-ok DB::Open status in db_stress (#6272) · f4a378be
      Maysam Yabandeh 提交于
      Summary:
      The crash test is failing with non-ok status after TransactionDB::Open. This patch adds more debugging information.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6272
      
      Differential Revision: D19314527
      
      Pulled By: maysamyabandeh
      
      fbshipit-source-id: d45ecb0f2144e052fb4b5fdd483150440991a3b4
      f4a378be
  23. 04 1月, 2020 1 次提交
  24. 03 1月, 2020 2 次提交
    • M
      Print before AddErrors in stress tests (#6256) · 7c98d715
      Maysam Yabandeh 提交于
      Summary:
      Stress tests count number of errors and report them at the end. Not all the cases are accompanied with a log line which makes debugging difficult. The patch adds a log line to the remaining cases.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6256
      
      Differential Revision: D19268785
      
      Pulled By: maysamyabandeh
      
      fbshipit-source-id: bdabcaa5c5c7edcb4ce4f25e38fd8a3fd9c7700b
      7c98d715
    • M
      Prevent an incompatible combination of options (#6254) · 48a678b7
      Maysam Yabandeh 提交于
      Summary:
      allow_concurrent_memtable_write is incompatible with non-zero max_successive_merges. Although we check this at runtime, we currently don't prevent the user from setting this combination in options. This has led to stress tests to fail with this combination is tried in ::SetOptions. The patch fixes that.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6254
      
      Differential Revision: D19265819
      
      Pulled By: maysamyabandeh
      
      fbshipit-source-id: 47f2e2dc26fe0972c7152f4da15dadb9703f1179
      48a678b7
  25. 25 12月, 2019 1 次提交
    • P
      Fix a clang analyzer report, and 'analyze' make rule (#6244) · 95d226d8
      Peter Dillinger 提交于
      Summary:
      Clang analyzer was falsely reporting on use of txn=nullptr.
      Added a new const variable so that it can properly prune impossible
      control flows.
      
      Also, 'make analyze' previously required setting USE_CLANG=1 as an
      environment variable, not a make variable, or else compilation errors
      like
      
      g++: error: unrecognized command line option ‘-Wshorten-64-to-32’
      
      Now USE_CLANG is not required for 'make analyze' (it's implied) and you
      can do an incremental analysis (recompile what has changed) with
      'USE_CLANG=1 make analyze_incremental'
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6244
      
      Test Plan: 'make -j24 analyze', 'make crash_test'
      
      Differential Revision: D19225950
      
      Pulled By: pdillinger
      
      fbshipit-source-id: 14f4039aa552228826a2de62b2671450e0fed3cb
      95d226d8
  26. 24 12月, 2019 1 次提交
  27. 22 12月, 2019 2 次提交
  28. 21 12月, 2019 7 次提交
    • 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 should not keep manifest files under checkpoint directory (#6233) · e0f9d11a
      sdong 提交于
      Summary:
      Recently db_stress starts to use a special Env that keeps all manifest files. This should not apply to checkpoint directory and causes test failure like this:
      
      Verification failed: Checkpoint gave inconsistent state. Status is IO error: While mkdir: /dev/shm/rocksdb/rocksdb_crashtest_whitebox/.checkpoint27.tmp: File exists
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6233
      
      Test Plan: Run crash_test with high chance of checkpoint and make sure it doesn't reproduce.
      
      Differential Revision: D19207250
      
      fbshipit-source-id: 12a931379e2e0572bb84aa658b6d03770c8551d4
      e0f9d11a
    • S
      db_stress: listners to implement all functions (#6197) · 9d36c066
      sdong 提交于
      Summary:
      Listners are one source of bugs because we frequently release some mutex to invoke them, which introduce race conditions. Implement all callback functions in db_stress's listener class, and randomly sleep.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6197
      
      Test Plan: Run crash_test for a while and see no obvious problem.
      
      Differential Revision: D19134015
      
      fbshipit-source-id: b9ea8be9366e4501759119520cd4f204943538f6
      9d36c066
    • 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
    • A
      Generate variable length keys in db_stress (#6165) · 3160edfd
      anand76 提交于
      Summary:
      Currently, db_stress generates fixed length keys of 8 bytes. This patch adds the ability to generate variable length keys. Most of the db_stress code continues to work with a numeric key randomly generated, and the numeric key also acts as an index into the values_ array. The numeric key is mapped to a variable length string key in a deterministic way. Furthermore, the ordering is preserved.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6165
      
      Test Plan: run make crash_test
      
      Differential Revision: D19204646
      
      Pulled By: anand1976
      
      fbshipit-source-id: d2d46a96615b4832a8be2a981f5913905f0e1ca7
      3160edfd
    • S
      crash_test to cover bottommost compression and some other changes (#6215) · 338c149b
      sdong 提交于
      Summary:
      Several improvements to crash_test/stress_test:
      (1) Stress_test to support an parameter of bottommost compression
      (2) Rename those FLAGS_* variables that are not gflags to avoid confusion
      (3) Crash_test to randomly generate compression type for bottommost compression with half the chance.
      (4) Stress_test to sanitize unsupported compression type to snappy, so that crash_test to cover all possible compression types and people don't need to worry about they don't support all comrpession types in their environment.
      (5) In crash_test, when generating db_stress command, sort arguments in alphabeta order, so that it is easier to find value for a specific argument.
      Pull Request resolved: https://github.com/facebook/rocksdb/pull/6215
      
      Test Plan: Run "make crash_test" for a while and see the botommost option shown in LOG files.
      
      Differential Revision: D19171255
      
      fbshipit-source-id: d7001e246c4ff9ee5760776eea0be97738650735
      338c149b
    • 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