@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
package/binding.cc CHANGED
@@ -526,7 +526,7 @@ struct Iterator final : public BaseIterator {
526
526
  const bool fillCache,
527
527
  const bool keyAsBuffer,
528
528
  const bool valueAsBuffer,
529
- const uint32_t highWaterMarkBytes,
529
+ const int32_t highWaterMarkBytes,
530
530
  std::shared_ptr<const rocksdb::Snapshot> snapshot)
531
531
  : BaseIterator(database, column, reverse, lt, lte, gt, gte, limit, fillCache, snapshot),
532
532
  keys_(keys),
@@ -551,7 +551,7 @@ struct Iterator final : public BaseIterator {
551
551
  const bool values_;
552
552
  const bool keyAsBuffer_;
553
553
  const bool valueAsBuffer_;
554
- const uint32_t highWaterMarkBytes_;
554
+ const int32_t highWaterMarkBytes_;
555
555
  bool first_ = true;
556
556
 
557
557
  private:
@@ -691,85 +691,86 @@ struct OpenWorker final : public Worker {
691
691
  std::vector<rocksdb::ColumnFamilyDescriptor> column_families_;
692
692
  };
693
693
 
694
- napi_status InitOptions(napi_env env, auto& options, auto options2) {
695
- const auto memtable_memory_budget = Uint32Property(env, options2, "memtableMemoryBudget").value_or(256 * 1024 * 1024);
694
+ template <typename T>
695
+ napi_status InitOptions(napi_env env, T& columnOptions, auto options) {
696
+ const auto memtable_memory_budget = Uint32Property(env, options, "memtableMemoryBudget").value_or(256 * 1024 * 1024);
696
697
 
697
- const auto compaction = StringProperty(env, options2, "compaction").value_or("level");
698
+ const auto compaction = StringProperty(env, options, "compaction").value_or("level");
698
699
 
699
700
  if (compaction == "universal") {
700
- options.write_buffer_size = static_cast<size_t>(memtable_memory_budget / 4);
701
+ columnOptions.write_buffer_size = static_cast<size_t>(memtable_memory_budget / 4);
701
702
  // merge two memtables when flushing to L0
702
- options.min_write_buffer_number_to_merge = 2;
703
+ columnOptions.min_write_buffer_number_to_merge = 2;
703
704
  // this means we'll use 50% extra memory in the worst case, but will reduce
704
705
  // write stalls.
705
- options.max_write_buffer_number = 6;
706
+ columnOptions.max_write_buffer_number = 6;
706
707
  // universal style compaction
707
- options.compaction_style = rocksdb::kCompactionStyleUniversal;
708
- options.compaction_options_universal.compression_size_percent = 80;
708
+ columnOptions.compaction_style = rocksdb::kCompactionStyleUniversal;
709
+ columnOptions.compaction_options_universal.compression_size_percent = 80;
709
710
  } else {
710
711
  // merge two memtables when flushing to L0
711
- options.min_write_buffer_number_to_merge = 2;
712
+ columnOptions.min_write_buffer_number_to_merge = 2;
712
713
  // this means we'll use 50% extra memory in the worst case, but will reduce
713
714
  // write stalls.
714
- options.max_write_buffer_number = 6;
715
+ columnOptions.max_write_buffer_number = 6;
715
716
  // start flushing L0->L1 as soon as possible. each file on level0 is
716
717
  // (memtable_memory_budget / 2). This will flush level 0 when it's bigger than
717
718
  // memtable_memory_budget.
718
- options.level0_file_num_compaction_trigger = 2;
719
+ columnOptions.level0_file_num_compaction_trigger = 2;
719
720
  // doesn't really matter much, but we don't want to create too many files
720
- options.target_file_size_base = memtable_memory_budget / 8;
721
+ columnOptions.target_file_size_base = memtable_memory_budget / 8;
721
722
  // make Level1 size equal to Level0 size, so that L0->L1 compactions are fast
722
- options.max_bytes_for_level_base = memtable_memory_budget;
723
+ columnOptions.max_bytes_for_level_base = memtable_memory_budget;
723
724
 
724
725
  // level style compaction
725
- options.compaction_style = rocksdb::kCompactionStyleLevel;
726
+ columnOptions.compaction_style = rocksdb::kCompactionStyleLevel;
726
727
 
727
728
  // TODO (perf): only compress levels >= 2
728
729
  }
729
730
 
730
- options.compression =
731
- BooleanProperty(env, options2, "compression").value_or((true)) ? rocksdb::kZSTD : rocksdb::kNoCompression;
732
- if (options.compression == rocksdb::kZSTD) {
733
- options.compression_opts.max_dict_bytes = 16 * 1024;
734
- options.compression_opts.zstd_max_train_bytes = 16 * 1024 * 100;
735
- // options.compression_opts.parallel_threads
731
+ columnOptions.compression =
732
+ BooleanProperty(env, options, "compression").value_or((true)) ? rocksdb::kZSTD : rocksdb::kNoCompression;
733
+ if (columnOptions.compression == rocksdb::kZSTD) {
734
+ columnOptions.compression_opts.max_dict_bytes = 16 * 1024;
735
+ columnOptions.compression_opts.zstd_max_train_bytes = 16 * 1024 * 100;
736
+ // columnOptions.compression_opts.parallel_threads
736
737
  }
737
738
 
738
- const auto cacheSize = Uint32Property(env, options2, "cacheSize").value_or(8 << 20);
739
+ const auto cacheSize = Uint32Property(env, options, "cacheSize").value_or(8 << 20);
739
740
 
740
741
  rocksdb::BlockBasedTableOptions tableOptions;
741
742
 
742
743
  if (cacheSize) {
743
744
  tableOptions.block_cache = rocksdb::NewLRUCache(cacheSize);
744
745
  tableOptions.cache_index_and_filter_blocks =
745
- BooleanProperty(env, options2, "cacheIndexAndFilterBlocks").value_or(true);
746
+ BooleanProperty(env, options, "cacheIndexAndFilterBlocks").value_or(true);
746
747
  } else {
747
748
  tableOptions.no_block_cache = true;
748
749
  tableOptions.cache_index_and_filter_blocks = false;
749
750
  }
750
751
 
751
- const auto optimize = StringProperty(env, options2, "optimize").value_or("");
752
+ const auto optimize = StringProperty(env, options, "optimize").value_or("");
752
753
 
753
754
  if (optimize == "point-lookup") {
754
755
  tableOptions.data_block_index_type = rocksdb::BlockBasedTableOptions::kDataBlockBinaryAndHash;
755
756
  tableOptions.data_block_hash_table_util_ratio = 0.75;
756
757
  tableOptions.filter_policy.reset(rocksdb::NewRibbonFilterPolicy(10, 1));
757
758
 
758
- options.memtable_prefix_bloom_size_ratio = 0.02;
759
- options.memtable_whole_key_filtering = true;
759
+ columnOptions.memtable_prefix_bloom_size_ratio = 0.02;
760
+ columnOptions.memtable_whole_key_filtering = true;
760
761
  } else if (optimize == "range-lookup") {
761
762
  // TODO?
762
763
  } else {
763
764
  tableOptions.filter_policy.reset(rocksdb::NewRibbonFilterPolicy(10));
764
765
  }
765
766
 
766
- tableOptions.block_size = Uint32Property(env, options2, "blockSize").value_or(4096);
767
- tableOptions.block_restart_interval = Uint32Property(env, options2, "blockRestartInterval").value_or(16);
767
+ tableOptions.block_size = Uint32Property(env, options, "blockSize").value_or(4096);
768
+ tableOptions.block_restart_interval = Uint32Property(env, options, "blockRestartInterval").value_or(16);
768
769
  tableOptions.format_version = 5;
769
770
  tableOptions.checksum = rocksdb::kXXH3;
770
- tableOptions.optimize_filters_for_memory = BooleanProperty(env, options2, "optimizeFiltersForMemory").value_or(true);
771
+ tableOptions.optimize_filters_for_memory = BooleanProperty(env, options, "optimizeFiltersForMemory").value_or(true);
771
772
 
772
- options.table_factory.reset(rocksdb::NewBlockBasedTableFactory(tableOptions));
773
+ columnOptions.table_factory.reset(rocksdb::NewBlockBasedTableFactory(tableOptions));
773
774
 
774
775
  return napi_ok;
775
776
  }
@@ -792,13 +793,14 @@ NAPI_METHOD(db_open) {
792
793
  dbOptions.create_if_missing = BooleanProperty(env, options, "createIfMissing").value_or(true);
793
794
  dbOptions.error_if_exists = BooleanProperty(env, options, "errorIfExists").value_or(false);
794
795
  dbOptions.avoid_unnecessary_blocking_io = true;
795
- dbOptions.use_adaptive_mutex = BooleanProperty(env, options, "useAdaptiveMutex").value_or(true);
796
- dbOptions.enable_pipelined_write = BooleanProperty(env, options, "enablePipelinedWrite").value_or(true);
796
+ dbOptions.use_adaptive_mutex = true;
797
+ dbOptions.enable_pipelined_write = false;
797
798
  dbOptions.max_background_jobs =
798
799
  Uint32Property(env, options, "maxBackgroundJobs").value_or(std::thread::hardware_concurrency() / 4);
799
800
  dbOptions.WAL_ttl_seconds = Uint32Property(env, options, "walTTL").value_or(0) / 1e3;
800
801
  dbOptions.WAL_size_limit_MB = Uint32Property(env, options, "walSizeLimit").value_or(0) / 1e6;
801
802
  dbOptions.create_missing_column_families = true;
803
+ dbOptions.unordered_write = BooleanProperty(env, options, "unorderedWrite").value_or(false);
802
804
 
803
805
  const auto infoLogLevel = StringProperty(env, options, "infoLogLevel").value_or("");
804
806
  if (infoLogLevel.size() > 0) {
@@ -1374,7 +1376,7 @@ NAPI_METHOD(iterator_init) {
1374
1376
  const bool keyAsBuffer = EncodingIsBuffer(env, options, "keyEncoding");
1375
1377
  const bool valueAsBuffer = EncodingIsBuffer(env, options, "valueEncoding");
1376
1378
  const auto limit = Int32Property(env, options, "limit").value_or(-1);
1377
- const auto highWaterMarkBytes = Uint32Property(env, options, "highWaterMarkBytes").value_or(16 * 1024);
1379
+ const auto highWaterMarkBytes = Int32Property(env, options, "highWaterMarkBytes").value_or(16 * 1024);
1378
1380
 
1379
1381
  const auto lt = StringProperty(env, options, "lt");
1380
1382
  const auto lte = StringProperty(env, options, "lte");
@@ -1479,7 +1481,7 @@ struct NextWorker final : public Worker {
1479
1481
  cache_.push_back(v.ToString());
1480
1482
  }
1481
1483
 
1482
- if (bytesRead > iterator_->highWaterMarkBytes_ || cache_.size() / 2 >= size_) {
1484
+ if ((iterator_->highWaterMarkBytes_ != -1 && bytesRead > static_cast<size_t>(iterator_->highWaterMarkBytes_)) || cache_.size() / 2 >= size_) {
1483
1485
  finished_ = false;
1484
1486
  return rocksdb::Status::OK();
1485
1487
  }
@@ -1546,7 +1548,6 @@ NAPI_METHOD(batch_do) {
1546
1548
  NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], (void**)&database));
1547
1549
 
1548
1550
  const auto operations = argv[1];
1549
- const auto options = argv[2];
1550
1551
 
1551
1552
  rocksdb::WriteBatch batch;
1552
1553
 
@@ -89,7 +89,11 @@ include(CMakeDependentOption)
89
89
  if(MSVC)
90
90
  option(WITH_GFLAGS "build with GFlags" OFF)
91
91
  option(WITH_XPRESS "build with windows built in compression" OFF)
92
- include(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty.inc)
92
+ option(ROCKSDB_SKIP_THIRDPARTY "skip thirdparty.inc" OFF)
93
+
94
+ if(NOT ROCKSDB_SKIP_THIRDPARTY)
95
+ include(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty.inc)
96
+ endif()
93
97
  else()
94
98
  if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD" AND NOT CMAKE_SYSTEM_NAME MATCHES "kFreeBSD")
95
99
  # FreeBSD has jemalloc as default malloc
@@ -671,6 +675,7 @@ set(SOURCES
671
675
  db/version_set.cc
672
676
  db/wal_edit.cc
673
677
  db/wal_manager.cc
678
+ db/wide/wide_column_serialization.cc
674
679
  db/write_batch.cc
675
680
  db/write_batch_base.cc
676
681
  db/write_controller.cc
@@ -1122,8 +1127,8 @@ if(NOT WIN32 OR ROCKSDB_INSTALL_ON_WINDOWS)
1122
1127
  )
1123
1128
 
1124
1129
  configure_file(
1125
- ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.pc.in
1126
- ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc
1130
+ ${PROJECT_NAME}.pc.in
1131
+ ${PROJECT_NAME}.pc
1127
1132
  @ONLY
1128
1133
  )
1129
1134
 
@@ -1290,6 +1295,7 @@ if(WITH_TESTS)
1290
1295
  db/version_set_test.cc
1291
1296
  db/wal_manager_test.cc
1292
1297
  db/wal_edit_test.cc
1298
+ db/wide/wide_column_serialization_test.cc
1293
1299
  db/write_batch_test.cc
1294
1300
  db/write_callback_test.cc
1295
1301
  db/write_controller_test.cc
@@ -1384,6 +1390,7 @@ if(WITH_TESTS)
1384
1390
  utilities/transactions/write_prepared_transaction_test.cc
1385
1391
  utilities/transactions/write_unprepared_transaction_test.cc
1386
1392
  utilities/transactions/lock/range/range_locking_test.cc
1393
+ utilities/transactions/timestamped_snapshot_test.cc
1387
1394
  utilities/ttl/ttl_test.cc
1388
1395
  utilities/util_merge_operators_test.cc
1389
1396
  utilities/write_batch_with_index/write_batch_with_index_test.cc
@@ -1777,6 +1777,9 @@ write_prepared_transaction_test: $(OBJ_DIR)/utilities/transactions/write_prepare
1777
1777
  write_unprepared_transaction_test: $(OBJ_DIR)/utilities/transactions/write_unprepared_transaction_test.o $(TEST_LIBRARY) $(LIBRARY)
1778
1778
  $(AM_LINK)
1779
1779
 
1780
+ timestamped_snapshot_test: $(OBJ_DIR)/utilities/transactions/timestamped_snapshot_test.o $(TEST_LIBRARY) $(LIBRARY)
1781
+ $(AM_LINK)
1782
+
1780
1783
  sst_dump: $(OBJ_DIR)/tools/sst_dump.o $(TOOLS_LIBRARY) $(LIBRARY)
1781
1784
  $(AM_LINK)
1782
1785
 
@@ -1876,7 +1879,7 @@ testutil_test: $(OBJ_DIR)/test_util/testutil_test.o $(TEST_LIBRARY) $(LIBRARY)
1876
1879
  io_tracer_test: $(OBJ_DIR)/trace_replay/io_tracer_test.o $(OBJ_DIR)/trace_replay/io_tracer.o $(TEST_LIBRARY) $(LIBRARY)
1877
1880
  $(AM_LINK)
1878
1881
 
1879
- prefetch_test: $(OBJ_DIR)/file/prefetch_test.o $(TEST_LIBRARY) $(LIBRARY)
1882
+ prefetch_test: $(OBJ_DIR)/file/prefetch_test.o $(OBJ_DIR)/tools/io_tracer_parser_tool.o $(TEST_LIBRARY) $(LIBRARY)
1880
1883
  $(AM_LINK)
1881
1884
 
1882
1885
  io_tracer_parser_test: $(OBJ_DIR)/tools/io_tracer_parser_test.o $(OBJ_DIR)/tools/io_tracer_parser_tool.o $(TEST_LIBRARY) $(LIBRARY)
@@ -1902,6 +1905,10 @@ db_basic_bench: $(OBJ_DIR)/microbench/db_basic_bench.o $(LIBRARY)
1902
1905
 
1903
1906
  cache_reservation_manager_test: $(OBJ_DIR)/cache/cache_reservation_manager_test.o $(TEST_LIBRARY) $(LIBRARY)
1904
1907
  $(AM_LINK)
1908
+
1909
+ wide_column_serialization_test: $(OBJ_DIR)/db/wide/wide_column_serialization_test.o $(TEST_LIBRARY) $(LIBRARY)
1910
+ $(AM_LINK)
1911
+
1905
1912
  #-------------------------------------------------
1906
1913
  # make install related stuff
1907
1914
  PREFIX ?= /usr/local
@@ -91,6 +91,7 @@ cpp_library_wrapper(name="rocksdb_lib", srcs=[
91
91
  "db/version_set.cc",
92
92
  "db/wal_edit.cc",
93
93
  "db/wal_manager.cc",
94
+ "db/wide/wide_column_serialization.cc",
94
95
  "db/write_batch.cc",
95
96
  "db/write_batch_base.cc",
96
97
  "db/write_controller.cc",
@@ -419,6 +420,7 @@ cpp_library_wrapper(name="rocksdb_whole_archive_lib", srcs=[
419
420
  "db/version_set.cc",
420
421
  "db/wal_edit.cc",
421
422
  "db/wal_manager.cc",
423
+ "db/wide/wide_column_serialization.cc",
422
424
  "db/write_batch.cc",
423
425
  "db/write_batch_base.cc",
424
426
  "db/write_controller.cc",
@@ -5766,6 +5768,12 @@ cpp_unittest_wrapper(name="timer_test",
5766
5768
  extra_compiler_flags=[])
5767
5769
 
5768
5770
 
5771
+ cpp_unittest_wrapper(name="timestamped_snapshot_test",
5772
+ srcs=["utilities/transactions/timestamped_snapshot_test.cc"],
5773
+ deps=[":rocksdb_test_lib"],
5774
+ extra_compiler_flags=[])
5775
+
5776
+
5769
5777
  cpp_unittest_wrapper(name="trace_analyzer_test",
5770
5778
  srcs=["tools/trace_analyzer_test.cc"],
5771
5779
  deps=[":rocksdb_test_lib"],
@@ -5814,6 +5822,12 @@ cpp_unittest_wrapper(name="wal_manager_test",
5814
5822
  extra_compiler_flags=[])
5815
5823
 
5816
5824
 
5825
+ cpp_unittest_wrapper(name="wide_column_serialization_test",
5826
+ srcs=["db/wide/wide_column_serialization_test.cc"],
5827
+ deps=[":rocksdb_test_lib"],
5828
+ extra_compiler_flags=[])
5829
+
5830
+
5817
5831
  cpp_unittest_wrapper(name="work_queue_test",
5818
5832
  srcs=["util/work_queue_test.cc"],
5819
5833
  deps=[":rocksdb_test_lib"],
@@ -34,13 +34,61 @@ static std::unordered_map<std::string, OptionTypeInfo>
34
34
  OptionType::kDouble, OptionVerificationType::kNormal,
35
35
  OptionTypeFlags::kMutable}},
36
36
  };
37
+
38
+ static std::unordered_map<std::string, OptionTypeInfo>
39
+ comp_sec_cache_options_type_info = {
40
+ {"capacity",
41
+ {offsetof(struct CompressedSecondaryCacheOptions, capacity),
42
+ OptionType::kSizeT, OptionVerificationType::kNormal,
43
+ OptionTypeFlags::kMutable}},
44
+ {"num_shard_bits",
45
+ {offsetof(struct CompressedSecondaryCacheOptions, num_shard_bits),
46
+ OptionType::kInt, OptionVerificationType::kNormal,
47
+ OptionTypeFlags::kMutable}},
48
+ {"compression_type",
49
+ {offsetof(struct CompressedSecondaryCacheOptions, compression_type),
50
+ OptionType::kCompressionType, OptionVerificationType::kNormal,
51
+ OptionTypeFlags::kMutable}},
52
+ {"compress_format_version",
53
+ {offsetof(struct CompressedSecondaryCacheOptions,
54
+ compress_format_version),
55
+ OptionType::kUInt32T, OptionVerificationType::kNormal,
56
+ OptionTypeFlags::kMutable}},
57
+ };
37
58
  #endif // ROCKSDB_LITE
38
59
 
39
60
  Status SecondaryCache::CreateFromString(
40
61
  const ConfigOptions& config_options, const std::string& value,
41
62
  std::shared_ptr<SecondaryCache>* result) {
42
- return LoadSharedObject<SecondaryCache>(config_options, value, nullptr,
43
- result);
63
+ if (value.find("compressed_secondary_cache://") == 0) {
64
+ std::string args = value;
65
+ args.erase(0, std::strlen("compressed_secondary_cache://"));
66
+ Status status;
67
+ std::shared_ptr<SecondaryCache> sec_cache;
68
+
69
+ #ifndef ROCKSDB_LITE
70
+ CompressedSecondaryCacheOptions sec_cache_opts;
71
+ status = OptionTypeInfo::ParseStruct(config_options, "",
72
+ &comp_sec_cache_options_type_info, "",
73
+ args, &sec_cache_opts);
74
+ if (status.ok()) {
75
+ sec_cache = NewCompressedSecondaryCache(sec_cache_opts);
76
+ }
77
+
78
+ #else
79
+ (void)config_options;
80
+ status = Status::NotSupported(
81
+ "Cannot load compressed secondary cache in LITE mode ", args);
82
+ #endif //! ROCKSDB_LITE
83
+
84
+ if (status.ok()) {
85
+ result->swap(sec_cache);
86
+ }
87
+ return status;
88
+ } else {
89
+ return LoadSharedObject<SecondaryCache>(config_options, value, nullptr,
90
+ result);
91
+ }
44
92
  }
45
93
 
46
94
  Status Cache::CreateFromString(const ConfigOptions& config_options,
@@ -12,6 +12,7 @@
12
12
  #include <set>
13
13
  #include <sstream>
14
14
 
15
+ #include "cache/fast_lru_cache.h"
15
16
  #include "db/db_impl/db_impl.h"
16
17
  #include "monitoring/histogram.h"
17
18
  #include "port/port.h"
@@ -76,7 +77,7 @@ DEFINE_string(secondary_cache_uri, "",
76
77
  static class std::shared_ptr<ROCKSDB_NAMESPACE::SecondaryCache> secondary_cache;
77
78
  #endif // ROCKSDB_LITE
78
79
 
79
- DEFINE_bool(use_clock_cache, false, "");
80
+ DEFINE_string(cache_type, "lru_cache", "Type of block cache.");
80
81
 
81
82
  // ## BEGIN stress_cache_key sub-tool options ##
82
83
  // See class StressCacheKey below.
@@ -279,13 +280,15 @@ class CacheBench {
279
280
  if (max_key > (static_cast<uint64_t>(1) << max_log_)) max_log_++;
280
281
  }
281
282
 
282
- if (FLAGS_use_clock_cache) {
283
+ if (FLAGS_cache_type == "clock_cache") {
283
284
  cache_ = NewClockCache(FLAGS_cache_size, FLAGS_num_shard_bits);
284
285
  if (!cache_) {
285
286
  fprintf(stderr, "Clock cache not supported.\n");
286
287
  exit(1);
287
288
  }
288
- } else {
289
+ } else if (FLAGS_cache_type == "fast_lru_cache") {
290
+ cache_ = NewFastLRUCache(FLAGS_cache_size, FLAGS_num_shard_bits);
291
+ } else if (FLAGS_cache_type == "lru_cache") {
289
292
  LRUCacheOptions opts(FLAGS_cache_size, FLAGS_num_shard_bits, false, 0.5);
290
293
  #ifndef ROCKSDB_LITE
291
294
  if (!FLAGS_secondary_cache_uri.empty()) {
@@ -303,6 +306,9 @@ class CacheBench {
303
306
  #endif // ROCKSDB_LITE
304
307
 
305
308
  cache_ = NewLRUCache(opts);
309
+ } else {
310
+ fprintf(stderr, "Cache type not supported.");
311
+ exit(1);
306
312
  }
307
313
  }
308
314