@nxtedition/rocksdb 7.0.0-alpha.6 → 7.0.0

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 (207) hide show
  1. package/binding.cc +37 -36
  2. package/deps/rocksdb/rocksdb/CMakeLists.txt +10 -3
  3. package/deps/rocksdb/rocksdb/Makefile +8 -1
  4. package/deps/rocksdb/rocksdb/TARGETS +14 -0
  5. package/deps/rocksdb/rocksdb/cache/cache.cc +50 -2
  6. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +9 -3
  7. package/deps/rocksdb/rocksdb/cache/cache_test.cc +111 -33
  8. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +71 -31
  9. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +31 -30
  10. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +21 -8
  11. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +35 -38
  12. package/deps/rocksdb/rocksdb/cache/lru_cache.h +22 -9
  13. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +48 -0
  14. package/deps/rocksdb/rocksdb/db/blob/db_blob_compaction_test.cc +78 -0
  15. package/deps/rocksdb/rocksdb/db/builder.cc +7 -5
  16. package/deps/rocksdb/rocksdb/db/c.cc +777 -108
  17. package/deps/rocksdb/rocksdb/db/c_test.c +290 -30
  18. package/deps/rocksdb/rocksdb/db/column_family.cc +13 -0
  19. package/deps/rocksdb/rocksdb/db/column_family_test.cc +24 -36
  20. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +18 -4
  21. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +24 -6
  22. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +6 -9
  23. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +38 -40
  24. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +4 -4
  25. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +14 -17
  26. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +3 -5
  27. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +253 -24
  28. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +9 -3
  29. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +3 -2
  30. package/deps/rocksdb/rocksdb/db/corruption_test.cc +67 -10
  31. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +83 -7
  32. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +5 -2
  33. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +68 -0
  34. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +40 -1
  35. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +94 -23
  36. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +17 -4
  37. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +263 -58
  38. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +186 -23
  39. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +43 -14
  40. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +24 -28
  41. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +116 -83
  42. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +13 -5
  43. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +71 -34
  44. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +8 -3
  45. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +72 -33
  46. package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +629 -0
  47. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +438 -10
  48. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +43 -2
  49. package/deps/rocksdb/rocksdb/db/db_test.cc +41 -1
  50. package/deps/rocksdb/rocksdb/db/db_test2.cc +41 -12
  51. package/deps/rocksdb/rocksdb/db/db_test_util.h +1 -0
  52. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +90 -0
  53. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +109 -16
  54. package/deps/rocksdb/rocksdb/db/dbformat.h +1 -1
  55. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +54 -0
  56. package/deps/rocksdb/rocksdb/db/flush_job.cc +3 -3
  57. package/deps/rocksdb/rocksdb/db/log_reader.cc +22 -4
  58. package/deps/rocksdb/rocksdb/db/log_reader.h +4 -0
  59. package/deps/rocksdb/rocksdb/db/memtable.cc +4 -0
  60. package/deps/rocksdb/rocksdb/db/post_memtable_callback.h +25 -0
  61. package/deps/rocksdb/rocksdb/db/repair.cc +1 -1
  62. package/deps/rocksdb/rocksdb/db/repair_test.cc +3 -2
  63. package/deps/rocksdb/rocksdb/db/snapshot_impl.h +65 -2
  64. package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +3 -2
  65. package/deps/rocksdb/rocksdb/db/version_set.cc +52 -0
  66. package/deps/rocksdb/rocksdb/db/version_set.h +57 -43
  67. package/deps/rocksdb/rocksdb/db/wal_manager.cc +14 -4
  68. package/deps/rocksdb/rocksdb/db/wal_manager.h +16 -0
  69. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +141 -0
  70. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +55 -0
  71. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +292 -0
  72. package/deps/rocksdb/rocksdb/db/write_thread.h +6 -1
  73. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +2 -0
  74. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +42 -19
  75. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +28 -0
  76. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +6 -2
  77. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +11 -5
  78. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +18 -12
  79. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +74 -167
  80. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +4 -9
  81. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +16 -9
  82. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +117 -10
  83. package/deps/rocksdb/rocksdb/env/composite_env.cc +7 -0
  84. package/deps/rocksdb/rocksdb/env/env.cc +4 -0
  85. package/deps/rocksdb/rocksdb/env/env_posix.cc +3 -3
  86. package/deps/rocksdb/rocksdb/env/env_test.cc +5 -5
  87. package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +45 -0
  88. package/deps/rocksdb/rocksdb/env/file_system_tracer.h +14 -0
  89. package/deps/rocksdb/rocksdb/env/fs_posix.cc +1 -1
  90. package/deps/rocksdb/rocksdb/env/io_posix.cc +50 -24
  91. package/deps/rocksdb/rocksdb/env/io_posix.h +9 -7
  92. package/deps/rocksdb/rocksdb/env/mock_env.cc +9 -3
  93. package/deps/rocksdb/rocksdb/file/file_util.cc +4 -1
  94. package/deps/rocksdb/rocksdb/file/filename.cc +14 -0
  95. package/deps/rocksdb/rocksdb/file/line_file_reader.cc +9 -4
  96. package/deps/rocksdb/rocksdb/file/line_file_reader.h +3 -2
  97. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +157 -0
  98. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +8 -1
  99. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +68 -32
  100. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +20 -6
  101. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +10 -6
  102. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +4 -2
  103. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +16 -0
  104. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +231 -2
  105. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +4 -2
  106. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +3 -0
  107. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +13 -1
  108. package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +4 -20
  109. package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +1 -1
  110. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +31 -0
  111. package/deps/rocksdb/rocksdb/include/rocksdb/snapshot.h +2 -0
  112. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +4 -20
  113. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +2 -2
  114. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +1 -0
  115. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +1 -0
  116. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +34 -0
  117. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +36 -0
  118. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +74 -0
  119. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +36 -3
  120. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +16 -3
  121. package/deps/rocksdb/rocksdb/logging/env_logger.h +3 -3
  122. package/deps/rocksdb/rocksdb/logging/log_buffer.cc +2 -2
  123. package/deps/rocksdb/rocksdb/logging/log_buffer.h +1 -1
  124. package/deps/rocksdb/rocksdb/logging/posix_logger.h +3 -3
  125. package/deps/rocksdb/rocksdb/memory/arena.cc +0 -1
  126. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +61 -73
  127. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +6 -5
  128. package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +6 -0
  129. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +7 -3
  130. package/deps/rocksdb/rocksdb/options/cf_options.cc +6 -0
  131. package/deps/rocksdb/rocksdb/options/cf_options.h +3 -0
  132. package/deps/rocksdb/rocksdb/options/options.cc +4 -1
  133. package/deps/rocksdb/rocksdb/options/options_helper.cc +1 -0
  134. package/deps/rocksdb/rocksdb/options/options_parser.cc +1 -1
  135. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +1 -0
  136. package/deps/rocksdb/rocksdb/options/options_test.cc +4 -0
  137. package/deps/rocksdb/rocksdb/port/port_posix.h +0 -2
  138. package/deps/rocksdb/rocksdb/port/sys_time.h +27 -11
  139. package/deps/rocksdb/rocksdb/port/win/env_win.cc +1 -1
  140. package/deps/rocksdb/rocksdb/port/win/io_win.cc +16 -0
  141. package/deps/rocksdb/rocksdb/port/win/io_win.h +11 -2
  142. package/deps/rocksdb/rocksdb/port/win/port_win.cc +1 -1
  143. package/deps/rocksdb/rocksdb/port/win/port_win.h +2 -16
  144. package/deps/rocksdb/rocksdb/port/win/win_jemalloc.cc +2 -2
  145. package/deps/rocksdb/rocksdb/port/win/win_logger.cc +2 -2
  146. package/deps/rocksdb/rocksdb/rocksdb.pc.in +4 -5
  147. package/deps/rocksdb/rocksdb/src.mk +3 -0
  148. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +7 -5
  149. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +39 -43
  150. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +2 -4
  151. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +42 -34
  152. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +1 -7
  153. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +2 -2
  154. package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +2 -2
  155. package/deps/rocksdb/rocksdb/table/block_based/block_prefix_index.cc +7 -13
  156. package/deps/rocksdb/rocksdb/table/block_based/block_prefix_index.h +9 -5
  157. package/deps/rocksdb/rocksdb/table/block_based/block_type.h +5 -2
  158. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +4 -4
  159. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +6 -2
  160. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +8 -5
  161. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +2 -2
  162. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +19 -14
  163. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +2 -0
  164. package/deps/rocksdb/rocksdb/table/format.h +1 -3
  165. package/deps/rocksdb/rocksdb/table/get_context.cc +5 -0
  166. package/deps/rocksdb/rocksdb/table/multiget_context.h +3 -0
  167. package/deps/rocksdb/rocksdb/table/scoped_arena_iterator.h +3 -4
  168. package/deps/rocksdb/rocksdb/table/table_test.cc +1 -1
  169. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +102 -6
  170. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +1 -0
  171. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +19 -2
  172. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +2 -1
  173. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +2 -1
  174. package/deps/rocksdb/rocksdb/util/aligned_buffer.h +2 -4
  175. package/deps/rocksdb/rocksdb/util/autovector.h +11 -1
  176. package/deps/rocksdb/rocksdb/util/cleanable.cc +1 -0
  177. package/deps/rocksdb/rocksdb/util/compression.h +5 -7
  178. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +14 -8
  179. package/deps/rocksdb/rocksdb/util/string_util.cc +1 -1
  180. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +33 -63
  181. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +1 -1
  182. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +3 -2
  183. package/deps/rocksdb/rocksdb/utilities/counted_fs.cc +14 -0
  184. package/deps/rocksdb/rocksdb/utilities/counted_fs.h +7 -1
  185. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +7 -0
  186. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +1 -0
  187. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +8 -0
  188. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +3 -0
  189. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_bench.cc +6 -4
  190. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +2 -3
  191. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +34 -21
  192. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +31 -7
  193. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +1 -0
  194. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +63 -0
  195. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +40 -0
  196. package/deps/rocksdb/rocksdb/utilities/transactions/timestamped_snapshot_test.cc +426 -0
  197. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +37 -0
  198. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +6 -0
  199. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +16 -18
  200. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +18 -0
  201. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +61 -0
  202. package/deps/rocksdb/rocksdb.gyp +1 -0
  203. package/index.js +5 -2
  204. package/package.json +1 -1
  205. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  206. package/prebuilds/darwin-x64/node.napi.node +0 -0
  207. package/prebuilds/linux-x64/node.napi.node +0 -0
