@nxtedition/rocksdb 7.1.14 → 7.1.16

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
@@ -20,7 +20,7 @@ namespace ROCKSDB_NAMESPACE {
20
20
  class DBOptionChangeMigrationTests
21
21
  : public DBTestBase,
22
22
  public testing::WithParamInterface<
23
- std::tuple<int, int, bool, int, int, bool>> {
23
+ std::tuple<int, int, bool, int, int, bool, uint64_t>> {
24
24
  public:
25
25
  DBOptionChangeMigrationTests()
26
26
  : DBTestBase("db_option_change_migration_test", /*env_do_fsync=*/true) {
@@ -31,6 +31,7 @@ class DBOptionChangeMigrationTests
31
31
  level2_ = std::get<3>(GetParam());
32
32
  compaction_style2_ = std::get<4>(GetParam());
33
33
  is_dynamic2_ = std::get<5>(GetParam());
34
+ fifo_max_table_files_size_ = std::get<6>(GetParam());
34
35
  }
35
36
 
36
37
  // Required if inheriting from testing::WithParamInterface<>
@@ -44,6 +45,8 @@ class DBOptionChangeMigrationTests
44
45
  int level2_;
45
46
  int compaction_style2_;
46
47
  bool is_dynamic2_;
48
+
49
+ uint64_t fifo_max_table_files_size_;
47
50
  };
48
51
 
49
52
  #ifndef ROCKSDB_LITE
@@ -97,6 +100,10 @@ TEST_P(DBOptionChangeMigrationTests, Migrate1) {
97
100
  if (new_options.compaction_style == CompactionStyle::kCompactionStyleFIFO) {
98
101
  new_options.max_open_files = -1;
99
102
  }
103
+ if (fifo_max_table_files_size_ != 0) {
104
+ new_options.compaction_options_fifo.max_table_files_size =
105
+ fifo_max_table_files_size_;
106
+ }
100
107
  new_options.target_file_size_base = 256 * 1024;
101
108
  new_options.num_levels = level2_;
102
109
  new_options.max_bytes_for_level_base = 150 * 1024;
@@ -172,6 +179,10 @@ TEST_P(DBOptionChangeMigrationTests, Migrate2) {
172
179
  if (new_options.compaction_style == CompactionStyle::kCompactionStyleFIFO) {
173
180
  new_options.max_open_files = -1;
174
181
  }
182
+ if (fifo_max_table_files_size_ != 0) {
183
+ new_options.compaction_options_fifo.max_table_files_size =
184
+ fifo_max_table_files_size_;
185
+ }
175
186
  new_options.target_file_size_base = 256 * 1024;
176
187
  new_options.num_levels = level1_;
177
188
  new_options.max_bytes_for_level_base = 150 * 1024;
@@ -251,6 +262,10 @@ TEST_P(DBOptionChangeMigrationTests, Migrate3) {
251
262
  if (new_options.compaction_style == CompactionStyle::kCompactionStyleFIFO) {
252
263
  new_options.max_open_files = -1;
253
264
  }
265
+ if (fifo_max_table_files_size_ != 0) {
266
+ new_options.compaction_options_fifo.max_table_files_size =
267
+ fifo_max_table_files_size_;
268
+ }
254
269
  new_options.target_file_size_base = 256 * 1024;
255
270
  new_options.num_levels = level2_;
256
271
  new_options.max_bytes_for_level_base = 150 * 1024;
@@ -332,6 +347,10 @@ TEST_P(DBOptionChangeMigrationTests, Migrate4) {
332
347
  if (new_options.compaction_style == CompactionStyle::kCompactionStyleFIFO) {
333
348
  new_options.max_open_files = -1;
334
349
  }
350
+ if (fifo_max_table_files_size_ != 0) {
351
+ new_options.compaction_options_fifo.max_table_files_size =
352
+ fifo_max_table_files_size_;
353
+ }
335
354
  new_options.target_file_size_base = 256 * 1024;
336
355
  new_options.num_levels = level1_;
337
356
  new_options.max_bytes_for_level_base = 150 * 1024;
@@ -357,21 +376,100 @@ TEST_P(DBOptionChangeMigrationTests, Migrate4) {
357
376
 
358
377
  INSTANTIATE_TEST_CASE_P(
359
378
  DBOptionChangeMigrationTests, DBOptionChangeMigrationTests,
360
- ::testing::Values(std::make_tuple(3, 0, false, 4, 0, false),
361
- std::make_tuple(3, 0, true, 4, 0, true),
362
- std::make_tuple(3, 0, true, 4, 0, false),
363
- std::make_tuple(3, 0, false, 4, 0, true),
364
- std::make_tuple(3, 1, false, 4, 1, false),
365
- std::make_tuple(1, 1, false, 4, 1, false),
366
- std::make_tuple(3, 0, false, 4, 1, false),
367
- std::make_tuple(3, 0, false, 1, 1, false),
368
- std::make_tuple(3, 0, true, 4, 1, false),
369
- std::make_tuple(3, 0, true, 1, 1, false),
370
- std::make_tuple(1, 1, false, 4, 0, false),
371
- std::make_tuple(4, 0, false, 1, 2, false),
372
- std::make_tuple(3, 0, true, 2, 2, false),
373
- std::make_tuple(3, 1, false, 3, 2, false),
374
- std::make_tuple(1, 1, false, 4, 2, false)));
379
+ ::testing::Values(
380
+ std::make_tuple(3 /* old num_levels */, 0 /* old compaction style */,
381
+ false /* is dynamic leveling in old option */,
382
+ 4 /* old num_levels */, 0 /* new compaction style */,
383
+ false /* is dynamic leveling in new option */,
384
+ 0 /*fifo max_table_files_size*/),
385
+ std::make_tuple(3 /* old num_levels */, 0 /* old compaction style */,
386
+ true /* is dynamic leveling in old option */,
387
+ 4 /* old num_levels */, 0 /* new compaction style */,
388
+ true /* is dynamic leveling in new option */,
389
+ 0 /*fifo max_table_files_size*/),
390
+ std::make_tuple(3 /* old num_levels */, 0 /* old compaction style */,
391
+ true /* is dynamic leveling in old option */,
392
+ 4 /* old num_levels */, 0 /* new compaction style */,
393
+ false, 0 /*fifo max_table_files_size*/),
394
+ std::make_tuple(3 /* old num_levels */, 0 /* old compaction style */,
395
+ false /* is dynamic leveling in old option */,
396
+ 4 /* old num_levels */, 0 /* new compaction style */,
397
+ true /* is dynamic leveling in new option */,
398
+ 0 /*fifo max_table_files_size*/),
399
+ std::make_tuple(3 /* old num_levels */, 1 /* old compaction style */,
400
+ false /* is dynamic leveling in old option */,
401
+ 4 /* old num_levels */, 1 /* new compaction style */,
402
+ false /* is dynamic leveling in new option */,
403
+ 0 /*fifo max_table_files_size*/),
404
+ std::make_tuple(1 /* old num_levels */, 1 /* old compaction style */,
405
+ false /* is dynamic leveling in old option */,
406
+ 4 /* old num_levels */, 1 /* new compaction style */,
407
+ false /* is dynamic leveling in new option */,
408
+ 0 /*fifo max_table_files_size*/),
409
+ std::make_tuple(3 /* old num_levels */, 0 /* old compaction style */,
410
+ false /* is dynamic leveling in old option */,
411
+ 4 /* old num_levels */, 1 /* new compaction style */,
412
+ false /* is dynamic leveling in new option */,
413
+ 0 /*fifo max_table_files_size*/),
414
+ std::make_tuple(3 /* old num_levels */, 0 /* old compaction style */,
415
+ false /* is dynamic leveling in old option */,
416
+ 1 /* old num_levels */, 1 /* new compaction style */,
417
+ false /* is dynamic leveling in new option */,
418
+ 0 /*fifo max_table_files_size*/),
419
+ std::make_tuple(3 /* old num_levels */, 0 /* old compaction style */,
420
+ true /* is dynamic leveling in old option */,
421
+ 4 /* old num_levels */, 1 /* new compaction style */,
422
+ false /* is dynamic leveling in new option */,
423
+ 0 /*fifo max_table_files_size*/),
424
+ std::make_tuple(3 /* old num_levels */, 0 /* old compaction style */,
425
+ true /* is dynamic leveling in old option */,
426
+ 1 /* old num_levels */, 1 /* new compaction style */,
427
+ false /* is dynamic leveling in new option */,
428
+ 0 /*fifo max_table_files_size*/),
429
+ std::make_tuple(1 /* old num_levels */, 1 /* old compaction style */,
430
+ false /* is dynamic leveling in old option */,
431
+ 4 /* old num_levels */, 0 /* new compaction style */,
432
+ false /* is dynamic leveling in new option */,
433
+ 0 /*fifo max_table_files_size*/),
434
+ std::make_tuple(4 /* old num_levels */, 0 /* old compaction style */,
435
+ false /* is dynamic leveling in old option */,
436
+ 1 /* old num_levels */, 2 /* new compaction style */,
437
+ false /* is dynamic leveling in new option */,
438
+ 0 /*fifo max_table_files_size*/),
439
+ std::make_tuple(3 /* old num_levels */, 0 /* old compaction style */,
440
+ true /* is dynamic leveling in old option */,
441
+ 2 /* old num_levels */, 2 /* new compaction style */,
442
+ false /* is dynamic leveling in new option */,
443
+ 0 /*fifo max_table_files_size*/),
444
+ std::make_tuple(3 /* old num_levels */, 1 /* old compaction style */,
445
+ false /* is dynamic leveling in old option */,
446
+ 3 /* old num_levels */, 2 /* new compaction style */,
447
+ false /* is dynamic leveling in new option */,
448
+ 0 /*fifo max_table_files_size*/),
449
+ std::make_tuple(1 /* old num_levels */, 1 /* old compaction style */,
450
+ false /* is dynamic leveling in old option */,
451
+ 4 /* old num_levels */, 2 /* new compaction style */,
452
+ false /* is dynamic leveling in new option */, 0),
453
+ std::make_tuple(4 /* old num_levels */, 0 /* old compaction style */,
454
+ false /* is dynamic leveling in old option */,
455
+ 1 /* old num_levels */, 2 /* new compaction style */,
456
+ false /* is dynamic leveling in new option */,
457
+ 5 * 1024 * 1024 /*fifo max_table_files_size*/),
458
+ std::make_tuple(3 /* old num_levels */, 0 /* old compaction style */,
459
+ true /* is dynamic leveling in old option */,
460
+ 2 /* old num_levels */, 2 /* new compaction style */,
461
+ false /* is dynamic leveling in new option */,
462
+ 5 * 1024 * 1024 /*fifo max_table_files_size*/),
463
+ std::make_tuple(3 /* old num_levels */, 1 /* old compaction style */,
464
+ false /* is dynamic leveling in old option */,
465
+ 3 /* old num_levels */, 2 /* new compaction style */,
466
+ false /* is dynamic leveling in new option */,
467
+ 5 * 1024 * 1024 /*fifo max_table_files_size*/),
468
+ std::make_tuple(1 /* old num_levels */, 1 /* old compaction style */,
469
+ false /* is dynamic leveling in old option */,
470
+ 4 /* old num_levels */, 2 /* new compaction style */,
471
+ false /* is dynamic leveling in new option */,
472
+ 5 * 1024 * 1024 /*fifo max_table_files_size*/)));
375
473
 
376
474
  class DBOptionChangeMigrationTest : public DBTestBase {
377
475
  public:
@@ -140,7 +140,7 @@ TEST_F(PersistentCacheTierTest, DISABLED_BlockCacheInsertWithFileCreateError) {
140
140
  // Travis is unable to handle the normal version of the tests running out of
141
141
  // fds, out of space and timeouts. This is an easier version of the test
142
142
  // specifically written for Travis
143
- TEST_F(PersistentCacheTierTest, BasicTest) {
143
+ TEST_F(PersistentCacheTierTest, DISABLED_BasicTest) {
144
144
  cache_ = std::make_shared<VolatileCacheTier>();
145
145
  RunInsertTest(/*nthreads=*/1, /*max_keys=*/1024);
146
146
 
@@ -166,6 +166,65 @@ TEST_P(OptimisticTransactionTest, WriteConflictTest2) {
166
166
  delete txn;
167
167
  }
168
168
 
169
+ TEST_P(OptimisticTransactionTest, WriteConflictTest3) {
170
+ ASSERT_OK(txn_db->Put(WriteOptions(), "foo", "bar"));
171
+
172
+ Transaction* txn = txn_db->BeginTransaction(WriteOptions());
173
+ ASSERT_NE(txn, nullptr);
174
+
175
+ std::string value;
176
+ ASSERT_OK(txn->GetForUpdate(ReadOptions(), "foo", &value));
177
+ ASSERT_EQ(value, "bar");
178
+ ASSERT_OK(txn->Merge("foo", "bar3"));
179
+
180
+ // Merge outside of a transaction should conflict with the previous merge
181
+ ASSERT_OK(txn_db->Merge(WriteOptions(), "foo", "bar2"));
182
+ ASSERT_OK(txn_db->Get(ReadOptions(), "foo", &value));
183
+ ASSERT_EQ(value, "bar2");
184
+
185
+ ASSERT_EQ(1, txn->GetNumKeys());
186
+
187
+ Status s = txn->Commit();
188
+ EXPECT_TRUE(s.IsBusy()); // Txn should not commit
189
+
190
+ // Verify that transaction did not write anything
191
+ ASSERT_OK(txn_db->Get(ReadOptions(), "foo", &value));
192
+ ASSERT_EQ(value, "bar2");
193
+
194
+ delete txn;
195
+ }
196
+
197
+ TEST_P(OptimisticTransactionTest, WriteConflict4) {
198
+ ASSERT_OK(txn_db->Put(WriteOptions(), "foo", "bar"));
199
+
200
+ Transaction* txn = txn_db->BeginTransaction(WriteOptions());
201
+ ASSERT_NE(txn, nullptr);
202
+
203
+ std::string value;
204
+ ASSERT_OK(txn->GetForUpdate(ReadOptions(), "foo", &value));
205
+ ASSERT_EQ(value, "bar");
206
+ ASSERT_OK(txn->Merge("foo", "bar3"));
207
+
208
+ // Range delete outside of a transaction should conflict with the previous
209
+ // merge inside txn
210
+ auto* dbimpl = static_cast_with_check<DBImpl>(txn_db->GetRootDB());
211
+ ColumnFamilyHandle* default_cf = dbimpl->DefaultColumnFamily();
212
+ ASSERT_OK(dbimpl->DeleteRange(WriteOptions(), default_cf, "foo", "foo1"));
213
+ Status s = txn_db->Get(ReadOptions(), "foo", &value);
214
+ ASSERT_TRUE(s.IsNotFound());
215
+
216
+ ASSERT_EQ(1, txn->GetNumKeys());
217
+
218
+ s = txn->Commit();
219
+ EXPECT_TRUE(s.IsBusy()); // Txn should not commit
220
+
221
+ // Verify that transaction did not write anything
222
+ s = txn_db->Get(ReadOptions(), "foo", &value);
223
+ ASSERT_TRUE(s.IsNotFound());
224
+
225
+ delete txn;
226
+ }
227
+
169
228
  TEST_P(OptimisticTransactionTest, ReadConflictTest) {
170
229
  WriteOptions write_options;
171
230
  ReadOptions read_options, snapshot_read_options;
@@ -100,6 +100,9 @@ void PessimisticTransaction::Initialize(const TransactionOptions& txn_options) {
100
100
  use_only_the_last_commit_time_batch_for_recovery_ =
101
101
  txn_options.use_only_the_last_commit_time_batch_for_recovery;
102
102
  skip_prepare_ = txn_options.skip_prepare;
103
+
104
+ read_timestamp_ = kMaxTxnTimestamp;
105
+ commit_timestamp_ = kMaxTxnTimestamp;
103
106
  }
104
107
 
105
108
  PessimisticTransaction::~PessimisticTransaction() {
@@ -115,6 +115,45 @@ TEST_P(TransactionTest, WithoutCommitTs) {
115
115
  ASSERT_TRUE(s.IsInvalidArgument());
116
116
  }
117
117
 
118
+ TEST_P(TransactionTest, ReuseExistingTxn) {
119
+ Transaction* txn = db->BeginTransaction(WriteOptions(), TransactionOptions());
120
+ assert(txn);
121
+ ASSERT_OK(txn->SetName("txn0"));
122
+ ASSERT_OK(txn->Put("a", "v1"));
123
+ ASSERT_OK(txn->Prepare());
124
+
125
+ auto notifier = std::make_shared<TsCheckingTxnNotifier>();
126
+ std::shared_ptr<const Snapshot> snapshot1;
127
+ Status s =
128
+ txn->CommitAndTryCreateSnapshot(notifier, /*commit_ts=*/100, &snapshot1);
129
+ ASSERT_OK(s);
130
+ ASSERT_EQ(100, snapshot1->GetTimestamp());
131
+
132
+ Transaction* txn1 =
133
+ db->BeginTransaction(WriteOptions(), TransactionOptions(), txn);
134
+ assert(txn1 == txn);
135
+ ASSERT_OK(txn1->SetName("txn1"));
136
+ ASSERT_OK(txn->Put("a", "v2"));
137
+ ASSERT_OK(txn->Prepare());
138
+ std::shared_ptr<const Snapshot> snapshot2;
139
+ s = txn->CommitAndTryCreateSnapshot(notifier, /*commit_ts=*/110, &snapshot2);
140
+ ASSERT_OK(s);
141
+ ASSERT_EQ(110, snapshot2->GetTimestamp());
142
+ delete txn;
143
+
144
+ {
145
+ std::string value;
146
+ ReadOptions read_opts;
147
+ read_opts.snapshot = snapshot1.get();
148
+ ASSERT_OK(db->Get(read_opts, "a", &value));
149
+ ASSERT_EQ("v1", value);
150
+
151
+ read_opts.snapshot = snapshot2.get();
152
+ ASSERT_OK(db->Get(read_opts, "a", &value));
153
+ ASSERT_EQ("v2", value);
154
+ }
155
+ }
156
+
118
157
  TEST_P(TransactionTest, CreateSnapshotWhenCommit) {
119
158
  std::unique_ptr<Transaction> txn(
120
159
  db->BeginTransaction(WriteOptions(), TransactionOptions()));
@@ -234,7 +234,6 @@
234
234
  "rocksdb/db/merge_helper.cc",
235
235
  "rocksdb/db/merge_operator.cc",
236
236
  "rocksdb/db/output_validator.cc",
237
- "rocksdb/db/periodic_work_scheduler.cc",
238
237
  "rocksdb/db/range_del_aggregator.cc",
239
238
  "rocksdb/db/range_tombstone_fragmenter.cc",
240
239
  "rocksdb/db/repair.cc",
package/index.js CHANGED
@@ -360,7 +360,7 @@ class RocksLevel extends AbstractLevel {
360
360
  const buffer = new Readable({
361
361
  signal: ac.signal,
362
362
  objectMode: true,
363
- readableHighWaterMark: 1024,
363
+ readableHighWaterMark: 8192,
364
364
  construct (callback) {
365
365
  this._next = (update) => {
366
366
  if (!this.push(update)) {
@@ -389,7 +389,7 @@ class RocksLevel extends AbstractLevel {
389
389
  ...options,
390
390
  signal: ac.signal,
391
391
  // HACK: https://github.com/facebook/rocksdb/issues/10476
392
- since: Math.max(0, options.since - 2048)
392
+ since: Math.max(0, options.since - 8192)
393
393
  })) {
394
394
  if (first) {
395
395
  if (update.sequence > since) {
@@ -398,10 +398,8 @@ class RocksLevel extends AbstractLevel {
398
398
  first = false
399
399
  }
400
400
 
401
- if (update.sequence >= since) {
402
- yield update
403
- since = update.sequence + update.count
404
- }
401
+ yield update
402
+ since = update.sequence + update.count
405
403
  }
406
404
  }
407
405
  } catch (err) {
@@ -422,10 +420,8 @@ class RocksLevel extends AbstractLevel {
422
420
  }
423
421
  first = false
424
422
  }
425
- if (update.sequence >= since) {
426
- yield update
427
- since = update.sequence + update.count
428
- }
423
+ yield update
424
+ since = update.sequence + update.count
429
425
  }
430
426
  }
431
427
  } finally {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nxtedition/rocksdb",
3
- "version": "7.1.14",
3
+ "version": "7.1.16",
4
4
  "description": "A low-level Node.js RocksDB binding",
5
5
  "license": "MIT",
6
6
  "main": "index.js",
Binary file
@@ -1,168 +0,0 @@
1
- // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
2
- // This source code is licensed under both the GPLv2 (found in the
3
- // COPYING file in the root directory) and Apache 2.0 License
4
- // (found in the LICENSE.Apache file in the root directory).
5
-
6
- #include "db/periodic_work_scheduler.h"
7
-
8
- #include "db/db_impl/db_impl.h"
9
- #include "rocksdb/system_clock.h"
10
-
11
- #ifndef ROCKSDB_LITE
12
- namespace ROCKSDB_NAMESPACE {
13
-
14
- const std::string PeriodicWorkTaskNames::kDumpStats = "dump_st";
15
- const std::string PeriodicWorkTaskNames::kPersistStats = "pst_st";
16
- const std::string PeriodicWorkTaskNames::kFlushInfoLog = "flush_info_log";
17
- const std::string PeriodicWorkTaskNames::kRecordSeqnoTime = "record_seq_time";
18
-
19
- PeriodicWorkScheduler::PeriodicWorkScheduler(
20
- const std::shared_ptr<SystemClock>& clock) {
21
- timer = std::unique_ptr<Timer>(new Timer(clock.get()));
22
- }
23
-
24
- Status PeriodicWorkScheduler::Register(DBImpl* dbi,
25
- unsigned int stats_dump_period_sec,
26
- unsigned int stats_persist_period_sec) {
27
- MutexLock l(&timer_mu_);
28
- static std::atomic<uint64_t> initial_delay(0);
29
- timer->Start();
30
- if (stats_dump_period_sec > 0) {
31
- bool succeeded = timer->Add(
32
- [dbi]() { dbi->DumpStats(); },
33
- GetTaskName(dbi, PeriodicWorkTaskNames::kDumpStats),
34
- initial_delay.fetch_add(1) %
35
- static_cast<uint64_t>(stats_dump_period_sec) * kMicrosInSecond,
36
- static_cast<uint64_t>(stats_dump_period_sec) * kMicrosInSecond);
37
- if (!succeeded) {
38
- return Status::Aborted("Unable to add periodic task DumpStats");
39
- }
40
- }
41
- if (stats_persist_period_sec > 0) {
42
- bool succeeded = timer->Add(
43
- [dbi]() { dbi->PersistStats(); },
44
- GetTaskName(dbi, PeriodicWorkTaskNames::kPersistStats),
45
- initial_delay.fetch_add(1) %
46
- static_cast<uint64_t>(stats_persist_period_sec) * kMicrosInSecond,
47
- static_cast<uint64_t>(stats_persist_period_sec) * kMicrosInSecond);
48
- if (!succeeded) {
49
- return Status::Aborted("Unable to add periodic task PersistStats");
50
- }
51
- }
52
- bool succeeded =
53
- timer->Add([dbi]() { dbi->FlushInfoLog(); },
54
- GetTaskName(dbi, PeriodicWorkTaskNames::kFlushInfoLog),
55
- initial_delay.fetch_add(1) % kDefaultFlushInfoLogPeriodSec *
56
- kMicrosInSecond,
57
- kDefaultFlushInfoLogPeriodSec * kMicrosInSecond);
58
- if (!succeeded) {
59
- return Status::Aborted("Unable to add periodic task FlushInfoLog");
60
- }
61
- return Status::OK();
62
- }
63
-
64
- Status PeriodicWorkScheduler::RegisterRecordSeqnoTimeWorker(
65
- DBImpl* dbi, uint64_t record_cadence_sec) {
66
- MutexLock l(&timer_mu_);
67
- timer->Start();
68
- static std::atomic_uint64_t initial_delay(0);
69
- bool succeeded = timer->Add(
70
- [dbi]() { dbi->RecordSeqnoToTimeMapping(); },
71
- GetTaskName(dbi, PeriodicWorkTaskNames::kRecordSeqnoTime),
72
- initial_delay.fetch_add(1) % record_cadence_sec * kMicrosInSecond,
73
- record_cadence_sec * kMicrosInSecond);
74
- if (!succeeded) {
75
- return Status::NotSupported(
76
- "Updating seqno to time worker cadence is not supported yet");
77
- }
78
- return Status::OK();
79
- }
80
-
81
- void PeriodicWorkScheduler::UnregisterRecordSeqnoTimeWorker(DBImpl* dbi) {
82
- MutexLock l(&timer_mu_);
83
- timer->Cancel(GetTaskName(dbi, PeriodicWorkTaskNames::kRecordSeqnoTime));
84
- if (!timer->HasPendingTask()) {
85
- timer->Shutdown();
86
- }
87
- }
88
-
89
- void PeriodicWorkScheduler::Unregister(DBImpl* dbi) {
90
- MutexLock l(&timer_mu_);
91
- timer->Cancel(GetTaskName(dbi, PeriodicWorkTaskNames::kDumpStats));
92
- timer->Cancel(GetTaskName(dbi, PeriodicWorkTaskNames::kPersistStats));
93
- timer->Cancel(GetTaskName(dbi, PeriodicWorkTaskNames::kFlushInfoLog));
94
- if (!timer->HasPendingTask()) {
95
- timer->Shutdown();
96
- }
97
- }
98
-
99
- PeriodicWorkScheduler* PeriodicWorkScheduler::Default() {
100
- // Always use the default SystemClock for the scheduler, as we only use the
101
- // NowMicros which is the same for all clocks. The Env could only be
102
- // overridden in test.
103
- static PeriodicWorkScheduler scheduler(SystemClock::Default());
104
- return &scheduler;
105
- }
106
-
107
- std::string PeriodicWorkScheduler::GetTaskName(
108
- const DBImpl* dbi, const std::string& func_name) const {
109
- std::string db_session_id;
110
- // TODO: Should this error be ignored?
111
- dbi->GetDbSessionId(db_session_id).PermitUncheckedError();
112
- return db_session_id + ":" + func_name;
113
- }
114
-
115
- #ifndef NDEBUG
116
-
117
- // Get the static scheduler. For a new SystemClock, it needs to re-create the
118
- // internal timer, so only re-create it when there's no running task. Otherwise,
119
- // return the existing scheduler. Which means if the unittest needs to update
120
- // MockClock, Close all db instances and then re-open them.
121
- PeriodicWorkTestScheduler* PeriodicWorkTestScheduler::Default(
122
- const std::shared_ptr<SystemClock>& clock) {
123
- static PeriodicWorkTestScheduler scheduler(clock);
124
- static port::Mutex mutex;
125
- {
126
- MutexLock l(&mutex);
127
- if (scheduler.timer.get() != nullptr &&
128
- scheduler.timer->TEST_GetPendingTaskNum() == 0) {
129
- {
130
- MutexLock timer_mu_guard(&scheduler.timer_mu_);
131
- scheduler.timer->Shutdown();
132
- }
133
- scheduler.timer.reset(new Timer(clock.get()));
134
- }
135
- }
136
- return &scheduler;
137
- }
138
-
139
- void PeriodicWorkTestScheduler::TEST_WaitForRun(
140
- std::function<void()> callback) const {
141
- if (timer != nullptr) {
142
- timer->TEST_WaitForRun(callback);
143
- }
144
- }
145
-
146
- size_t PeriodicWorkTestScheduler::TEST_GetValidTaskNum() const {
147
- if (timer != nullptr) {
148
- return timer->TEST_GetPendingTaskNum();
149
- }
150
- return 0;
151
- }
152
-
153
- bool PeriodicWorkTestScheduler::TEST_HasValidTask(
154
- const DBImpl* dbi, const std::string& func_name) const {
155
- if (timer == nullptr) {
156
- return false;
157
- }
158
- return timer->TEST_HasVaildTask(GetTaskName(dbi, func_name));
159
- }
160
-
161
- PeriodicWorkTestScheduler::PeriodicWorkTestScheduler(
162
- const std::shared_ptr<SystemClock>& clock)
163
- : PeriodicWorkScheduler(clock) {}
164
-
165
- #endif // !NDEBUG
166
- } // namespace ROCKSDB_NAMESPACE
167
-
168
- #endif // ROCKSDB_LITE
@@ -1,90 +0,0 @@
1
- // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
2
- // This source code is licensed under both the GPLv2 (found in the
3
- // COPYING file in the root directory) and Apache 2.0 License
4
- // (found in the LICENSE.Apache file in the root directory).
5
-
6
- #pragma once
7
-
8
- #ifndef ROCKSDB_LITE
9
-
10
- #include "db/db_impl/db_impl.h"
11
- #include "util/timer.h"
12
-
13
- namespace ROCKSDB_NAMESPACE {
14
- class SystemClock;
15
-
16
- // PeriodicWorkScheduler is a singleton object, which is scheduling/running
17
- // DumpStats(), PersistStats(), and FlushInfoLog() for all DB instances. All DB
18
- // instances use the same object from `Default()`.
19
- //
20
- // Internally, it uses a single threaded timer object to run the periodic work
21
- // functions. Timer thread will always be started since the info log flushing
22
- // cannot be disabled.
23
- class PeriodicWorkScheduler {
24
- public:
25
- static PeriodicWorkScheduler* Default();
26
-
27
- PeriodicWorkScheduler() = delete;
28
- PeriodicWorkScheduler(const PeriodicWorkScheduler&) = delete;
29
- PeriodicWorkScheduler(PeriodicWorkScheduler&&) = delete;
30
- PeriodicWorkScheduler& operator=(const PeriodicWorkScheduler&) = delete;
31
- PeriodicWorkScheduler& operator=(PeriodicWorkScheduler&&) = delete;
32
-
33
- Status Register(DBImpl* dbi, unsigned int stats_dump_period_sec,
34
- unsigned int stats_persist_period_sec);
35
- Status RegisterRecordSeqnoTimeWorker(DBImpl* dbi, uint64_t record_cadence);
36
-
37
- void Unregister(DBImpl* dbi);
38
- void UnregisterRecordSeqnoTimeWorker(DBImpl* dbi);
39
-
40
- // Periodically flush info log out of application buffer at a low frequency.
41
- // This improves debuggability in case of RocksDB hanging since it ensures the
42
- // log messages leading up to the hang will eventually become visible in the
43
- // log.
44
- static const uint64_t kDefaultFlushInfoLogPeriodSec = 10;
45
-
46
- protected:
47
- std::unique_ptr<Timer> timer;
48
- // `timer_mu_` serves two purposes currently:
49
- // (1) to ensure calls to `Start()` and `Shutdown()` are serialized, as
50
- // they are currently not implemented in a thread-safe way; and
51
- // (2) to ensure the `Timer::Add()`s and `Timer::Start()` run atomically, and
52
- // the `Timer::Cancel()`s and `Timer::Shutdown()` run atomically.
53
- port::Mutex timer_mu_;
54
-
55
- explicit PeriodicWorkScheduler(const std::shared_ptr<SystemClock>& clock);
56
-
57
- // Get the unique task name (prefix with db session id)
58
- std::string GetTaskName(const DBImpl* dbi,
59
- const std::string& func_name) const;
60
- };
61
-
62
- #ifndef NDEBUG
63
- // PeriodicWorkTestScheduler is for unittest, which can specify the SystemClock
64
- // It also contains functions for unittest.
65
- class PeriodicWorkTestScheduler : public PeriodicWorkScheduler {
66
- public:
67
- static PeriodicWorkTestScheduler* Default(
68
- const std::shared_ptr<SystemClock>& clock);
69
-
70
- void TEST_WaitForRun(std::function<void()> callback) const;
71
-
72
- size_t TEST_GetValidTaskNum() const;
73
-
74
- bool TEST_HasValidTask(const DBImpl* dbi, const std::string& func_name) const;
75
-
76
- private:
77
- explicit PeriodicWorkTestScheduler(const std::shared_ptr<SystemClock>& clock);
78
- };
79
- #endif // !NDEBUG
80
-
81
- struct PeriodicWorkTaskNames {
82
- static const std::string kDumpStats;
83
- static const std::string kPersistStats;
84
- static const std::string kFlushInfoLog;
85
- static const std::string kRecordSeqnoTime;
86
- };
87
-
88
- } // namespace ROCKSDB_NAMESPACE
89
-
90
- #endif // ROCKSDB_LITE