@nxtedition/rocksdb 7.1.14 → 7.1.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/binding.cc +1 -0
  2. package/deps/rocksdb/rocksdb/CMakeLists.txt +72 -18
  3. package/deps/rocksdb/rocksdb/Makefile +91 -11
  4. package/deps/rocksdb/rocksdb/TARGETS +8 -4
  5. package/deps/rocksdb/rocksdb/cache/cache.cc +5 -0
  6. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +13 -8
  7. package/deps/rocksdb/rocksdb/cache/cache_entry_roles.cc +2 -0
  8. package/deps/rocksdb/rocksdb/cache/cache_test.cc +116 -57
  9. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +958 -459
  10. package/deps/rocksdb/rocksdb/cache/clock_cache.h +407 -622
  11. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +104 -40
  12. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +23 -8
  13. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +350 -184
  14. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +12 -2
  15. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +2 -0
  16. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +130 -43
  17. package/deps/rocksdb/rocksdb/cache/lru_cache.h +24 -2
  18. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +423 -98
  19. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +19 -2
  20. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +10 -7
  21. package/deps/rocksdb/rocksdb/crash_test.mk +2 -2
  22. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +46 -26
  23. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +9 -3
  24. package/deps/rocksdb/rocksdb/db/blob/blob_contents.cc +90 -0
  25. package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +56 -0
  26. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +23 -10
  27. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +64 -59
  28. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +11 -8
  29. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +92 -62
  30. package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +159 -136
  31. package/deps/rocksdb/rocksdb/db/blob/blob_source.h +13 -13
  32. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +129 -57
  33. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +81 -3
  34. package/deps/rocksdb/rocksdb/db/c.cc +29 -0
  35. package/deps/rocksdb/rocksdb/db/column_family.cc +10 -1
  36. package/deps/rocksdb/rocksdb/db/column_family_test.cc +21 -0
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +42 -36
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +344 -102
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +163 -28
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +52 -17
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +35 -30
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +8 -3
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +167 -11
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +8 -8
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +10 -13
  46. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +0 -117
  47. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +6 -49
  48. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +29 -4
  49. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +18 -11
  50. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +4 -10
  51. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +1 -1
  52. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +12 -0
  53. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +144 -93
  54. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +28 -32
  55. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +1 -1
  56. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +5 -9
  57. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +2 -33
  58. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +3 -5
  59. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +11 -0
  60. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +1 -2
  61. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +8 -0
  62. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +2 -1
  63. package/deps/rocksdb/rocksdb/db/db_iter.cc +76 -138
  64. package/deps/rocksdb/rocksdb/db/db_iter.h +26 -23
  65. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +1 -1
  66. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +931 -0
  67. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +2 -2
  68. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +6 -0
  69. package/deps/rocksdb/rocksdb/db/db_test2.cc +44 -22
  70. package/deps/rocksdb/rocksdb/db/db_test_util.cc +6 -14
  71. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +155 -0
  72. package/deps/rocksdb/rocksdb/db/db_write_test.cc +45 -0
  73. package/deps/rocksdb/rocksdb/db/dbformat.h +2 -1
  74. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +8 -0
  75. package/deps/rocksdb/rocksdb/db/experimental.cc +5 -1
  76. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +24 -12
  77. package/deps/rocksdb/rocksdb/db/internal_stats.cc +7 -1
  78. package/deps/rocksdb/rocksdb/db/internal_stats.h +3 -0
  79. package/deps/rocksdb/rocksdb/db/memtable.cc +79 -18
  80. package/deps/rocksdb/rocksdb/db/memtable.h +5 -0
  81. package/deps/rocksdb/rocksdb/db/memtable_list.cc +26 -4
  82. package/deps/rocksdb/rocksdb/db/memtable_list.h +2 -1
  83. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +113 -0
  84. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +110 -0
  85. package/deps/rocksdb/rocksdb/db/{periodic_work_scheduler_test.cc → periodic_task_scheduler_test.cc} +33 -39
  86. package/deps/rocksdb/rocksdb/db/range_del_aggregator.cc +12 -20
  87. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +6 -5
  88. package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +12 -8
  89. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +20 -5
  90. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +14 -0
  91. package/deps/rocksdb/rocksdb/db/repair.cc +17 -8
  92. package/deps/rocksdb/rocksdb/db/repair_test.cc +2 -1
  93. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +49 -66
  94. package/deps/rocksdb/rocksdb/db/table_cache.cc +92 -63
  95. package/deps/rocksdb/rocksdb/db/table_cache.h +16 -9
  96. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
  97. package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +2 -2
  98. package/deps/rocksdb/rocksdb/db/table_properties_collector.h +3 -3
  99. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +1 -1
  100. package/deps/rocksdb/rocksdb/db/version_builder.cc +1 -1
  101. package/deps/rocksdb/rocksdb/db/version_edit.h +1 -2
  102. package/deps/rocksdb/rocksdb/db/version_set.cc +379 -145
  103. package/deps/rocksdb/rocksdb/db/version_set.h +26 -24
  104. package/deps/rocksdb/rocksdb/db/version_set_test.cc +9 -9
  105. package/deps/rocksdb/rocksdb/db/version_util.h +3 -2
  106. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +10 -2
  107. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +2 -0
  108. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +5 -8
  109. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +5 -8
  110. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress.cc +2 -0
  111. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +71 -0
  112. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +14 -0
  113. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +23 -0
  114. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +26 -1
  115. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +105 -34
  116. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +16 -8
  117. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +6 -0
  118. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +4 -8
  119. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +4 -8
  120. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +282 -25
  121. package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
  122. package/deps/rocksdb/rocksdb/env/io_posix.cc +3 -1
  123. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +367 -177
  124. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +144 -56
  125. package/deps/rocksdb/rocksdb/file/filename.cc +3 -3
  126. package/deps/rocksdb/rocksdb/file/filename.h +4 -2
  127. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +415 -0
  128. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +2 -0
  129. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +36 -45
  130. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +21 -3
  131. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +11 -11
  132. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +15 -1
  133. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +163 -68
  134. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +26 -12
  135. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +23 -5
  136. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +21 -17
  137. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +17 -0
  138. package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +3 -3
  139. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +17 -6
  140. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +3 -0
  141. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +20 -0
  142. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +3 -3
  143. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/option_change_migration.h +4 -0
  144. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +1 -1
  145. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +3 -0
  146. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +2 -1
  147. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +2 -1
  148. package/deps/rocksdb/rocksdb/logging/env_logger.h +2 -2
  149. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +4 -2
  150. package/deps/rocksdb/rocksdb/monitoring/histogram.h +2 -0
  151. package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +15 -1
  152. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.cc +17 -0
  153. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +14 -3
  154. package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +3 -0
  155. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +50 -0
  156. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +1 -0
  157. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +31 -32
  158. package/deps/rocksdb/rocksdb/options/customizable_test.cc +4 -1
  159. package/deps/rocksdb/rocksdb/options/options.cc +2 -2
  160. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +2 -1
  161. package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +1 -0
  162. package/deps/rocksdb/rocksdb/src.mk +4 -2
  163. package/deps/rocksdb/rocksdb/table/block_based/block.h +9 -8
  164. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +110 -99
  165. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +12 -10
  166. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +11 -2
  167. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +138 -83
  168. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +25 -24
  169. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +31 -30
  170. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +16 -13
  171. package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +4 -4
  172. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +3 -3
  173. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +3 -3
  174. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +17 -19
  175. package/deps/rocksdb/rocksdb/table/block_fetcher.h +1 -1
  176. package/deps/rocksdb/rocksdb/table/format.cc +26 -29
  177. package/deps/rocksdb/rocksdb/table/format.h +44 -26
  178. package/deps/rocksdb/rocksdb/table/get_context.cc +17 -12
  179. package/deps/rocksdb/rocksdb/table/internal_iterator.h +7 -0
  180. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +4 -0
  181. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +950 -104
  182. package/deps/rocksdb/rocksdb/table/merging_iterator.h +28 -1
  183. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +3 -2
  184. package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -1
  185. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +10 -9
  186. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.h +22 -20
  187. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +1 -1
  188. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +1 -1
  189. package/deps/rocksdb/rocksdb/table/table_builder.h +9 -21
  190. package/deps/rocksdb/rocksdb/table/table_test.cc +12 -12
  191. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim_test.py +4 -4
  192. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_plot.py +1 -0
  193. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +116 -34
  194. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +6 -1
  195. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +1 -1
  196. package/deps/rocksdb/rocksdb/util/autovector.h +12 -0
  197. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +3 -2
  198. package/deps/rocksdb/rocksdb/util/stderr_logger.cc +30 -0
  199. package/deps/rocksdb/rocksdb/util/stderr_logger.h +5 -18
  200. package/deps/rocksdb/rocksdb/util/timer.h +2 -3
  201. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +9 -2
  202. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +1 -1
  203. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +1 -1
  204. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +34 -53
  205. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +9 -14
  206. package/deps/rocksdb/rocksdb/utilities/debug.cc +2 -4
  207. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +4 -0
  208. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +1 -1
  209. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +4 -3
  210. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +3 -1
  211. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +26 -8
  212. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +114 -16
  213. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
  214. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +59 -0
  215. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +3 -0
  216. package/deps/rocksdb/rocksdb/utilities/transactions/timestamped_snapshot_test.cc +39 -0
  217. package/deps/rocksdb/rocksdb.gyp +0 -1
  218. package/index.js +6 -10
  219. package/package.json +1 -1
  220. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  221. package/prebuilds/linux-x64/node.napi.node +0 -0
  222. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.cc +0 -168
  223. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.h +0 -90
