@nxtedition/rocksdb 8.2.8 → 9.0.1

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 (483) hide show
  1. package/binding.cc +0 -21
  2. package/deps/rocksdb/rocksdb/CMakeLists.txt +20 -10
  3. package/deps/rocksdb/rocksdb/Makefile +37 -25
  4. package/deps/rocksdb/rocksdb/README.md +29 -0
  5. package/deps/rocksdb/rocksdb/TARGETS +25 -2
  6. package/deps/rocksdb/rocksdb/cache/cache.cc +35 -0
  7. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +229 -74
  8. package/deps/rocksdb/rocksdb/cache/cache_helpers.cc +2 -1
  9. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +4 -3
  10. package/deps/rocksdb/rocksdb/cache/cache_test.cc +58 -95
  11. package/deps/rocksdb/rocksdb/cache/charged_cache.cc +4 -2
  12. package/deps/rocksdb/rocksdb/cache/charged_cache.h +5 -3
  13. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +2683 -496
  14. package/deps/rocksdb/rocksdb/cache/clock_cache.h +580 -159
  15. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +145 -42
  16. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +20 -1
  17. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +391 -17
  18. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +7 -5
  19. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +309 -212
  20. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +0 -32
  21. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +439 -12
  22. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +44 -2
  23. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +11 -1
  24. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +16 -3
  25. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.cc +119 -0
  26. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.h +155 -0
  27. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +711 -0
  28. package/deps/rocksdb/rocksdb/cache/typed_cache.h +17 -11
  29. package/deps/rocksdb/rocksdb/crash_test.mk +14 -0
  30. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +28 -12
  31. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +1 -0
  32. package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +2 -1
  33. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -1
  34. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -1
  35. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
  36. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +1 -1
  37. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +20 -22
  38. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +1 -2
  39. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -1
  40. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +2 -3
  41. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +1 -1
  42. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +8 -0
  43. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -3
  44. package/deps/rocksdb/rocksdb/db/builder.cc +35 -10
  45. package/deps/rocksdb/rocksdb/db/c.cc +233 -6
  46. package/deps/rocksdb/rocksdb/db/c_test.c +140 -6
  47. package/deps/rocksdb/rocksdb/db/column_family.cc +110 -51
  48. package/deps/rocksdb/rocksdb/db/column_family.h +34 -2
  49. package/deps/rocksdb/rocksdb/db/column_family_test.cc +314 -7
  50. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -1
  51. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +106 -23
  52. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +47 -9
  53. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +10 -11
  54. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -6
  55. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +2 -2
  56. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +148 -60
  57. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +22 -7
  58. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -0
  59. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +8 -4
  60. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +33 -23
  61. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +14 -5
  62. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -11
  63. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +3 -0
  64. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +90 -4
  65. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +170 -95
  66. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +3 -1
  67. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +32 -58
  68. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +3 -1
  69. package/deps/rocksdb/rocksdb/db/convenience.cc +20 -3
  70. package/deps/rocksdb/rocksdb/db/convenience_impl.h +15 -0
  71. package/deps/rocksdb/rocksdb/db/corruption_test.cc +17 -0
  72. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
  73. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +46 -10
  74. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +13 -3
  75. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +74 -15
  76. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +27 -3
  77. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +850 -44
  78. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +2 -29
  79. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +275 -1
  80. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +52 -19
  81. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +6 -5
  82. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +733 -320
  83. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +155 -66
  84. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +516 -155
  85. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +8 -4
  86. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +2 -1
  87. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +17 -4
  88. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +100 -35
  89. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +95 -50
  90. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +13 -9
  91. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +136 -79
  92. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +6 -95
  93. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +31 -22
  94. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +6 -0
  95. package/deps/rocksdb/rocksdb/db/db_iter.cc +85 -57
  96. package/deps/rocksdb/rocksdb/db/db_iter.h +11 -2
  97. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +29 -0
  98. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +276 -21
  99. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +35 -0
  100. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +4 -11
  101. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +193 -7
  102. package/deps/rocksdb/rocksdb/db/db_options_test.cc +294 -26
  103. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +26 -36
  104. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +364 -0
  105. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +13 -3
  106. package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +52 -0
  107. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +74 -1
  108. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +22 -4
  109. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +1 -1
  110. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +1 -0
  111. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +282 -167
  112. package/deps/rocksdb/rocksdb/db/db_test.cc +180 -49
  113. package/deps/rocksdb/rocksdb/db/db_test2.cc +84 -12
  114. package/deps/rocksdb/rocksdb/db/db_test_util.cc +25 -12
  115. package/deps/rocksdb/rocksdb/db/db_test_util.h +45 -2
  116. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +14 -1
  117. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +245 -0
  118. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +480 -1
  119. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +6 -6
  120. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -2
  121. package/deps/rocksdb/rocksdb/db/dbformat.cc +36 -0
  122. package/deps/rocksdb/rocksdb/db/dbformat.h +169 -20
  123. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +129 -0
  124. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +2 -0
  125. package/deps/rocksdb/rocksdb/db/error_handler.cc +67 -34
  126. package/deps/rocksdb/rocksdb/db/error_handler.h +13 -9
  127. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
  128. package/deps/rocksdb/rocksdb/db/event_helpers.cc +4 -0
  129. package/deps/rocksdb/rocksdb/db/experimental.cc +2 -1
  130. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +4 -4
  131. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +17 -8
  132. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +144 -4
  133. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -1
  134. package/deps/rocksdb/rocksdb/db/file_indexer.cc +2 -4
  135. package/deps/rocksdb/rocksdb/db/flush_job.cc +105 -17
  136. package/deps/rocksdb/rocksdb/db/flush_job.h +27 -4
  137. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +90 -12
  138. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +2 -3
  139. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +159 -91
  140. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +19 -10
  141. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +143 -0
  142. package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -1
  143. package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
  144. package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -1
  145. package/deps/rocksdb/rocksdb/db/log_reader.h +3 -2
  146. package/deps/rocksdb/rocksdb/db/log_test.cc +17 -21
  147. package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
  148. package/deps/rocksdb/rocksdb/db/log_writer.h +3 -2
  149. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +6 -3
  150. package/deps/rocksdb/rocksdb/db/memtable.cc +70 -83
  151. package/deps/rocksdb/rocksdb/db/memtable.h +45 -1
  152. package/deps/rocksdb/rocksdb/db/memtable_list.cc +45 -11
  153. package/deps/rocksdb/rocksdb/db/memtable_list.h +43 -2
  154. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +91 -5
  155. package/deps/rocksdb/rocksdb/db/merge_helper.cc +330 -115
  156. package/deps/rocksdb/rocksdb/db/merge_helper.h +100 -12
  157. package/deps/rocksdb/rocksdb/db/merge_operator.cc +82 -0
  158. package/deps/rocksdb/rocksdb/db/merge_test.cc +267 -0
  159. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +5 -2
  160. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +4 -4
  161. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +3 -0
  162. package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -0
  163. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +4 -0
  164. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +4 -0
  165. package/deps/rocksdb/rocksdb/db/repair.cc +25 -7
  166. package/deps/rocksdb/rocksdb/db/repair_test.cc +143 -2
  167. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +459 -74
  168. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +105 -69
  169. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +83 -46
  170. package/deps/rocksdb/rocksdb/db/table_cache.cc +76 -54
  171. package/deps/rocksdb/rocksdb/db/table_cache.h +18 -12
  172. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
  173. package/deps/rocksdb/rocksdb/db/version_builder.cc +0 -1
  174. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +236 -204
  175. package/deps/rocksdb/rocksdb/db/version_edit.cc +66 -4
  176. package/deps/rocksdb/rocksdb/db/version_edit.h +58 -10
  177. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +80 -8
  178. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +12 -0
  179. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +86 -17
  180. package/deps/rocksdb/rocksdb/db/version_set.cc +207 -110
  181. package/deps/rocksdb/rocksdb/db/version_set.h +36 -15
  182. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +2 -5
  183. package/deps/rocksdb/rocksdb/db/version_set_test.cc +47 -26
  184. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +525 -0
  185. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +6 -22
  186. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +0 -20
  187. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +0 -29
  188. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.cc +46 -0
  189. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.h +40 -0
  190. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper_test.cc +39 -0
  191. package/deps/rocksdb/rocksdb/db/write_batch.cc +55 -20
  192. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +3 -0
  193. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +16 -0
  194. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
  195. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +4 -4
  196. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +4 -7
  197. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +88 -10
  198. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +37 -13
  199. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +110 -58
  200. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +42 -0
  201. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +68 -17
  202. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +34 -0
  203. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +8 -1
  204. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +429 -237
  205. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +13 -6
  206. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +21 -14
  207. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.cc +51 -0
  208. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.h +27 -0
  209. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +3 -6
  210. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +2 -0
  211. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +29 -38
  212. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +302 -101
  213. package/deps/rocksdb/rocksdb/env/env.cc +6 -2
  214. package/deps/rocksdb/rocksdb/env/env_encryption.cc +11 -165
  215. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +0 -17
  216. package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -2
  217. package/deps/rocksdb/rocksdb/env/env_test.cc +86 -2
  218. package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
  219. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +79 -0
  220. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +34 -0
  221. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -0
  222. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +15 -4
  223. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +100 -70
  224. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +64 -18
  225. package/deps/rocksdb/rocksdb/file/file_util.cc +10 -5
  226. package/deps/rocksdb/rocksdb/file/file_util.h +13 -1
  227. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1225 -97
  228. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +72 -33
  229. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -16
  230. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +23 -12
  231. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +3 -0
  232. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +40 -14
  233. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +163 -91
  234. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +112 -2
  235. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +108 -16
  236. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +11 -0
  237. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -0
  238. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +42 -2
  239. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +1 -1
  240. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +92 -12
  241. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +34 -4
  242. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +9 -109
  243. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +91 -13
  244. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +8 -3
  245. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +10 -4
  246. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +7 -0
  247. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +1 -1
  248. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +55 -4
  249. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +130 -22
  250. package/deps/rocksdb/rocksdb/include/rocksdb/port_defs.h +4 -0
  251. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +9 -0
  252. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +92 -9
  253. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +2 -1
  254. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +5 -1
  255. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +37 -2
  256. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +35 -0
  257. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +15 -0
  258. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +7 -1
  259. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +20 -3
  260. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +7 -0
  261. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +7 -0
  262. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +6 -1
  263. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +33 -2
  264. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +2 -1
  265. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +14 -0
  266. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +42 -2
  267. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +0 -3
  268. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  269. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +53 -2
  270. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -2
  271. package/deps/rocksdb/rocksdb/memory/arena_test.cc +18 -11
  272. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +4 -3
  273. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +1 -1
  274. package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
  275. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +69 -34
  276. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
  277. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +22 -1
  278. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +18 -7
  279. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +14 -0
  280. package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
  281. package/deps/rocksdb/rocksdb/options/cf_options.h +10 -2
  282. package/deps/rocksdb/rocksdb/options/customizable_test.cc +6 -1
  283. package/deps/rocksdb/rocksdb/options/db_options.cc +54 -2
  284. package/deps/rocksdb/rocksdb/options/db_options.h +4 -0
  285. package/deps/rocksdb/rocksdb/options/options.cc +15 -1
  286. package/deps/rocksdb/rocksdb/options/options_helper.cc +18 -0
  287. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +14 -4
  288. package/deps/rocksdb/rocksdb/options/options_test.cc +14 -1
  289. package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
  290. package/deps/rocksdb/rocksdb/port/README +10 -0
  291. package/deps/rocksdb/rocksdb/port/mmap.h +20 -0
  292. package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
  293. package/deps/rocksdb/rocksdb/port/port_posix.cc +1 -1
  294. package/deps/rocksdb/rocksdb/port/port_posix.h +7 -4
  295. package/deps/rocksdb/rocksdb/port/stack_trace.cc +32 -12
  296. package/deps/rocksdb/rocksdb/port/win/env_win.h +1 -1
  297. package/deps/rocksdb/rocksdb/port/win/port_win.h +5 -2
  298. package/deps/rocksdb/rocksdb/src.mk +10 -1
  299. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  300. package/deps/rocksdb/rocksdb/table/block_based/block.cc +48 -22
  301. package/deps/rocksdb/rocksdb/table/block_based/block.h +60 -12
  302. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +116 -43
  303. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +9 -6
  304. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +321 -49
  305. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +98 -4
  306. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +233 -98
  307. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +58 -23
  308. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +12 -8
  309. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +52 -24
  310. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +219 -51
  311. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +41 -8
  312. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -1
  313. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +3 -1
  314. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +26 -7
  315. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +50 -18
  316. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +20 -8
  317. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +232 -71
  318. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -6
  319. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +44 -26
  320. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +2 -1
  321. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  322. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +31 -16
  323. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +97 -58
  324. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -2
  325. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +6 -0
  326. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +36 -19
  327. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +3 -1
  328. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +114 -70
  329. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +4 -3
  330. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +11 -7
  331. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +15 -3
  332. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +6 -3
  333. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +1 -1
  334. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +14 -13
  335. package/deps/rocksdb/rocksdb/table/block_fetcher.h +4 -0
  336. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +9 -2
  337. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +1 -0
  338. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +6 -2
  339. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -2
  340. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +2 -3
  341. package/deps/rocksdb/rocksdb/table/format.cc +175 -33
  342. package/deps/rocksdb/rocksdb/table/format.h +63 -10
  343. package/deps/rocksdb/rocksdb/table/get_context.cc +52 -89
  344. package/deps/rocksdb/rocksdb/table/get_context.h +12 -3
  345. package/deps/rocksdb/rocksdb/table/internal_iterator.h +11 -0
  346. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +29 -1
  347. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +22 -2
  348. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +12 -4
  349. package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -0
  350. package/deps/rocksdb/rocksdb/table/mock_table.cc +8 -3
  351. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +10 -5
  352. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +10 -1
  353. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +1 -2
  354. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +3 -3
  355. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +45 -9
  356. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +1 -0
  357. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +24 -1
  358. package/deps/rocksdb/rocksdb/table/table_builder.h +6 -2
  359. package/deps/rocksdb/rocksdb/table/table_properties.cc +6 -0
  360. package/deps/rocksdb/rocksdb/table/table_reader.h +6 -0
  361. package/deps/rocksdb/rocksdb/table/table_test.cc +52 -22
  362. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +31 -0
  363. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.cc +2 -1
  364. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +19 -7
  365. package/deps/rocksdb/rocksdb/test_util/sync_point.h +3 -1
  366. package/deps/rocksdb/rocksdb/test_util/testutil.cc +29 -0
  367. package/deps/rocksdb/rocksdb/test_util/testutil.h +19 -0
  368. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim.py +3 -3
  369. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +87 -65
  370. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +221 -33
  371. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +36 -0
  372. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -1
  373. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
  374. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +33 -11
  375. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +4 -0
  376. package/deps/rocksdb/rocksdb/unreleased_history/README.txt +73 -0
  377. package/deps/rocksdb/rocksdb/unreleased_history/add.sh +27 -0
  378. package/deps/rocksdb/rocksdb/unreleased_history/behavior_changes/.gitkeep +0 -0
  379. package/deps/rocksdb/rocksdb/unreleased_history/bug_fixes/.gitkeep +0 -0
  380. package/deps/rocksdb/rocksdb/unreleased_history/new_features/.gitkeep +0 -0
  381. package/deps/rocksdb/rocksdb/unreleased_history/performance_improvements/.gitkeep +0 -0
  382. package/deps/rocksdb/rocksdb/unreleased_history/public_api_changes/.gitkeep +0 -0
  383. package/deps/rocksdb/rocksdb/unreleased_history/release.sh +104 -0
  384. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +5 -0
  385. package/deps/rocksdb/rocksdb/util/bloom_impl.h +3 -3
  386. package/deps/rocksdb/rocksdb/util/bloom_test.cc +32 -11
  387. package/deps/rocksdb/rocksdb/util/cast_util.h +24 -0
  388. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +2 -0
  389. package/deps/rocksdb/rocksdb/util/comparator.cc +55 -8
  390. package/deps/rocksdb/rocksdb/util/compression.cc +4 -4
  391. package/deps/rocksdb/rocksdb/util/compression.h +119 -35
  392. package/deps/rocksdb/rocksdb/util/core_local.h +2 -1
  393. package/deps/rocksdb/rocksdb/util/crc32c.cc +7 -1
  394. package/deps/rocksdb/rocksdb/util/distributed_mutex.h +1 -1
  395. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +4 -4
  396. package/deps/rocksdb/rocksdb/util/filelock_test.cc +3 -0
  397. package/deps/rocksdb/rocksdb/util/hash.h +7 -3
  398. package/deps/rocksdb/rocksdb/util/hash_test.cc +44 -0
  399. package/deps/rocksdb/rocksdb/util/math.h +58 -6
  400. package/deps/rocksdb/rocksdb/util/math128.h +29 -7
  401. package/deps/rocksdb/rocksdb/util/mutexlock.h +35 -27
  402. package/deps/rocksdb/rocksdb/util/overload.h +23 -0
  403. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +53 -18
  404. package/deps/rocksdb/rocksdb/util/rate_limiter_impl.h +6 -1
  405. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +90 -19
  406. package/deps/rocksdb/rocksdb/util/single_thread_executor.h +1 -0
  407. package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -0
  408. package/deps/rocksdb/rocksdb/util/status.cc +1 -0
  409. package/deps/rocksdb/rocksdb/util/stop_watch.h +1 -1
  410. package/deps/rocksdb/rocksdb/util/string_util.cc +39 -0
  411. package/deps/rocksdb/rocksdb/util/string_util.h +10 -0
  412. package/deps/rocksdb/rocksdb/util/thread_operation.h +10 -1
  413. package/deps/rocksdb/rocksdb/util/udt_util.cc +385 -0
  414. package/deps/rocksdb/rocksdb/util/udt_util.h +192 -1
  415. package/deps/rocksdb/rocksdb/util/udt_util_test.cc +461 -0
  416. package/deps/rocksdb/rocksdb/util/write_batch_util.cc +25 -0
  417. package/deps/rocksdb/rocksdb/util/write_batch_util.h +80 -0
  418. package/deps/rocksdb/rocksdb/util/xxhash.h +0 -3
  419. package/deps/rocksdb/rocksdb/util/xxph3.h +0 -4
  420. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +4 -4
  421. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +71 -26
  422. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +7 -6
  423. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +1 -1
  424. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -3
  425. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +6 -11
  426. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +1 -2
  427. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +4 -5
  428. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +1 -0
  429. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +20 -16
  430. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +11 -7
  431. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +2 -2
  432. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +7 -1
  433. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +3 -0
  434. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +12 -3
  435. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
  436. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +7 -4
  437. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +2 -3
  438. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +2 -2
  439. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  440. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +13 -0
  441. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +23 -8
  442. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +9 -6
  443. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +37 -12
  444. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +272 -33
  445. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +15 -9
  446. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +4 -1
  447. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +76 -20
  448. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +18 -9
  449. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +195 -23
  450. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +19 -12
  451. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +88 -1
  452. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -1
  453. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +43 -17
  454. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +6 -3
  455. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +73 -24
  456. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +19 -4
  457. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +60 -107
  458. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +41 -12
  459. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +6 -3
  460. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +15 -8
  461. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +1 -1
  462. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +10 -5
  463. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
  464. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -1
  465. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +59 -28
  466. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +127 -120
  467. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +129 -59
  468. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +111 -14
  469. package/deps/rocksdb/rocksdb.gyp +6 -2
  470. package/index.js +0 -8
  471. package/package.json +1 -1
  472. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  473. package/prebuilds/linux-x64/node.napi.node +0 -0
  474. package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +0 -7
  475. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +0 -29
  476. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +0 -29
  477. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +0 -29
  478. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +0 -33
  479. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +0 -29
  480. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +0 -29
  481. package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +0 -26
  482. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +0 -29
  483. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +0 -10