@@ -100,7 +100,8 @@ AdvancedColumnFamilyOptions::AdvancedColumnFamilyOptions(const Options& options)
100
100
  options.blob_garbage_collection_age_cutoff),
101
101
  blob_garbage_collection_force_threshold(
102
102
  options.blob_garbage_collection_force_threshold),
103
- blob_compaction_readahead_size(options.blob_compaction_readahead_size) {
103
+ blob_compaction_readahead_size(options.blob_compaction_readahead_size),
104
+ blob_file_starting_level(options.blob_file_starting_level) {
104
105
  assert(memtable_factory.get() != nullptr);
105
106
  if (max_bytes_for_level_multiplier_additional.size() <
106
107
  static_cast<unsigned int>(num_levels)) {
@@ -414,6 +415,8 @@ void ColumnFamilyOptions::Dump(Logger* log) const {
414
415
  ROCKS_LOG_HEADER(
415
416
  log, " Options.blob_compaction_readahead_size: %" PRIu64,
416
417
  blob_compaction_readahead_size);
418
+ ROCKS_LOG_HEADER(log, " Options.blob_file_starting_level: %d",
419
+ blob_file_starting_level);
417
420
  } // ColumnFamilyOptions::Dump
418
421
 
419
422
  void Options::Dump(Logger* log) const {
@@ -254,6 +254,7 @@ void UpdateColumnFamilyOptions(const MutableCFOptions& moptions,
254
254
  moptions.blob_garbage_collection_force_threshold;
255
255
  cf_opts->blob_compaction_readahead_size =
256
256
  moptions.blob_compaction_readahead_size;
257
+ cf_opts->blob_file_starting_level = moptions.blob_file_starting_level;
257
258
 
258
259
  // Misc options
259
260
  cf_opts->max_sequential_skip_in_iterations =
@@ -271,7 +271,7 @@ Status RocksDBOptionsParser::Parse(const ConfigOptions& config_options_in,
271
271
  std::unordered_map<std::string, std::string> opt_map;
272
272
  std::string line;
273
273
  // we only support single-lined statement.
274
- while (lf_reader.ReadLine(&line)) {
274
+ while (lf_reader.ReadLine(&line, Env::IO_TOTAL /* rate_limiter_priority */)) {
275
275
  int line_num = static_cast<int>(lf_reader.GetLineNumber());
276
276
  line = TrimAndRemoveComment(line);
277
277
  if (line.empty()) {
@@ -520,6 +520,7 @@ TEST_F(OptionsSettableTest, ColumnFamilyOptionsAllFieldsSettable) {
520
520
  "blob_garbage_collection_age_cutoff=0.5;"
521
521
  "blob_garbage_collection_force_threshold=0.75;"
522
522
  "blob_compaction_readahead_size=262144;"
523
+ "blob_file_starting_level=1;"
523
524
  "bottommost_temperature=kWarm;"
524
525
  "compaction_options_fifo={max_table_files_size=3;allow_"
525
526
  "compaction=false;age_for_warm=1;};",
@@ -109,6 +109,7 @@ TEST_F(OptionsTest, GetOptionsFromMapTest) {
109
109
  {"blob_garbage_collection_age_cutoff", "0.5"},
110
110
  {"blob_garbage_collection_force_threshold", "0.75"},
111
111
  {"blob_compaction_readahead_size", "256K"},
112
+ {"blob_file_starting_level", "1"},
112
113
  {"bottommost_temperature", "kWarm"},
113
114
  };
114
115
 
@@ -247,6 +248,7 @@ TEST_F(OptionsTest, GetOptionsFromMapTest) {
247
248
  ASSERT_EQ(new_cf_opt.blob_garbage_collection_age_cutoff, 0.5);
248
249
  ASSERT_EQ(new_cf_opt.blob_garbage_collection_force_threshold, 0.75);
249
250
  ASSERT_EQ(new_cf_opt.blob_compaction_readahead_size, 262144);
251
+ ASSERT_EQ(new_cf_opt.blob_file_starting_level, 1);
250
252
  ASSERT_EQ(new_cf_opt.bottommost_temperature, Temperature::kWarm);
251
253
 
252
254
  cf_options_map["write_buffer_size"] = "hello";
@@ -2330,6 +2332,7 @@ TEST_F(OptionsOldApiTest, GetOptionsFromMapTest) {
2330
2332
  {"blob_garbage_collection_age_cutoff", "0.5"},
2331
2333
  {"blob_garbage_collection_force_threshold", "0.75"},
2332
2334
  {"blob_compaction_readahead_size", "256K"},
2335
+ {"blob_file_starting_level", "1"},
2333
2336
  {"bottommost_temperature", "kWarm"},
2334
2337
  };
2335
2338
 
@@ -2462,6 +2465,7 @@ TEST_F(OptionsOldApiTest, GetOptionsFromMapTest) {
2462
2465
  ASSERT_EQ(new_cf_opt.blob_garbage_collection_age_cutoff, 0.5);
2463
2466
  ASSERT_EQ(new_cf_opt.blob_garbage_collection_force_threshold, 0.75);
2464
2467
  ASSERT_EQ(new_cf_opt.blob_compaction_readahead_size, 262144);
2468
+ ASSERT_EQ(new_cf_opt.blob_file_starting_level, 1);
2465
2469
  ASSERT_EQ(new_cf_opt.bottommost_temperature, Temperature::kWarm);
2466
2470
 
2467
2471
  cf_options_map["write_buffer_size"] = "hello";
@@ -23,8 +23,6 @@
23
23
 
24
24
  #define __declspec(S)
25
25
 
26
- #define ROCKSDB_NOEXCEPT noexcept
27
-
28
26
  #undef PLATFORM_IS_LITTLE_ENDIAN
29
27
  #if defined(OS_MACOSX)
30
28
  #include <machine/endian.h>
@@ -12,36 +12,52 @@
12
12
 
13
13
  #pragma once
14
14
 
15
- #if defined(OS_WIN) && defined(_MSC_VER)
15
+ #include "rocksdb/rocksdb_namespace.h"
16
16
 
17
- #include <time.h>
17
+ #if defined(OS_WIN) && (defined(_MSC_VER) || defined(__MINGW32__))
18
18
 
19
- #include "rocksdb/rocksdb_namespace.h"
19
+ #include <time.h>
20
20
 
21
21
  namespace ROCKSDB_NAMESPACE {
22
22
 
23
23
  namespace port {
24
24
 
25
- // Avoid including winsock2.h for this definition
26
- struct timeval {
25
+ struct TimeVal {
27
26
  long tv_sec;
28
27
  long tv_usec;
29
28
  };
30
29
 
31
- void gettimeofday(struct timeval* tv, struct timezone* tz);
30
+ void GetTimeOfDay(TimeVal* tv, struct timezone* tz);
32
31
 
33
- inline struct tm* localtime_r(const time_t* timep, struct tm* result) {
32
+ inline struct tm* LocalTimeR(const time_t* timep, struct tm* result) {
34
33
  errno_t ret = localtime_s(result, timep);
35
34
  return (ret == 0) ? result : NULL;
36
35
  }
37
- }
38
36
 
39
- using port::timeval;
40
- using port::gettimeofday;
41
- using port::localtime_r;
37
+ } // namespace port
38
+
42
39
  } // namespace ROCKSDB_NAMESPACE
43
40
 
44
41
  #else
45
42
  #include <time.h>
46
43
  #include <sys/time.h>
44
+
45
+ namespace ROCKSDB_NAMESPACE {
46
+
47
+ namespace port {
48
+
49
+ using TimeVal = struct timeval;
50
+
51
+ inline void GetTimeOfDay(TimeVal* tv, struct timezone* tz) {
52
+ gettimeofday(tv, tz);
53
+ }
54
+
55
+ inline struct tm* LocalTimeR(const time_t* timep, struct tm* result) {
56
+ return localtime_r(timep, result);
57
+ }
58
+
59
+ } // namespace port
60
+
61
+ } // namespace ROCKSDB_NAMESPACE
62
+
47
63
  #endif
@@ -601,7 +601,7 @@ IOStatus WinFileSystem::NewDirectory(const std::string& name,
601
601
  return s;
602
602
  }
603
603
 
604
- result->reset(new WinDirectory(handle));
604
+ result->reset(new WinDirectory(name, handle));
605
605
 
606
606
  return s;
607
607
  }
@@ -1064,6 +1064,22 @@ IOStatus WinDirectory::Fsync(const IOOptions& /*options*/,
1064
1064
  return IOStatus::OK();
1065
1065
  }
1066
1066
 
1067
+ IOStatus WinDirectory::Close(const IOOptions& /*options*/,
1068
+ IODebugContext* /*dbg*/) {
1069
+ IOStatus s = IOStatus::OK();
1070
+ BOOL ret __attribute__((__unused__));
1071
+ if (handle_ != INVALID_HANDLE_VALUE) {
1072
+ ret = ::CloseHandle(handle_);
1073
+ if (!ret) {
1074
+ auto lastError = GetLastError();
1075
+ s = IOErrorFromWindowsError("Directory closes failed for : " + GetName(),
1076
+ lastError);
1077
+ }
1078
+ handle_ = NULL;
1079
+ }
1080
+ return s;
1081
+ }
1082
+
1067
1083
  size_t WinDirectory::GetUniqueId(char* id, size_t max_size) const {
1068
1084
  return GetUniqueIdFromFile(handle_, id, max_size);
1069
1085
  }
@@ -472,14 +472,23 @@ class WinMemoryMappedBuffer : public MemoryMappedFileBuffer {
472
472
  };
473
473
 
474
474
  class WinDirectory : public FSDirectory {
475
+ const std::string filename_;
475
476
  HANDLE handle_;
476
477
 
477
478
  public:
478
- explicit WinDirectory(HANDLE h) noexcept : handle_(h) {
479
+ explicit WinDirectory(const std::string& filename, HANDLE h) noexcept
480
+ : filename_(filename), handle_(h) {
479
481
  assert(handle_ != INVALID_HANDLE_VALUE);
480
482
  }
481
- ~WinDirectory() { ::CloseHandle(handle_); }
483
+ ~WinDirectory() {
484
+ if (handle_ != NULL) {
485
+ IOStatus s = WinDirectory::Close(IOOptions(), nullptr);
486
+ s.PermitUncheckedError();
487
+ }
488
+ }
489
+ const std::string& GetName() const { return filename_; }
482
490
  IOStatus Fsync(const IOOptions& options, IODebugContext* dbg) override;
491
+ IOStatus Close(const IOOptions& options, IODebugContext* dbg) override;
483
492
 
484
493
  size_t GetUniqueId(char* id, size_t max_size) const override;
485
494
  };
@@ -52,7 +52,7 @@ std::wstring utf8_to_utf16(const std::string& utf8) {
52
52
  }
53
53
  #endif
54
54
 
55
- void gettimeofday(struct timeval* tv, struct timezone* /* tz */) {
55
+ void GetTimeOfDay(TimeVal* tv, struct timezone* /* tz */) {
56
56
  std::chrono::microseconds usNow(
57
57
  std::chrono::duration_cast<std::chrono::microseconds>(
58
58
  std::chrono::system_clock::now().time_since_epoch()));
@@ -70,20 +70,6 @@ extern const bool kDefaultToAdaptiveMutex;
70
70
 
71
71
  namespace port {
72
72
 
73
- // VS < 2015
74
- #if defined(_MSC_VER) && (_MSC_VER < 1900)
75
-
76
- // VS 15 has snprintf
77
- #define snprintf _snprintf
78
-
79
- #define ROCKSDB_NOEXCEPT
80
-
81
- #else // VS >= 2015 or MinGW
82
-
83
- #define ROCKSDB_NOEXCEPT noexcept
84
-
85
- #endif //_MSC_VER
86
-
87
73
  // "Windows is designed to run on little-endian computer architectures."
88
74
  // https://docs.microsoft.com/en-us/windows/win32/sysinfo/registry-value-types
89
75
  constexpr bool kLittleEndian = true;
@@ -230,8 +216,8 @@ extern void InitOnce(OnceType* once, void (*initializer)());
230
216
 
231
217
  #ifdef ROCKSDB_JEMALLOC
232
218
  // Separate inlines so they can be replaced if needed
233
- void* jemalloc_aligned_alloc(size_t size, size_t alignment) ROCKSDB_NOEXCEPT;
234
- void jemalloc_aligned_free(void* p) ROCKSDB_NOEXCEPT;
219
+ void* jemalloc_aligned_alloc(size_t size, size_t alignment) noexcept;
220
+ void jemalloc_aligned_free(void* p) noexcept;
235
221
  #endif
236
222
 
237
223
  inline void *cacheline_aligned_alloc(size_t size) {
@@ -41,10 +41,10 @@ ZSTD_customMem GetJeZstdAllocationOverrides() {
41
41
 
42
42
  namespace ROCKSDB_NAMESPACE {
43
43
  namespace port {
44
- void* jemalloc_aligned_alloc(size_t size, size_t alignment) ROCKSDB_NOEXCEPT {
44
+ void* jemalloc_aligned_alloc(size_t size, size_t alignment) noexcept {
45
45
  return je_aligned_alloc(alignment, size);
46
46
  }
47
- void jemalloc_aligned_free(void* p) ROCKSDB_NOEXCEPT { je_free(p); }
47
+ void jemalloc_aligned_free(void* p) noexcept { je_free(p); }
48
48
  } // namespace port
49
49
  } // namespace ROCKSDB_NAMESPACE
50
50
 
@@ -118,8 +118,8 @@ void WinLogger::Logv(const char* format, va_list ap) {
118
118
  char* p = base;
119
119
  char* limit = base + bufsize;
120
120
 
121
- struct timeval now_tv;
122
- gettimeofday(&now_tv, nullptr);
121
+ port::TimeVal now_tv;
122
+ port::GetTimeOfDay(&now_tv, nullptr);
123
123
  const time_t seconds = now_tv.tv_sec;
124
124
  struct tm t;
125
125
  localtime_s(&t, &seconds);
@@ -1,11 +1,10 @@
1
1
  prefix="@CMAKE_INSTALL_PREFIX@"
2
- exec_prefix="${prefix}"
3
- libdir="${prefix}/lib"
4
- includedir="${prefix}/include"
2
+ includedir="${prefix}/@CMAKE_INSTALL_INCLUDEDIR@"
3
+ libdir="${prefix}/@CMAKE_INSTALL_LIBDIR@"
5
4
 
6
5
  Name: @PROJECT_NAME@
7
- Description: @CMAKE_PROJECT_DESCRIPTION@
8
- URL: @CMAKE_PROJECT_HOMEPAGE_URL@
6
+ Description: @PROJECT_DESCRIPTION@
7
+ URL: @PROJECT_HOMEPAGE_URL@
9
8
  Version: @PROJECT_VERSION@
10
9
  Cflags: -I"${includedir}"
11
10
  Libs: -L"${libdir}" -lrocksdb
@@ -82,6 +82,7 @@ LIB_SOURCES = \
82
82
  db/version_set.cc \
83
83
  db/wal_edit.cc \
84
84
  db/wal_manager.cc \
85
+ db/wide/wide_column_serialization.cc \
85
86
  db/write_batch.cc \
86
87
  db/write_batch_base.cc \
87
88
  db/write_controller.cc \
@@ -497,6 +498,7 @@ TEST_MAIN_SOURCES = \
497
498
  db/version_edit_test.cc \
498
499
  db/version_set_test.cc \
499
500
  db/wal_manager_test.cc \
501
+ db/wide/wide_column_serialization_test.cc \
500
502
  db/write_batch_test.cc \
501
503
  db/write_callback_test.cc \
502
504
  db/write_controller_test.cc \
@@ -592,6 +594,7 @@ TEST_MAIN_SOURCES = \
592
594
  utilities/transactions/write_prepared_transaction_test.cc \
593
595
  utilities/transactions/write_unprepared_transaction_test.cc \
594
596
  utilities/transactions/write_committed_transaction_ts_test.cc \
597
+ utilities/transactions/timestamped_snapshot_test.cc \
595
598
  utilities/ttl/ttl_test.cc \
596
599
  utilities/util_merge_operators_test.cc \
597
600
  utilities/write_batch_with_index/write_batch_with_index_test.cc \
@@ -187,9 +187,9 @@ std::unique_ptr<FilterBlockReader> BlockBasedFilterBlockReader::Create(
187
187
 
188
188
  CachableEntry<BlockContents> filter_block;
189
189
  if (prefetch || !use_cache) {
190
- const Status s = ReadFilterBlock(table, prefetch_buffer, ro, use_cache,
191
- nullptr /* get_context */, lookup_context,
192
- &filter_block);
190
+ const Status s = ReadFilterBlock(
191
+ table, prefetch_buffer, ro, use_cache, nullptr /* get_context */,
192
+ lookup_context, &filter_block, BlockType::kDeprecatedFilter);
193
193
  if (!s.ok()) {
194
194
  IGNORE_STATUS_IF_ERROR(s);
195
195
  return std::unique_ptr<FilterBlockReader>();
@@ -257,7 +257,8 @@ bool BlockBasedFilterBlockReader::MayMatch(
257
257
  CachableEntry<BlockContents> filter_block;
258
258
 
259
259
  const Status s =
260
- GetOrReadFilterBlock(no_io, get_context, lookup_context, &filter_block);
260
+ GetOrReadFilterBlock(no_io, get_context, lookup_context, &filter_block,
261
+ BlockType::kDeprecatedFilter);
261
262
  if (!s.ok()) {
262
263
  IGNORE_STATUS_IF_ERROR(s);
263
264
  return true;
@@ -316,7 +317,8 @@ std::string BlockBasedFilterBlockReader::ToString() const {
316
317
 
317
318
  const Status s =
318
319
  GetOrReadFilterBlock(false /* no_io */, nullptr /* get_context */,
319
- nullptr /* lookup_context */, &filter_block);
320
+ nullptr /* lookup_context */, &filter_block,
321
+ BlockType::kDeprecatedFilter);
320
322
  if (!s.ok()) {
321
323
  IGNORE_STATUS_IF_ERROR(s);
322
324
  return std::string("Unable to retrieve filter block");
@@ -1250,8 +1250,7 @@ void BlockBasedTableBuilder::WriteRawBlock(const Slice& block_contents,
1250
1250
  CompressionType type,
1251
1251
  BlockHandle* handle,
1252
1252
  BlockType block_type,
1253
- const Slice* raw_block_contents,
1254
- bool is_top_level_filter_block) {
1253
+ const Slice* raw_block_contents) {
1255
1254
  Rep* r = rep_;
1256
1255
  bool is_data_block = block_type == BlockType::kData;
1257
1256
  StopWatch sw(r->ioptions.clock, r->ioptions.stats, WRITE_RAW_BLOCK_MICROS);
@@ -1311,11 +1310,9 @@ void BlockBasedTableBuilder::WriteRawBlock(const Slice& block_contents,
1311
1310
  }
1312
1311
  if (warm_cache) {
1313
1312
  if (type == kNoCompression) {
1314
- s = InsertBlockInCacheHelper(block_contents, handle, block_type,
1315
- is_top_level_filter_block);
1313
+ s = InsertBlockInCacheHelper(block_contents, handle, block_type);
1316
1314
  } else if (raw_block_contents != nullptr) {
1317
- s = InsertBlockInCacheHelper(*raw_block_contents, handle, block_type,
1318
- is_top_level_filter_block);
1315
+ s = InsertBlockInCacheHelper(*raw_block_contents, handle, block_type);
1319
1316
  }
1320
1317
  if (!s.ok()) {
1321
1318
  r->SetStatus(s);
@@ -1491,25 +1488,28 @@ Status BlockBasedTableBuilder::InsertBlockInCompressedCache(
1491
1488
 
1492
1489
  Status BlockBasedTableBuilder::InsertBlockInCacheHelper(
1493
1490
  const Slice& block_contents, const BlockHandle* handle,
1494
- BlockType block_type, bool is_top_level_filter_block) {
1491
+ BlockType block_type) {
1495
1492
  Status s;
1496
- if (block_type == BlockType::kData || block_type == BlockType::kIndex) {
1497
- s = InsertBlockInCache<Block>(block_contents, handle, block_type);
1498
- } else if (block_type == BlockType::kFilter) {
1499
- if (rep_->filter_builder->IsBlockBased()) {
1500
- // for block-based filter which is deprecated.
1501
- s = InsertBlockInCache<BlockContents>(block_contents, handle, block_type);
1502
- } else if (is_top_level_filter_block) {
1503
- // for top level filter block in partitioned filter.
1493
+ switch (block_type) {
1494
+ case BlockType::kData:
1495
+ case BlockType::kIndex:
1496
+ case BlockType::kFilterPartitionIndex:
1504
1497
  s = InsertBlockInCache<Block>(block_contents, handle, block_type);
1505
- } else {
1506
- // for second level partitioned filters and full filters.
1498
+ break;
1499
+ case BlockType::kDeprecatedFilter:
1500
+ s = InsertBlockInCache<BlockContents>(block_contents, handle, block_type);
1501
+ break;
1502
+ case BlockType::kFilter:
1507
1503
  s = InsertBlockInCache<ParsedFullFilterBlock>(block_contents, handle,
1508
1504
  block_type);
1509
- }
1510
- } else if (block_type == BlockType::kCompressionDictionary) {
1511
- s = InsertBlockInCache<UncompressionDict>(block_contents, handle,
1512
- block_type);
1505
+ break;
1506
+ case BlockType::kCompressionDictionary:
1507
+ s = InsertBlockInCache<UncompressionDict>(block_contents, handle,
1508
+ block_type);
1509
+ break;
1510
+ default:
1511
+ // no-op / not cached
1512
+ break;
1513
1513
  }
1514
1514
  return s;
1515
1515
  }
@@ -1563,10 +1563,14 @@ Status BlockBasedTableBuilder::InsertBlockInCache(const Slice& block_contents,
1563
1563
 
1564
1564
  void BlockBasedTableBuilder::WriteFilterBlock(
1565
1565
  MetaIndexBuilder* meta_index_builder) {
1566
+ if (rep_->filter_builder == nullptr || rep_->filter_builder->IsEmpty()) {
1567
+ // No filter block needed
1568
+ return;
1569
+ }
1566
1570
  BlockHandle filter_block_handle;
1567
- bool empty_filter_block =
1568
- (rep_->filter_builder == nullptr || rep_->filter_builder->IsEmpty());
1569
- if (ok() && !empty_filter_block) {
1571
+ bool is_block_based_filter = rep_->filter_builder->IsBlockBased();
1572
+ bool is_partitioned_filter = rep_->table_options.partition_filters;
1573
+ if (ok()) {
1570
1574
  rep_->props.num_filter_entries +=
1571
1575
  rep_->filter_builder->EstimateEntriesAdded();
1572
1576
  Status s = Status::Incomplete();
@@ -1591,31 +1595,23 @@ void BlockBasedTableBuilder::WriteFilterBlock(
1591
1595
 
1592
1596
  rep_->props.filter_size += filter_content.size();
1593
1597
 
1594
- // TODO: Refactor code so that BlockType can determine both the C++ type
1595
- // of a block cache entry (TBlocklike) and the CacheEntryRole while
1596
- // inserting blocks in cache.
1597
- bool top_level_filter_block = false;
1598
- if (s.ok() && rep_->table_options.partition_filters &&
1599
- !rep_->filter_builder->IsBlockBased()) {
1600
- top_level_filter_block = true;
1601
- }
1602
- WriteRawBlock(filter_content, kNoCompression, &filter_block_handle,
1603
- BlockType::kFilter, nullptr /*raw_contents*/,
1604
- top_level_filter_block);
1598
+ BlockType btype = is_block_based_filter ? BlockType::kDeprecatedFilter
1599
+ : is_partitioned_filter && /* last */ s.ok()
1600
+ ? BlockType::kFilterPartitionIndex
1601
+ : BlockType::kFilter;
1602
+ WriteRawBlock(filter_content, kNoCompression, &filter_block_handle, btype,
1603
+ nullptr /*raw_contents*/);
1605
1604
  }
1606
1605
  rep_->filter_builder->ResetFilterBitsBuilder();
1607
1606
  }
1608
- if (ok() && !empty_filter_block) {
1607
+ if (ok()) {
1609
1608
  // Add mapping from "<filter_block_prefix>.Name" to location
1610
1609
  // of filter data.
1611
1610
  std::string key;
1612
- if (rep_->filter_builder->IsBlockBased()) {
1613
- key = BlockBasedTable::kFilterBlockPrefix;
1614
- } else {
1615
- key = rep_->table_options.partition_filters
1616
- ? BlockBasedTable::kPartitionedFilterBlockPrefix
1617
- : BlockBasedTable::kFullFilterBlockPrefix;
1618
- }
1611
+ key = is_block_based_filter ? BlockBasedTable::kFilterBlockPrefix
1612
+ : is_partitioned_filter
1613
+ ? BlockBasedTable::kPartitionedFilterBlockPrefix
1614
+ : BlockBasedTable::kFullFilterBlockPrefix;
1619
1615
  key.append(rep_->table_options.filter_policy->CompatibilityName());
1620
1616
  meta_index_builder->Add(key, filter_block_handle);
1621
1617
  }
@@ -119,8 +119,7 @@ class BlockBasedTableBuilder : public TableBuilder {
119
119
  BlockType block_type);
120
120
  // Directly write data to the file.
121
121
  void WriteRawBlock(const Slice& data, CompressionType, BlockHandle* handle,
122
- BlockType block_type, const Slice* raw_data = nullptr,
123
- bool is_top_level_filter_block = false);
122
+ BlockType block_type, const Slice* raw_data = nullptr);
124
123
 
125
124
  void SetupCacheKeyPrefix(const TableBuilderOptions& tbo);
126
125
 
@@ -130,8 +129,7 @@ class BlockBasedTableBuilder : public TableBuilder {
130
129
 
131
130
  Status InsertBlockInCacheHelper(const Slice& block_contents,
132
131
  const BlockHandle* handle,
133
- BlockType block_type,
134
- bool is_top_level_filter_block);
132
+ BlockType block_type);
135
133
 
136
134
  Status InsertBlockInCompressedCache(const Slice& block_contents,
137
135
  const CompressionType type,