@@ -803,7 +803,6 @@ class Version {
803
803
  void AddIterators(const ReadOptions& read_options,
804
804
  const FileOptions& soptions,
805
805
  MergeIteratorBuilder* merger_iter_builder,
806
- RangeDelAggregator* range_del_agg,
807
806
  bool allow_unprepared_value);
808
807
 
809
808
  // @param read_options Must outlive any iterator built by
@@ -811,8 +810,7 @@ class Version {
811
810
  void AddIteratorsForLevel(const ReadOptions& read_options,
812
811
  const FileOptions& soptions,
813
812
  MergeIteratorBuilder* merger_iter_builder,
814
- int level, RangeDelAggregator* range_del_agg,
815
- bool allow_unprepared_value);
813
+ int level, bool allow_unprepared_value);
816
814
 
817
815
  Status OverlapWithLevelIterator(const ReadOptions&, const FileOptions&,
818
816
  const Slice& smallest_user_key,
@@ -961,7 +959,9 @@ class Version {
961
959
 
962
960
  const MutableCFOptions& GetMutableCFOptions() { return mutable_cf_options_; }
963
961
 
964
- Status VerifySstUniqueIds() const;
962
+ InternalIterator* TEST_GetLevelIterator(
963
+ const ReadOptions& read_options, MergeIteratorBuilder* merge_iter_builder,
964
+ int level, bool allow_unprepared_value);
965
965
 
966
966
  private:
967
967
  Env* env_;
@@ -1014,15 +1014,14 @@ class Version {
1014
1014
  // queue coroutine tasks to mget_tasks. It may also split the input batch
1015
1015
  // by creating a new batch with keys definitely not in this level and
1016
1016
  // enqueuing it to to_process.
1017
- Status ProcessBatch(const ReadOptions& read_options,
1018
- FilePickerMultiGet* batch,
1019
- std::vector<folly::coro::Task<Status>>& mget_tasks,
1020
- std::unordered_map<uint64_t, BlobReadContexts>* blob_ctxs,
1021
- autovector<FilePickerMultiGet, 4>& batches,
1022
- std::deque<size_t>& waiting,
1023
- std::deque<size_t>& to_process,
1024
- unsigned int& num_tasks_queued, uint64_t& num_filter_read,
1025
- uint64_t& num_index_read, uint64_t& num_sst_read);
1017
+ Status ProcessBatch(
1018
+ const ReadOptions& read_options, FilePickerMultiGet* batch,
1019
+ std::vector<folly::coro::Task<Status>>& mget_tasks,
1020
+ std::unordered_map<uint64_t, BlobReadContexts>* blob_ctxs,
1021
+ autovector<FilePickerMultiGet, 4>& batches, std::deque<size_t>& waiting,
1022
+ std::deque<size_t>& to_process, unsigned int& num_tasks_queued,
1023
+ std::unordered_map<int, std::tuple<uint64_t, uint64_t, uint64_t>>&
1024
+ mget_stats);
1026
1025
  #endif
1027
1026
 
1028
1027
  ColumnFamilyData* cfd_; // ColumnFamilyData to which this Version belongs
@@ -1099,13 +1098,14 @@ class VersionSet {
1099
1098
 
1100
1099
  Status LogAndApplyToDefaultColumnFamily(
1101
1100
  VersionEdit* edit, InstrumentedMutex* mu,
1102
- FSDirectory* db_directory = nullptr, bool new_descriptor_log = false,
1101
+ FSDirectory* dir_contains_current_file, bool new_descriptor_log = false,
1103
1102
  const ColumnFamilyOptions* column_family_options = nullptr) {
1104
1103
  ColumnFamilyData* default_cf = GetColumnFamilySet()->GetDefault();
1105
1104
  const MutableCFOptions* cf_options =
1106
1105
  default_cf->GetLatestMutableCFOptions();
1107
- return LogAndApply(default_cf, *cf_options, edit, mu, db_directory,
1108
- new_descriptor_log, column_family_options);
1106
+ return LogAndApply(default_cf, *cf_options, edit, mu,
1107
+ dir_contains_current_file, new_descriptor_log,
1108
+ column_family_options);
1109
1109
  }
1110
1110
 
1111
1111
  // Apply *edit to the current version to form a new descriptor that
@@ -1117,7 +1117,7 @@ class VersionSet {
1117
1117
  Status LogAndApply(
1118
1118
  ColumnFamilyData* column_family_data,
1119
1119
  const MutableCFOptions& mutable_cf_options, VersionEdit* edit,
1120
- InstrumentedMutex* mu, FSDirectory* db_directory = nullptr,
1120
+ InstrumentedMutex* mu, FSDirectory* dir_contains_current_file,
1121
1121
  bool new_descriptor_log = false,
1122
1122
  const ColumnFamilyOptions* column_family_options = nullptr) {
1123
1123
  autovector<ColumnFamilyData*> cfds;
@@ -1129,7 +1129,8 @@ class VersionSet {
1129
1129
  edit_list.emplace_back(edit);
1130
1130
  edit_lists.emplace_back(edit_list);
1131
1131
  return LogAndApply(cfds, mutable_cf_options_list, edit_lists, mu,
1132
- db_directory, new_descriptor_log, column_family_options);
1132
+ dir_contains_current_file, new_descriptor_log,
1133
+ column_family_options);
1133
1134
  }
1134
1135
  // The batch version. If edit_list.size() > 1, caller must ensure that
1135
1136
  // no edit in the list column family add or drop
@@ -1137,7 +1138,7 @@ class VersionSet {
1137
1138
  ColumnFamilyData* column_family_data,
1138
1139
  const MutableCFOptions& mutable_cf_options,
1139
1140
  const autovector<VersionEdit*>& edit_list, InstrumentedMutex* mu,
1140
- FSDirectory* db_directory = nullptr, bool new_descriptor_log = false,
1141
+ FSDirectory* dir_contains_current_file, bool new_descriptor_log = false,
1141
1142
  const ColumnFamilyOptions* column_family_options = nullptr,
1142
1143
  const std::function<void(const Status&)>& manifest_wcb = {}) {
1143
1144
  autovector<ColumnFamilyData*> cfds;
@@ -1147,8 +1148,8 @@ class VersionSet {
1147
1148
  autovector<autovector<VersionEdit*>> edit_lists;
1148
1149
  edit_lists.emplace_back(edit_list);
1149
1150
  return LogAndApply(cfds, mutable_cf_options_list, edit_lists, mu,
1150
- db_directory, new_descriptor_log, column_family_options,
1151
- {manifest_wcb});
1151
+ dir_contains_current_file, new_descriptor_log,
1152
+ column_family_options, {manifest_wcb});
1152
1153
  }
1153
1154
 
1154
1155
  // The across-multi-cf batch version. If edit_lists contain more than
@@ -1158,7 +1159,7 @@ class VersionSet {
1158
1159
  const autovector<ColumnFamilyData*>& cfds,
1159
1160
  const autovector<const MutableCFOptions*>& mutable_cf_options_list,
1160
1161
  const autovector<autovector<VersionEdit*>>& edit_lists,
1161
- InstrumentedMutex* mu, FSDirectory* db_directory = nullptr,
1162
+ InstrumentedMutex* mu, FSDirectory* dir_contains_current_file,
1162
1163
  bool new_descriptor_log = false,
1163
1164
  const ColumnFamilyOptions* new_cf_options = nullptr,
1164
1165
  const std::vector<std::function<void(const Status&)>>& manifest_wcbs =
@@ -1574,7 +1575,8 @@ class VersionSet {
1574
1575
  private:
1575
1576
  // REQUIRES db mutex at beginning. may release and re-acquire db mutex
1576
1577
  Status ProcessManifestWrites(std::deque<ManifestWriter>& writers,
1577
- InstrumentedMutex* mu, FSDirectory* db_directory,
1578
+ InstrumentedMutex* mu,
1579
+ FSDirectory* dir_contains_current_file,
1578
1580
  bool new_descriptor_log,
1579
1581
  const ColumnFamilyOptions* new_cf_options);
1580
1582
 
@@ -1636,7 +1638,7 @@ class ReactiveVersionSet : public VersionSet {
1636
1638
  const autovector<ColumnFamilyData*>& /*cfds*/,
1637
1639
  const autovector<const MutableCFOptions*>& /*mutable_cf_options_list*/,
1638
1640
  const autovector<autovector<VersionEdit*>>& /*edit_lists*/,
1639
- InstrumentedMutex* /*mu*/, FSDirectory* /*db_directory*/,
1641
+ InstrumentedMutex* /*mu*/, FSDirectory* /*dir_contains_current_file*/,
1640
1642
  bool /*new_descriptor_log*/, const ColumnFamilyOptions* /*new_cf_option*/,
1641
1643
  const std::vector<std::function<void(const Status&)>>& /*manifest_wcbs*/)
1642
1644
  override {
@@ -1272,7 +1272,7 @@ class VersionSetTestBase {
1272
1272
  mutex_.Lock();
1273
1273
  Status s =
1274
1274
  versions_->LogAndApply(versions_->GetColumnFamilySet()->GetDefault(),
1275
- mutable_cf_options_, &edit, &mutex_);
1275
+ mutable_cf_options_, &edit, &mutex_, nullptr);
1276
1276
  mutex_.Unlock();
1277
1277
  return s;
1278
1278
  }
@@ -1286,7 +1286,7 @@ class VersionSetTestBase {
1286
1286
  mutex_.Lock();
1287
1287
  Status s =
1288
1288
  versions_->LogAndApply(versions_->GetColumnFamilySet()->GetDefault(),
1289
- mutable_cf_options_, vedits, &mutex_);
1289
+ mutable_cf_options_, vedits, &mutex_, nullptr);
1290
1290
  mutex_.Unlock();
1291
1291
  return s;
1292
1292
  }
@@ -1384,8 +1384,8 @@ TEST_F(VersionSetTest, SameColumnFamilyGroupCommit) {
1384
1384
  });
1385
1385
  SyncPoint::GetInstance()->EnableProcessing();
1386
1386
  mutex_.Lock();
1387
- Status s =
1388
- versions_->LogAndApply(cfds, all_mutable_cf_options, edit_lists, &mutex_);
1387
+ Status s = versions_->LogAndApply(cfds, all_mutable_cf_options, edit_lists,
1388
+ &mutex_, nullptr);
1389
1389
  mutex_.Unlock();
1390
1390
  EXPECT_OK(s);
1391
1391
  EXPECT_EQ(kGroupSize - 1, count);
@@ -1587,7 +1587,7 @@ TEST_F(VersionSetTest, ObsoleteBlobFile) {
1587
1587
  mutex_.Lock();
1588
1588
  Status s =
1589
1589
  versions_->LogAndApply(versions_->GetColumnFamilySet()->GetDefault(),
1590
- mutable_cf_options_, &edit, &mutex_);
1590
+ mutable_cf_options_, &edit, &mutex_, nullptr);
1591
1591
  mutex_.Unlock();
1592
1592
 
1593
1593
  ASSERT_OK(s);
@@ -2194,7 +2194,7 @@ class VersionSetWithTimestampTest : public VersionSetTest {
2194
2194
  Status s;
2195
2195
  mutex_.Lock();
2196
2196
  s = versions_->LogAndApply(cfd_, *(cfd_->GetLatestMutableCFOptions()),
2197
- edits_, &mutex_);
2197
+ edits_, &mutex_, nullptr);
2198
2198
  mutex_.Unlock();
2199
2199
  ASSERT_OK(s);
2200
2200
  VerifyFullHistoryTsLow(*std::max_element(ts_lbs.begin(), ts_lbs.end()));
@@ -2661,7 +2661,7 @@ TEST_P(VersionSetTestDropOneCF, HandleDroppedColumnFamilyInAtomicGroup) {
2661
2661
  mutex_.Lock();
2662
2662
  s = versions_->LogAndApply(cfd_to_drop,
2663
2663
  *cfd_to_drop->GetLatestMutableCFOptions(),
2664
- &drop_cf_edit, &mutex_);
2664
+ &drop_cf_edit, &mutex_, nullptr);
2665
2665
  mutex_.Unlock();
2666
2666
  ASSERT_OK(s);
2667
2667
 
@@ -2710,8 +2710,8 @@ TEST_P(VersionSetTestDropOneCF, HandleDroppedColumnFamilyInAtomicGroup) {
2710
2710
  });
2711
2711
  SyncPoint::GetInstance()->EnableProcessing();
2712
2712
  mutex_.Lock();
2713
- s = versions_->LogAndApply(cfds, mutable_cf_options_list, edit_lists,
2714
- &mutex_);
2713
+ s = versions_->LogAndApply(cfds, mutable_cf_options_list, edit_lists, &mutex_,
2714
+ nullptr);
2715
2715
  mutex_.Unlock();
2716
2716
  ASSERT_OK(s);
2717
2717
  ASSERT_EQ(1, called);
@@ -31,12 +31,13 @@ class OfflineManifestWriter {
31
31
  return versions_.Recover(column_families);
32
32
  }
33
33
 
34
- Status LogAndApply(ColumnFamilyData* cfd, VersionEdit* edit) {
34
+ Status LogAndApply(ColumnFamilyData* cfd, VersionEdit* edit,
35
+ FSDirectory* dir_contains_current_file) {
35
36
  // Use `mutex` to imitate a locked DB mutex when calling `LogAndApply()`.
36
37
  InstrumentedMutex mutex;
37
38
  mutex.Lock();
38
39
  Status s = versions_.LogAndApply(cfd, *cfd->GetLatestMutableCFOptions(),
39
- edit, &mutex, nullptr /* db_directory */,
40
+ edit, &mutex, dir_contains_current_file,
40
41
  false /* new_descriptor_log */);
41
42
  mutex.Unlock();
42
43
  return s;
@@ -38,6 +38,9 @@ TEST_F(DBWideBasicTest, PutEntity) {
38
38
  constexpr char third_value[] = "baz";
39
39
 
40
40
  auto verify = [&]() {
41
+ const WideColumns expected_third_columns{
42
+ {kDefaultWideColumnName, third_value}};
43
+
41
44
  {
42
45
  PinnableSlice result;
43
46
  ASSERT_OK(db_->Get(ReadOptions(), db_->DefaultColumnFamily(), first_key,
@@ -78,8 +81,7 @@ TEST_F(DBWideBasicTest, PutEntity) {
78
81
  ASSERT_OK(db_->GetEntity(ReadOptions(), db_->DefaultColumnFamily(),
79
82
  third_key, &result));
80
83
 
81
- const WideColumns expected_columns{{kDefaultWideColumnName, third_value}};
82
- ASSERT_EQ(result.columns(), expected_columns);
84
+ ASSERT_EQ(result.columns(), expected_third_columns);
83
85
  }
84
86
 
85
87
  {
@@ -110,18 +112,21 @@ TEST_F(DBWideBasicTest, PutEntity) {
110
112
  ASSERT_OK(iter->status());
111
113
  ASSERT_EQ(iter->key(), first_key);
112
114
  ASSERT_EQ(iter->value(), first_value_of_default_column);
115
+ ASSERT_EQ(iter->columns(), first_columns);
113
116
 
114
117
  iter->Next();
115
118
  ASSERT_TRUE(iter->Valid());
116
119
  ASSERT_OK(iter->status());
117
120
  ASSERT_EQ(iter->key(), second_key);
118
121
  ASSERT_TRUE(iter->value().empty());
122
+ ASSERT_EQ(iter->columns(), second_columns);
119
123
 
120
124
  iter->Next();
121
125
  ASSERT_TRUE(iter->Valid());
122
126
  ASSERT_OK(iter->status());
123
127
  ASSERT_EQ(iter->key(), third_key);
124
128
  ASSERT_EQ(iter->value(), third_value);
129
+ ASSERT_EQ(iter->columns(), expected_third_columns);
125
130
 
126
131
  iter->Next();
127
132
  ASSERT_FALSE(iter->Valid());
@@ -132,18 +137,21 @@ TEST_F(DBWideBasicTest, PutEntity) {
132
137
  ASSERT_OK(iter->status());
133
138
  ASSERT_EQ(iter->key(), third_key);
134
139
  ASSERT_EQ(iter->value(), third_value);
140
+ ASSERT_EQ(iter->columns(), expected_third_columns);
135
141
 
136
142
  iter->Prev();
137
143
  ASSERT_TRUE(iter->Valid());
138
144
  ASSERT_OK(iter->status());
139
145
  ASSERT_EQ(iter->key(), second_key);
140
146
  ASSERT_TRUE(iter->value().empty());
147
+ ASSERT_EQ(iter->columns(), second_columns);
141
148
 
142
149
  iter->Prev();
143
150
  ASSERT_TRUE(iter->Valid());
144
151
  ASSERT_OK(iter->status());
145
152
  ASSERT_EQ(iter->key(), first_key);
146
153
  ASSERT_EQ(iter->value(), first_value_of_default_column);
154
+ ASSERT_EQ(iter->columns(), first_columns);
147
155
 
148
156
  iter->Prev();
149
157
  ASSERT_FALSE(iter->Valid());
@@ -17,6 +17,8 @@ namespace ROCKSDB_NAMESPACE {
17
17
 
18
18
  const Slice kDefaultWideColumnName;
19
19
 
20
+ const WideColumns kNoWideColumns;
21
+
20
22
  Status WideColumnSerialization::Serialize(const WideColumns& columns,
21
23
  std::string& output) {
22
24
  if (columns.size() >
@@ -24,8 +24,8 @@ class BatchedOpsStressTest : public StressTest {
24
24
  Status TestPut(ThreadState* thread, WriteOptions& write_opts,
25
25
  const ReadOptions& /* read_opts */,
26
26
  const std::vector<int>& rand_column_families,
27
- const std::vector<int64_t>& rand_keys, char (&value)[100],
28
- std::unique_ptr<MutexLock>& /* lock */) override {
27
+ const std::vector<int64_t>& rand_keys,
28
+ char (&value)[100]) override {
29
29
  uint32_t value_base =
30
30
  thread->rand.Next() % thread->shared->UNKNOWN_SENTINEL;
31
31
  size_t sz = GenerateValue(value_base, value, sizeof(value));
@@ -66,8 +66,7 @@ class BatchedOpsStressTest : public StressTest {
66
66
  // in DB atomically i.e in a single batch. Also refer MultiGet.
67
67
  Status TestDelete(ThreadState* thread, WriteOptions& writeoptions,
68
68
  const std::vector<int>& rand_column_families,
69
- const std::vector<int64_t>& rand_keys,
70
- std::unique_ptr<MutexLock>& /* lock */) override {
69
+ const std::vector<int64_t>& rand_keys) override {
71
70
  std::string keys[10] = {"9", "7", "5", "3", "1", "8", "6", "4", "2", "0"};
72
71
 
73
72
  WriteBatch batch(0 /* reserved_bytes */, 0 /* max_bytes */,
@@ -95,8 +94,7 @@ class BatchedOpsStressTest : public StressTest {
95
94
  Status TestDeleteRange(ThreadState* /* thread */,
96
95
  WriteOptions& /* write_opts */,
97
96
  const std::vector<int>& /* rand_column_families */,
98
- const std::vector<int64_t>& /* rand_keys */,
99
- std::unique_ptr<MutexLock>& /* lock */) override {
97
+ const std::vector<int64_t>& /* rand_keys */) override {
100
98
  assert(false);
101
99
  return Status::NotSupported(
102
100
  "BatchedOpsStressTest does not support "
@@ -106,8 +104,7 @@ class BatchedOpsStressTest : public StressTest {
106
104
  void TestIngestExternalFile(
107
105
  ThreadState* /* thread */,
108
106
  const std::vector<int>& /* rand_column_families */,
109
- const std::vector<int64_t>& /* rand_keys */,
110
- std::unique_ptr<MutexLock>& /* lock */) override {
107
+ const std::vector<int64_t>& /* rand_keys */) override {
111
108
  assert(false);
112
109
  fprintf(stderr,
113
110
  "BatchedOpsStressTest does not support "
@@ -23,8 +23,8 @@ class CfConsistencyStressTest : public StressTest {
23
23
  Status TestPut(ThreadState* thread, WriteOptions& write_opts,
24
24
  const ReadOptions& /* read_opts */,
25
25
  const std::vector<int>& rand_column_families,
26
- const std::vector<int64_t>& rand_keys, char (&value)[100],
27
- std::unique_ptr<MutexLock>& /* lock */) override {
26
+ const std::vector<int64_t>& rand_keys,
27
+ char (&value)[100]) override {
28
28
  std::string key_str = Key(rand_keys[0]);
29
29
  Slice key = key_str;
30
30
  uint64_t value_base = batch_id_.fetch_add(1);
@@ -54,8 +54,7 @@ class CfConsistencyStressTest : public StressTest {
54
54
 
55
55
  Status TestDelete(ThreadState* thread, WriteOptions& write_opts,
56
56
  const std::vector<int>& rand_column_families,
57
- const std::vector<int64_t>& rand_keys,
58
- std::unique_ptr<MutexLock>& /* lock */) override {
57
+ const std::vector<int64_t>& rand_keys) override {
59
58
  std::string key_str = Key(rand_keys[0]);
60
59
  Slice key = key_str;
61
60
  WriteBatch batch;
@@ -75,8 +74,7 @@ class CfConsistencyStressTest : public StressTest {
75
74
 
76
75
  Status TestDeleteRange(ThreadState* thread, WriteOptions& write_opts,
77
76
  const std::vector<int>& rand_column_families,
78
- const std::vector<int64_t>& rand_keys,
79
- std::unique_ptr<MutexLock>& /* lock */) override {
77
+ const std::vector<int64_t>& rand_keys) override {
80
78
  int64_t rand_key = rand_keys[0];
81
79
  auto shared = thread->shared;
82
80
  int64_t max_key = shared->GetMaxKey();
@@ -107,8 +105,7 @@ class CfConsistencyStressTest : public StressTest {
107
105
  void TestIngestExternalFile(
108
106
  ThreadState* /* thread */,
109
107
  const std::vector<int>& /* rand_column_families */,
110
- const std::vector<int64_t>& /* rand_keys */,
111
- std::unique_ptr<MutexLock>& /* lock */) override {
108
+ const std::vector<int64_t>& /* rand_keys */) override {
112
109
  assert(false);
113
110
  fprintf(stderr,
114
111
  "CfConsistencyStressTest does not support TestIngestExternalFile "
@@ -15,9 +15,11 @@ int main() {
15
15
  return 1;
16
16
  }
17
17
  #else
18
+ #include "port/stack_trace.h"
18
19
  #include "rocksdb/db_stress_tool.h"
19
20
 
20
21
  int main(int argc, char** argv) {
22
+ ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
21
23
  return ROCKSDB_NAMESPACE::db_stress_tool(argc, argv);
22
24
  }
23
25
  #endif // GFLAGS
@@ -346,5 +346,76 @@ std::shared_ptr<FileChecksumGenFactory> GetFileChecksumImpl(
346
346
  return std::make_shared<DbStressChecksumGenFactory>(internal_name);
347
347
  }
348
348
 
349
+ Status DeleteFilesInDirectory(const std::string& dirname) {
350
+ std::vector<std::string> filenames;
351
+ Status s = Env::Default()->GetChildren(dirname, &filenames);
352
+ for (size_t i = 0; s.ok() && i < filenames.size(); ++i) {
353
+ s = Env::Default()->DeleteFile(dirname + "/" + filenames[i]);
354
+ }
355
+ return s;
356
+ }
357
+
358
+ Status SaveFilesInDirectory(const std::string& src_dirname,
359
+ const std::string& dst_dirname) {
360
+ std::vector<std::string> filenames;
361
+ Status s = Env::Default()->GetChildren(src_dirname, &filenames);
362
+ for (size_t i = 0; s.ok() && i < filenames.size(); ++i) {
363
+ bool is_dir = false;
364
+ s = Env::Default()->IsDirectory(src_dirname + "/" + filenames[i], &is_dir);
365
+ if (s.ok()) {
366
+ if (is_dir) {
367
+ continue;
368
+ }
369
+ s = Env::Default()->LinkFile(src_dirname + "/" + filenames[i],
370
+ dst_dirname + "/" + filenames[i]);
371
+ }
372
+ }
373
+ return s;
374
+ }
375
+
376
+ Status InitUnverifiedSubdir(const std::string& dirname) {
377
+ Status s = Env::Default()->FileExists(dirname);
378
+ if (s.IsNotFound()) {
379
+ return Status::OK();
380
+ }
381
+
382
+ const std::string kUnverifiedDirname = dirname + "/unverified";
383
+ if (s.ok()) {
384
+ s = Env::Default()->CreateDirIfMissing(kUnverifiedDirname);
385
+ }
386
+ if (s.ok()) {
387
+ // It might already exist with some stale contents. Delete any such
388
+ // contents.
389
+ s = DeleteFilesInDirectory(kUnverifiedDirname);
390
+ }
391
+ if (s.ok()) {
392
+ s = SaveFilesInDirectory(dirname, kUnverifiedDirname);
393
+ }
394
+ return s;
395
+ }
396
+
397
+ Status DestroyUnverifiedSubdir(const std::string& dirname) {
398
+ Status s = Env::Default()->FileExists(dirname);
399
+ if (s.IsNotFound()) {
400
+ return Status::OK();
401
+ }
402
+
403
+ const std::string kUnverifiedDirname = dirname + "/unverified";
404
+ if (s.ok()) {
405
+ s = Env::Default()->FileExists(kUnverifiedDirname);
406
+ }
407
+ if (s.IsNotFound()) {
408
+ return Status::OK();
409
+ }
410
+
411
+ if (s.ok()) {
412
+ s = DeleteFilesInDirectory(kUnverifiedDirname);
413
+ }
414
+ if (s.ok()) {
415
+ s = Env::Default()->DeleteDir(kUnverifiedDirname);
416
+ }
417
+ return s;
418
+ }
419
+
349
420
  } // namespace ROCKSDB_NAMESPACE
350
421
  #endif // GFLAGS
@@ -312,6 +312,14 @@ DECLARE_bool(allow_data_in_errors);
312
312
  DECLARE_bool(enable_tiered_storage); // set last_level_temperature
313
313
  DECLARE_int64(preclude_last_level_data_seconds);
314
314
 
315
+ DECLARE_int32(verify_iterator_with_expected_state_one_in);
316
+ DECLARE_bool(preserve_unverified_changes);
317
+
318
+ DECLARE_uint64(readahead_size);
319
+ DECLARE_uint64(initial_auto_readahead_size);
320
+ DECLARE_uint64(max_auto_readahead_size);
321
+ DECLARE_uint64(num_file_reads_for_auto_readahead);
322
+
315
323
  constexpr long KB = 1024;
316
324
  constexpr int kRandomValueMaxFactor = 3;
317
325
  constexpr int kValueMaxLen = 100;
@@ -624,5 +632,11 @@ extern std::string GetNowNanos();
624
632
 
625
633
  std::shared_ptr<FileChecksumGenFactory> GetFileChecksumImpl(
626
634
  const std::string& name);
635
+
636
+ Status DeleteFilesInDirectory(const std::string& dirname);
637
+ Status SaveFilesInDirectory(const std::string& src_dirname,
638
+ const std::string& dst_dirname);
639
+ Status DestroyUnverifiedSubdir(const std::string& dirname);
640
+ Status InitUnverifiedSubdir(const std::string& dirname);
627
641
  } // namespace ROCKSDB_NAMESPACE
628
642
  #endif // GFLAGS
@@ -58,7 +58,21 @@ void ThreadBody(void* v) {
58
58
 
59
59
  bool RunStressTest(StressTest* stress) {
60
60
  SystemClock* clock = db_stress_env->GetSystemClock().get();
61
+
61
62
  SharedState shared(db_stress_env, stress);
63
+
64
+ if (shared.ShouldVerifyAtBeginning() && FLAGS_preserve_unverified_changes) {
65
+ Status s = InitUnverifiedSubdir(FLAGS_db);
66
+ if (s.ok() && !FLAGS_expected_values_dir.empty()) {
67
+ s = InitUnverifiedSubdir(FLAGS_expected_values_dir);
68
+ }
69
+ if (!s.ok()) {
70
+ fprintf(stderr, "Failed to setup unverified state dir: %s\n",
71
+ s.ToString().c_str());
72
+ exit(1);
73
+ }
74
+ }
75
+
62
76
  stress->InitDb(&shared);
63
77
  stress->FinishInitDb(&shared);
64
78
 
@@ -115,6 +129,15 @@ bool RunStressTest(StressTest* stress) {
115
129
  fprintf(stderr, "Crash-recovery verification failed :(\n");
116
130
  } else {
117
131
  fprintf(stdout, "Crash-recovery verification passed :)\n");
132
+ Status s = DestroyUnverifiedSubdir(FLAGS_db);
133
+ if (s.ok() && !FLAGS_expected_values_dir.empty()) {
134
+ s = DestroyUnverifiedSubdir(FLAGS_expected_values_dir);
135
+ }
136
+ if (!s.ok()) {
137
+ fprintf(stderr, "Failed to cleanup unverified state dir: %s\n",
138
+ s.ToString().c_str());
139
+ exit(1);
140
+ }
118
141
  }
119
142
  }
120
143
 
@@ -922,7 +922,9 @@ DEFINE_bool(sync_fault_injection, false,
922
922
 
923
923
  DEFINE_bool(best_efforts_recovery, false,
924
924
  "If true, use best efforts recovery.");
925
- DEFINE_bool(skip_verifydb, false, "If true, skip VerifyDb() calls.");
925
+ DEFINE_bool(skip_verifydb, false,
926
+ "If true, skip VerifyDb() calls and Get()/Iterator verifications"
927
+ "against expected state.");
926
928
 
927
929
  DEFINE_bool(enable_compaction_filter, false,
928
930
  "If true, configures a compaction filter that returns a kRemove "
@@ -1027,4 +1029,27 @@ DEFINE_bool(allow_data_in_errors,
1027
1029
  ROCKSDB_NAMESPACE::Options().allow_data_in_errors,
1028
1030
  "If true, allow logging data, e.g. key, value in LOG files.");
1029
1031
 
1032
+ DEFINE_int32(verify_iterator_with_expected_state_one_in, 0,
1033
+ "If non-zero, when TestIterate() is to be called, there is a "
1034
+ "1/verify_iterator_with_expected_state_one_in "
1035
+ "chance that the iterator is verified against the expected state "
1036
+ "file, instead of comparing keys between two iterators.");
1037
+
1038
+ DEFINE_uint64(readahead_size, 0, "Iterator readahead size");
1039
+ DEFINE_uint64(initial_auto_readahead_size, 0,
1040
+ "Initial auto readahead size for prefetching during Iteration");
1041
+ DEFINE_uint64(max_auto_readahead_size, 0,
1042
+ "Max auto readahead size for prefetching during Iteration");
1043
+ DEFINE_uint64(
1044
+ num_file_reads_for_auto_readahead, 0,
1045
+ "Num of sequential reads to enable auto prefetching during Iteration");
1046
+
1047
+ DEFINE_bool(
1048
+ preserve_unverified_changes, false,
1049
+ "DB files of the current run will all be preserved in `FLAGS_db`. DB files "
1050
+ "from the last run will be preserved in `FLAGS_db/unverified` until the "
1051
+ "first verification succeeds. Expected state files from the last run will "
1052
+ "be preserved similarly under `FLAGS_expected_values_dir/unverified` when "
1053
+ "`--expected_values_dir` is nonempty.");
1054
+
1030
1055
  #endif // GFLAGS