@@ -11,14 +11,34 @@
11
11
 
12
12
  namespace ROCKSDB_NAMESPACE {
13
13
 
14
- uint64_t SeqnoToTimeMapping::GetOldestApproximateTime(
15
- const SequenceNumber seqno) const {
14
+ SeqnoToTimeMapping::pair_const_iterator SeqnoToTimeMapping::FindGreaterTime(
15
+ uint64_t time) const {
16
+ return std::upper_bound(pairs_.cbegin(), pairs_.cend(),
17
+ SeqnoTimePair{0, time}, SeqnoTimePair::TimeLess);
18
+ }
19
+
20
+ SeqnoToTimeMapping::pair_const_iterator SeqnoToTimeMapping::FindGreaterEqSeqno(
21
+ SequenceNumber seqno) const {
22
+ return std::lower_bound(pairs_.cbegin(), pairs_.cend(),
23
+ SeqnoTimePair{seqno, 0}, SeqnoTimePair::SeqnoLess);
24
+ }
25
+
26
+ SeqnoToTimeMapping::pair_const_iterator SeqnoToTimeMapping::FindGreaterSeqno(
27
+ SequenceNumber seqno) const {
28
+ return std::upper_bound(pairs_.cbegin(), pairs_.cend(),
29
+ SeqnoTimePair{seqno, 0}, SeqnoTimePair::SeqnoLess);
30
+ }
31
+
32
+ uint64_t SeqnoToTimeMapping::GetProximalTimeBeforeSeqno(
33
+ SequenceNumber seqno) const {
16
34
  assert(is_sorted_);
17
- auto it = std::upper_bound(seqno_time_mapping_.begin(),
18
- seqno_time_mapping_.end(), seqno);
19
- if (it == seqno_time_mapping_.begin()) {
20
- return 0;
35
+ // Find the last entry with a seqno strictly less than the given seqno.
36
+ // First, find the first entry >= the given seqno (or end)
37
+ auto it = FindGreaterEqSeqno(seqno);
38
+ if (it == pairs_.cbegin()) {
39
+ return kUnknownTimeBeforeAll;
21
40
  }
41
+ // Then return data from previous.
22
42
  it--;
23
43
  return it->time;
24
44
  }
@@ -28,44 +48,47 @@ void SeqnoToTimeMapping::Add(SequenceNumber seqno, uint64_t time) {
28
48
  return;
29
49
  }
30
50
  is_sorted_ = false;
31
- seqno_time_mapping_.emplace_back(seqno, time);
51
+ pairs_.emplace_back(seqno, time);
32
52
  }
33
53
 
34
54
  void SeqnoToTimeMapping::TruncateOldEntries(const uint64_t now) {
35
55
  assert(is_sorted_);
36
56
 
37
57
  if (max_time_duration_ == 0) {
58
+ // No cutoff time
59
+ return;
60
+ }
61
+
62
+ if (now < max_time_duration_) {
63
+ // Would under-flow
38
64
  return;
39
65
  }
40
66
 
41
- const uint64_t cut_off_time =
42
- now > max_time_duration_ ? now - max_time_duration_ : 0;
43
- assert(cut_off_time <= now); // no overflow
67
+ const uint64_t cut_off_time = now - max_time_duration_;
68
+ assert(cut_off_time <= now); // no under/overflow
44
69
 
45
- auto it = std::upper_bound(
46
- seqno_time_mapping_.begin(), seqno_time_mapping_.end(), cut_off_time,
47
- [](uint64_t target, const SeqnoTimePair& other) -> bool {
48
- return target < other.time;
49
- });
50
- if (it == seqno_time_mapping_.begin()) {
70
+ auto it = FindGreaterTime(cut_off_time);
71
+ if (it == pairs_.cbegin()) {
51
72
  return;
52
73
  }
53
- it--;
54
- seqno_time_mapping_.erase(seqno_time_mapping_.begin(), it);
74
+ // Move back one, to the entry that would be used to return a good seqno from
75
+ // GetProximalSeqnoBeforeTime(cut_off_time)
76
+ --it;
77
+ // Remove everything strictly before that entry
78
+ pairs_.erase(pairs_.cbegin(), std::move(it));
55
79
  }
56
80
 
57
- SequenceNumber SeqnoToTimeMapping::GetOldestSequenceNum(uint64_t time) {
81
+ SequenceNumber SeqnoToTimeMapping::GetProximalSeqnoBeforeTime(uint64_t time) {
58
82
  assert(is_sorted_);
59
83
 
60
- auto it = std::upper_bound(
61
- seqno_time_mapping_.begin(), seqno_time_mapping_.end(), time,
62
- [](uint64_t target, const SeqnoTimePair& other) -> bool {
63
- return target < other.time;
64
- });
65
- if (it == seqno_time_mapping_.begin()) {
66
- return 0;
84
+ // Find the last entry with a time <= the given time.
85
+ // First, find the first entry > the given time (or end).
86
+ auto it = FindGreaterTime(time);
87
+ if (it == pairs_.cbegin()) {
88
+ return kUnknownSeqnoBeforeAll;
67
89
  }
68
- it--;
90
+ // Then return data from previous.
91
+ --it;
69
92
  return it->seqno;
70
93
  }
71
94
 
@@ -84,15 +107,13 @@ void SeqnoToTimeMapping::Encode(std::string& dest, const SequenceNumber start,
84
107
  return;
85
108
  }
86
109
 
87
- auto start_it = std::upper_bound(seqno_time_mapping_.begin(),
88
- seqno_time_mapping_.end(), start);
89
- if (start_it != seqno_time_mapping_.begin()) {
110
+ auto start_it = FindGreaterSeqno(start);
111
+ if (start_it != pairs_.begin()) {
90
112
  start_it--;
91
113
  }
92
114
 
93
- auto end_it = std::upper_bound(seqno_time_mapping_.begin(),
94
- seqno_time_mapping_.end(), end);
95
- if (end_it == seqno_time_mapping_.begin()) {
115
+ auto end_it = FindGreaterSeqno(end);
116
+ if (end_it == pairs_.begin()) {
96
117
  return;
97
118
  }
98
119
  if (start_it >= end_it) {
@@ -108,7 +129,7 @@ void SeqnoToTimeMapping::Encode(std::string& dest, const SequenceNumber start,
108
129
  }
109
130
  }
110
131
  // to include the first element
111
- if (start_it != seqno_time_mapping_.begin()) {
132
+ if (start_it != pairs_.begin()) {
112
133
  start_it--;
113
134
  }
114
135
 
@@ -166,14 +187,14 @@ void SeqnoToTimeMapping::Encode(std::string& dest, const SequenceNumber start,
166
187
  SeqnoTimePair base;
167
188
  for (auto it = start_it; it < end_it; it++) {
168
189
  assert(base < *it);
169
- SeqnoTimePair val = *it - base;
190
+ SeqnoTimePair val = it->ComputeDelta(base);
170
191
  base = *it;
171
192
  val.Encode(dest);
172
193
  }
173
194
  }
174
195
 
175
- Status SeqnoToTimeMapping::Add(const std::string& seqno_time_mapping_str) {
176
- Slice input(seqno_time_mapping_str);
196
+ Status SeqnoToTimeMapping::Add(const std::string& pairs_str) {
197
+ Slice input(pairs_str);
177
198
  if (input.empty()) {
178
199
  return Status::OK();
179
200
  }
@@ -189,8 +210,8 @@ Status SeqnoToTimeMapping::Add(const std::string& seqno_time_mapping_str) {
189
210
  if (!s.ok()) {
190
211
  return s;
191
212
  }
192
- val.Add(base);
193
- seqno_time_mapping_.emplace_back(val);
213
+ val.ApplyDelta(base);
214
+ pairs_.emplace_back(val);
194
215
  base = val;
195
216
  }
196
217
  return Status::OK();
@@ -222,33 +243,58 @@ bool SeqnoToTimeMapping::Append(SequenceNumber seqno, uint64_t time) {
222
243
  return false;
223
244
  }
224
245
  if (seqno == Last().seqno) {
225
- Last().time = time;
226
- return true;
246
+ // Updating Last() would hurt GetProximalSeqnoBeforeTime() queries, so
247
+ // NOT doing it (for now)
248
+ return false;
227
249
  }
228
250
  if (time == Last().time) {
229
- // new sequence has the same time as old one, no need to add new mapping
230
- return false;
251
+ // Updating Last() here helps GetProximalSeqnoBeforeTime() queries, so
252
+ // doing it (for now)
253
+ Last().seqno = seqno;
254
+ return true;
231
255
  }
232
256
  }
233
257
 
234
- seqno_time_mapping_.emplace_back(seqno, time);
258
+ pairs_.emplace_back(seqno, time);
235
259
 
236
- if (seqno_time_mapping_.size() > max_capacity_) {
237
- seqno_time_mapping_.pop_front();
260
+ if (pairs_.size() > max_capacity_) {
261
+ // FIXME: be smarter about how we erase to avoid data falling off the
262
+ // front prematurely.
263
+ pairs_.pop_front();
238
264
  }
239
265
  return true;
240
266
  }
241
267
 
268
+ bool SeqnoToTimeMapping::PrePopulate(SequenceNumber from_seqno,
269
+ SequenceNumber to_seqno,
270
+ uint64_t from_time, uint64_t to_time) {
271
+ assert(Empty());
272
+ assert(from_seqno > 0);
273
+ assert(to_seqno > from_seqno);
274
+ assert(from_time > kUnknownTimeBeforeAll);
275
+ assert(to_time >= from_time);
276
+
277
+ // TODO: smartly limit this to max_capacity_ representative samples
278
+ for (auto i = from_seqno; i <= to_seqno; i++) {
279
+ uint64_t t = from_time + (to_time - from_time) * (i - from_seqno) /
280
+ (to_seqno - from_seqno);
281
+ pairs_.emplace_back(i, t);
282
+ }
283
+
284
+ return /*success*/ true;
285
+ }
286
+
242
287
  bool SeqnoToTimeMapping::Resize(uint64_t min_time_duration,
243
288
  uint64_t max_time_duration) {
244
289
  uint64_t new_max_capacity =
245
290
  CalculateMaxCapacity(min_time_duration, max_time_duration);
246
291
  if (new_max_capacity == max_capacity_) {
247
292
  return false;
248
- } else if (new_max_capacity < seqno_time_mapping_.size()) {
249
- uint64_t delta = seqno_time_mapping_.size() - new_max_capacity;
250
- seqno_time_mapping_.erase(seqno_time_mapping_.begin(),
251
- seqno_time_mapping_.begin() + delta);
293
+ } else if (new_max_capacity < pairs_.size()) {
294
+ uint64_t delta = pairs_.size() - new_max_capacity;
295
+ // FIXME: be smarter about how we erase to avoid data falling off the
296
+ // front prematurely.
297
+ pairs_.erase(pairs_.begin(), pairs_.begin() + delta);
252
298
  }
253
299
  max_capacity_ = new_max_capacity;
254
300
  return true;
@@ -258,16 +304,16 @@ Status SeqnoToTimeMapping::Sort() {
258
304
  if (is_sorted_) {
259
305
  return Status::OK();
260
306
  }
261
- if (seqno_time_mapping_.empty()) {
307
+ if (pairs_.empty()) {
262
308
  is_sorted_ = true;
263
309
  return Status::OK();
264
310
  }
265
311
 
266
- std::deque<SeqnoTimePair> copy = std::move(seqno_time_mapping_);
312
+ std::deque<SeqnoTimePair> copy = std::move(pairs_);
267
313
 
268
314
  std::sort(copy.begin(), copy.end());
269
315
 
270
- seqno_time_mapping_.clear();
316
+ pairs_.clear();
271
317
 
272
318
  // remove seqno = 0, which may have special meaning, like zeroed out data
273
319
  while (copy.front().seqno == 0) {
@@ -285,12 +331,12 @@ Status SeqnoToTimeMapping::Sort() {
285
331
  assert(it.seqno > prev.seqno);
286
332
  // If a larger sequence number has an older time which is not useful, skip
287
333
  if (it.time > prev.time) {
288
- seqno_time_mapping_.push_back(prev);
334
+ pairs_.push_back(prev);
289
335
  prev = it;
290
336
  }
291
337
  }
292
338
  }
293
- seqno_time_mapping_.emplace_back(prev);
339
+ pairs_.emplace_back(prev);
294
340
 
295
341
  is_sorted_ = true;
296
342
  return Status::OK();
@@ -298,7 +344,7 @@ Status SeqnoToTimeMapping::Sort() {
298
344
 
299
345
  std::string SeqnoToTimeMapping::ToHumanString() const {
300
346
  std::string ret;
301
- for (const auto& seq_time : seqno_time_mapping_) {
347
+ for (const auto& seq_time : pairs_) {
302
348
  AppendNumberTo(&ret, seq_time.seqno);
303
349
  ret.append("->");
304
350
  AppendNumberTo(&ret, seq_time.time);
@@ -310,13 +356,11 @@ std::string SeqnoToTimeMapping::ToHumanString() const {
310
356
  SeqnoToTimeMapping SeqnoToTimeMapping::Copy(
311
357
  SequenceNumber smallest_seqno) const {
312
358
  SeqnoToTimeMapping ret;
313
- auto it = std::upper_bound(seqno_time_mapping_.begin(),
314
- seqno_time_mapping_.end(), smallest_seqno);
315
- if (it != seqno_time_mapping_.begin()) {
359
+ auto it = FindGreaterSeqno(smallest_seqno);
360
+ if (it != pairs_.begin()) {
316
361
  it--;
317
362
  }
318
- std::copy(it, seqno_time_mapping_.end(),
319
- std::back_inserter(ret.seqno_time_mapping_));
363
+ std::copy(it, pairs_.end(), std::back_inserter(ret.pairs_));
320
364
  return ret;
321
365
  }
322
366
 
@@ -330,12 +374,4 @@ uint64_t SeqnoToTimeMapping::CalculateMaxCapacity(uint64_t min_time_duration,
330
374
  max_time_duration * kMaxSeqnoTimePairsPerCF / min_time_duration);
331
375
  }
332
376
 
333
- SeqnoToTimeMapping::SeqnoTimePair SeqnoToTimeMapping::SeqnoTimePair::operator-(
334
- const SeqnoTimePair& other) const {
335
- SeqnoTimePair res;
336
- res.seqno = seqno - other.seqno;
337
- res.time = time - other.time;
338
- return res;
339
- }
340
-
341
377
  } // namespace ROCKSDB_NAMESPACE
@@ -18,20 +18,32 @@
18
18
 
19
19
  namespace ROCKSDB_NAMESPACE {
20
20
 
21
- constexpr uint64_t kUnknownSeqnoTime = 0;
22
-
23
- // SeqnoToTimeMapping stores the sequence number to time mapping, so given a
24
- // sequence number it can estimate the oldest possible time for that sequence
25
- // number. For example:
26
- // 10 -> 100
27
- // 50 -> 300
28
- // then if a key has seqno 19, the OldestApproximateTime would be 100, for 51 it
29
- // would be 300.
30
- // As it's a sorted list, the new entry is inserted from the back. The old data
31
- // will be popped from the front if they're no longer used.
21
+ constexpr uint64_t kUnknownTimeBeforeAll = 0;
22
+ constexpr SequenceNumber kUnknownSeqnoBeforeAll = 0;
23
+
24
+ // SeqnoToTimeMapping stores a sampled mapping from sequence numbers to
25
+ // unix times (seconds since epoch). This information provides rough bounds
26
+ // between sequence numbers and their write times, but is primarily designed
27
+ // for getting a best lower bound on the sequence number of data written no
28
+ // later than a specified time.
32
29
  //
33
- // Note: the data struct is not thread safe, both read and write need to be
34
- // synchronized by caller.
30
+ // For ease of sampling, it is assumed that the recorded time in each pair
31
+ // comes at or after the sequence number and before the next sequence number,
32
+ // so this example:
33
+ //
34
+ // Seqno: 10, 11, ... 20, 21, ... 30, 31, ...
35
+ // Time: ... 500 ... 600 ... 700 ...
36
+ //
37
+ // would be represented as
38
+ // 10 -> 500
39
+ // 20 -> 600
40
+ // 30 -> 700
41
+ //
42
+ // In typical operation, the list is sorted, both among seqnos and among times,
43
+ // with a bounded number of entries, but some public working states violate
44
+ // these constraints.
45
+ //
46
+ // NOT thread safe - requires external synchronization.
35
47
  class SeqnoToTimeMapping {
36
48
  public:
37
49
  // Maximum number of entries can be encoded into SST. The data is delta encode
@@ -63,28 +75,33 @@ class SeqnoToTimeMapping {
63
75
  // Decode the value from input Slice and remove it from the input
64
76
  Status Decode(Slice& input);
65
77
 
66
- // subtraction of 2 SeqnoTimePair
67
- SeqnoTimePair operator-(const SeqnoTimePair& other) const;
68
-
69
- // Add 2 values together
70
- void Add(const SeqnoTimePair& obj) {
71
- seqno += obj.seqno;
72
- time += obj.time;
78
+ // For delta encoding
79
+ SeqnoTimePair ComputeDelta(const SeqnoTimePair& base) const {
80
+ return {seqno - base.seqno, time - base.time};
73
81
  }
74
82
 
75
- // Compare SeqnoTimePair with a sequence number, used for binary search a
76
- // sequence number in a list of SeqnoTimePair
77
- bool operator<(const SequenceNumber& other) const { return seqno < other; }
83
+ // For delta decoding
84
+ void ApplyDelta(const SeqnoTimePair& delta_or_base) {
85
+ seqno += delta_or_base.seqno;
86
+ time += delta_or_base.time;
87
+ }
78
88
 
79
- // Compare 2 SeqnoTimePair
89
+ // Ordering used for Sort()
80
90
  bool operator<(const SeqnoTimePair& other) const {
81
91
  return std::tie(seqno, time) < std::tie(other.seqno, other.time);
82
92
  }
83
93
 
84
- // Check if 2 SeqnoTimePair is the same
85
94
  bool operator==(const SeqnoTimePair& other) const {
86
95
  return std::tie(seqno, time) == std::tie(other.seqno, other.time);
87
96
  }
97
+
98
+ static bool SeqnoLess(const SeqnoTimePair& a, const SeqnoTimePair& b) {
99
+ return a.seqno < b.seqno;
100
+ }
101
+
102
+ static bool TimeLess(const SeqnoTimePair& a, const SeqnoTimePair& b) {
103
+ return a.time < b.time;
104
+ }
88
105
  };
89
106
 
90
107
  // constractor of SeqnoToTimeMapping
@@ -99,20 +116,40 @@ class SeqnoToTimeMapping {
99
116
  uint64_t max_capacity = 0)
100
117
  : max_time_duration_(max_time_duration), max_capacity_(max_capacity) {}
101
118
 
119
+ // Both seqno range and time range are inclusive. ... TODO
120
+ //
121
+ bool PrePopulate(SequenceNumber from_seqno, SequenceNumber to_seqno,
122
+ uint64_t from_time, uint64_t to_time);
123
+
102
124
  // Append a new entry to the list. The new entry should be newer than the
103
125
  // existing ones. It maintains the internal sorted status.
104
126
  bool Append(SequenceNumber seqno, uint64_t time);
105
127
 
106
- // Given a sequence number, estimate it's oldest time
107
- uint64_t GetOldestApproximateTime(SequenceNumber seqno) const;
108
-
109
- // Truncate the old entries based on the current time and max_time_duration_
128
+ // Given a sequence number, return the best (largest / newest) known time
129
+ // that is no later than the write time of that given sequence number.
130
+ // If no such specific time is known, returns kUnknownTimeBeforeAll.
131
+ // Using the example in the class comment above,
132
+ // GetProximalTimeBeforeSeqno(10) -> kUnknownTimeBeforeAll
133
+ // GetProximalTimeBeforeSeqno(11) -> 500
134
+ // GetProximalTimeBeforeSeqno(20) -> 500
135
+ // GetProximalTimeBeforeSeqno(21) -> 600
136
+ uint64_t GetProximalTimeBeforeSeqno(SequenceNumber seqno) const;
137
+
138
+ // Remove any entries not needed for GetProximalSeqnoBeforeTime queries of
139
+ // times older than `now - max_time_duration_`
110
140
  void TruncateOldEntries(uint64_t now);
111
141
 
112
- // Given a time, return it's oldest possible sequence number
113
- SequenceNumber GetOldestSequenceNum(uint64_t time);
114
-
115
- // Encode to a binary string
142
+ // Given a time, return the best (largest) sequence number whose write time
143
+ // is no later than that given time. If no such specific sequence number is
144
+ // known, returns kUnknownSeqnoBeforeAll. Using the example in the class
145
+ // comment above,
146
+ // GetProximalSeqnoBeforeTime(499) -> kUnknownSeqnoBeforeAll
147
+ // GetProximalSeqnoBeforeTime(500) -> 10
148
+ // GetProximalSeqnoBeforeTime(599) -> 10
149
+ // GetProximalSeqnoBeforeTime(600) -> 20
150
+ SequenceNumber GetProximalSeqnoBeforeTime(uint64_t time);
151
+
152
+ // Encode to a binary string. start and end seqno are both inclusive.
116
153
  void Encode(std::string& des, SequenceNumber start, SequenceNumber end,
117
154
  uint64_t now,
118
155
  uint64_t output_size = kMaxSeqnoTimePairsPerSST) const;
@@ -122,10 +159,10 @@ class SeqnoToTimeMapping {
122
159
  void Add(SequenceNumber seqno, uint64_t time);
123
160
 
124
161
  // Decode and add the entries to the current obj. The list will be unsorted
125
- Status Add(const std::string& seqno_time_mapping_str);
162
+ Status Add(const std::string& pairs_str);
126
163
 
127
164
  // Return the number of entries
128
- size_t Size() const { return seqno_time_mapping_.size(); }
165
+ size_t Size() const { return pairs_.size(); }
129
166
 
130
167
  // Reduce the size of internal list
131
168
  bool Resize(uint64_t min_time_duration, uint64_t max_time_duration);
@@ -145,10 +182,10 @@ class SeqnoToTimeMapping {
145
182
  SeqnoToTimeMapping Copy(SequenceNumber smallest_seqno) const;
146
183
 
147
184
  // If the internal list is empty
148
- bool Empty() const { return seqno_time_mapping_.empty(); }
185
+ bool Empty() const { return pairs_.empty(); }
149
186
 
150
187
  // clear all entries
151
- void Clear() { seqno_time_mapping_.clear(); }
188
+ void Clear() { pairs_.clear(); }
152
189
 
153
190
  // return the string for user message
154
191
  // Note: Not efficient, okay for print
@@ -156,7 +193,7 @@ class SeqnoToTimeMapping {
156
193
 
157
194
  #ifndef NDEBUG
158
195
  const std::deque<SeqnoTimePair>& TEST_GetInternalMapping() const {
159
- return seqno_time_mapping_;
196
+ return pairs_;
160
197
  }
161
198
  #endif
162
199
 
@@ -167,7 +204,7 @@ class SeqnoToTimeMapping {
167
204
  uint64_t max_time_duration_;
168
205
  uint64_t max_capacity_;
169
206
 
170
- std::deque<SeqnoTimePair> seqno_time_mapping_;
207
+ std::deque<SeqnoTimePair> pairs_;
171
208
 
172
209
  bool is_sorted_ = true;
173
210
 
@@ -176,14 +213,14 @@ class SeqnoToTimeMapping {
176
213
 
177
214
  SeqnoTimePair& Last() {
178
215
  assert(!Empty());
179
- return seqno_time_mapping_.back();
216
+ return pairs_.back();
180
217
  }
181
- };
182
218
 
183
- // for searching the sequence number from SeqnoToTimeMapping
184
- inline bool operator<(const SequenceNumber& seqno,
185
- const SeqnoToTimeMapping::SeqnoTimePair& other) {
186
- return seqno < other.seqno;
187
- }
219
+ using pair_const_iterator =
220
+ std::deque<SeqnoToTimeMapping::SeqnoTimePair>::const_iterator;
221
+ pair_const_iterator FindGreaterTime(uint64_t time) const;
222
+ pair_const_iterator FindGreaterSeqno(SequenceNumber seqno) const;
223
+ pair_const_iterator FindGreaterEqSeqno(SequenceNumber seqno) const;
224
+ };
188
225
 
189
226
  } // namespace ROCKSDB_NAMESPACE