@nxtedition/rocksdb 10.0.13 → 10.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (700) hide show
  1. package/.tap/coverage/213879bb-47ae-470e-bb54-f4157d9f60e2.json +162898 -0
  2. package/.tap/processinfo/{4c642b53-6895-4ef0-9391-7c6b8d484262.json → 213879bb-47ae-470e-bb54-f4157d9f60e2.json} +117 -121
  3. package/.tap/test-results/node_modules/abstract-level/test/get-test.js.tap +0 -0
  4. package/.tap/test-results/test/abstract-level-test.js.tap +1705 -0
  5. package/.tap/test-results/test/batch-test.js.tap +12 -0
  6. package/.tap/test-results/test/chained-batch-gc-test.js.tap +11 -0
  7. package/.tap/test-results/test/cleanup-hanging-iterators-test.js.tap +58 -0
  8. package/.tap/test-results/test/clear-gc-test.js.tap +13 -0
  9. package/.tap/test-results/test/column-test.js.tap +55 -0
  10. package/.tap/test-results/test/common.js.tap +0 -0
  11. package/.tap/test-results/test/compression-test.js.tap +30 -0
  12. package/.tap/test-results/test/db-identity.js.tap +12 -0
  13. package/.tap/test-results/test/electron.js.tap +0 -0
  14. package/.tap/test-results/test/env-cleanup-hook-test.js.tap +2 -0
  15. package/.tap/test-results/test/env-cleanup-hook.js.tap +0 -0
  16. package/.tap/test-results/test/gc.js.tap +0 -0
  17. package/.tap/test-results/test/getproperty-test.js.tap +29 -0
  18. package/.tap/test-results/test/iterator-gc-test.js.tap +4 -0
  19. package/.tap/test-results/test/iterator-hwm-test.js.tap +24 -0
  20. package/.tap/test-results/test/iterator-recursion-test.js.tap +12 -0
  21. package/.tap/test-results/test/iterator-starvation-test.js.tap +2 -0
  22. package/.tap/test-results/test/iterator-test.js.tap +0 -0
  23. package/.tap/test-results/test/leak-tester-batch.js.tap +0 -0
  24. package/.tap/test-results/test/leak-tester-iterator.js.tap +0 -0
  25. package/.tap/test-results/test/leak-tester.js.tap +0 -0
  26. package/.tap/test-results/test/lock-test.js.tap +0 -0
  27. package/.tap/test-results/test/lock.js.tap +0 -0
  28. package/.tap/test-results/test/make.js.tap +0 -0
  29. package/.tap/test-results/test/max-rev-merge.js.tap +0 -12
  30. package/.tap/test-results/test/merge-operator-test.js.tap +0 -0
  31. package/.tap/test-results/test/mkdir-test.js.tap +0 -0
  32. package/.tap/test-results/test/segfault-test.js.tap +0 -0
  33. package/.tap/test-results/test/stack-blower.js.tap +0 -0
  34. package/binding.cc +42 -34
  35. package/deps/rocksdb/rocksdb/CMakeLists.txt +44 -14
  36. package/deps/rocksdb/rocksdb/Makefile +34 -17
  37. package/deps/rocksdb/rocksdb/TARGETS +27 -0
  38. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +95 -42
  39. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +0 -1
  40. package/deps/rocksdb/rocksdb/cache/cache_test.cc +5 -3
  41. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +381 -393
  42. package/deps/rocksdb/rocksdb/cache/clock_cache.h +88 -51
  43. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +14 -7
  44. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +1 -1
  45. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +21 -19
  46. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +8 -7
  47. package/deps/rocksdb/rocksdb/cache/lru_cache.h +1 -1
  48. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +89 -13
  49. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +16 -8
  50. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +6 -6
  51. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.cc +15 -9
  52. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.h +16 -13
  53. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +306 -23
  54. package/deps/rocksdb/rocksdb/cache/typed_cache.h +3 -4
  55. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +30 -27
  56. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +8 -10
  57. package/deps/rocksdb/rocksdb/db/attribute_group_iterator_impl.cc +20 -0
  58. package/deps/rocksdb/rocksdb/db/attribute_group_iterator_impl.h +83 -0
  59. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +19 -16
  60. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +6 -5
  61. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +18 -21
  62. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +5 -4
  63. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +7 -6
  64. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +56 -27
  65. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.h +11 -7
  66. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +20 -19
  67. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +106 -31
  68. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +5 -8
  69. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.cc +4 -2
  70. package/deps/rocksdb/rocksdb/db/builder.cc +89 -44
  71. package/deps/rocksdb/rocksdb/db/builder.h +4 -6
  72. package/deps/rocksdb/rocksdb/db/c.cc +205 -57
  73. package/deps/rocksdb/rocksdb/db/c_test.c +141 -20
  74. package/deps/rocksdb/rocksdb/db/coalescing_iterator.cc +47 -0
  75. package/deps/rocksdb/rocksdb/db/coalescing_iterator.h +79 -0
  76. package/deps/rocksdb/rocksdb/db/column_family.cc +100 -36
  77. package/deps/rocksdb/rocksdb/db/column_family.h +46 -28
  78. package/deps/rocksdb/rocksdb/db/column_family_test.cc +168 -46
  79. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +51 -6
  80. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +72 -24
  81. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +11 -14
  82. package/deps/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h +7 -0
  83. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +87 -8
  84. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -3
  85. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +310 -70
  86. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +78 -62
  87. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +0 -1
  88. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -3
  89. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +33 -96
  90. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +18 -10
  91. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +7 -8
  92. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +42 -22
  93. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +20 -16
  94. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +7 -3
  95. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +18 -17
  96. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +95 -10
  97. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +6 -7
  98. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +213 -34
  99. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +4 -4
  100. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +7 -8
  101. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +16 -16
  102. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +75 -142
  103. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +577 -34
  104. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +4 -4
  105. package/deps/rocksdb/rocksdb/db/convenience.cc +1 -1
  106. package/deps/rocksdb/rocksdb/db/corruption_test.cc +7 -38
  107. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +5 -5
  108. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +366 -136
  109. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +9 -10
  110. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +282 -6
  111. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +6 -6
  112. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +551 -150
  113. package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +1 -1
  114. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +41 -13
  115. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +54 -17
  116. package/deps/rocksdb/rocksdb/db/db_follower_test.cc +527 -0
  117. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +40 -58
  118. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +34 -45
  119. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +699 -580
  120. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +308 -230
  121. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +180 -107
  122. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +6 -2
  123. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +10 -6
  124. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +36 -61
  125. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +347 -0
  126. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.h +54 -0
  127. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +206 -155
  128. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +5 -8
  129. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +41 -39
  130. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +26 -22
  131. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +14 -9
  132. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +126 -46
  133. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +21 -9
  134. package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +294 -0
  135. package/deps/rocksdb/rocksdb/db/db_iter.cc +116 -78
  136. package/deps/rocksdb/rocksdb/db/db_iter.h +31 -7
  137. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +34 -14
  138. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +69 -8
  139. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +153 -18
  140. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +9 -11
  141. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +9 -1
  142. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +6 -2
  143. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +105 -0
  144. package/deps/rocksdb/rocksdb/db/db_options_test.cc +97 -111
  145. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +12 -3
  146. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +82 -30
  147. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +5 -7
  148. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +64 -22
  149. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +74 -0
  150. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +175 -47
  151. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +4 -3
  152. package/deps/rocksdb/rocksdb/db/db_test.cc +133 -109
  153. package/deps/rocksdb/rocksdb/db/db_test2.cc +227 -139
  154. package/deps/rocksdb/rocksdb/db/db_test_util.cc +42 -19
  155. package/deps/rocksdb/rocksdb/db/db_test_util.h +67 -24
  156. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +140 -2
  157. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +17 -19
  158. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +332 -87
  159. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +4 -4
  160. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +4 -4
  161. package/deps/rocksdb/rocksdb/db/db_write_test.cc +250 -30
  162. package/deps/rocksdb/rocksdb/db/dbformat.cc +41 -8
  163. package/deps/rocksdb/rocksdb/db/dbformat.h +100 -17
  164. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +48 -8
  165. package/deps/rocksdb/rocksdb/db/error_handler.cc +102 -116
  166. package/deps/rocksdb/rocksdb/db/error_handler.h +28 -6
  167. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +263 -99
  168. package/deps/rocksdb/rocksdb/db/event_helpers.cc +3 -1
  169. package/deps/rocksdb/rocksdb/db/experimental.cc +1073 -7
  170. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +261 -111
  171. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +263 -183
  172. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +31 -12
  173. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +698 -7
  174. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +5 -3
  175. package/deps/rocksdb/rocksdb/db/flush_job.cc +41 -41
  176. package/deps/rocksdb/rocksdb/db/flush_job.h +11 -8
  177. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +90 -13
  178. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +19 -6
  179. package/deps/rocksdb/rocksdb/db/forward_iterator.h +12 -12
  180. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +83 -52
  181. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +169 -2
  182. package/deps/rocksdb/rocksdb/db/internal_stats.cc +12 -6
  183. package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -2
  184. package/deps/rocksdb/rocksdb/db/job_context.h +17 -0
  185. package/deps/rocksdb/rocksdb/db/listener_test.cc +4 -4
  186. package/deps/rocksdb/rocksdb/db/log_reader.cc +44 -20
  187. package/deps/rocksdb/rocksdb/db/log_reader.h +3 -0
  188. package/deps/rocksdb/rocksdb/db/log_test.cc +81 -17
  189. package/deps/rocksdb/rocksdb/db/log_writer.cc +135 -92
  190. package/deps/rocksdb/rocksdb/db/log_writer.h +11 -10
  191. package/deps/rocksdb/rocksdb/db/malloc_stats.cc +2 -3
  192. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +1 -1
  193. package/deps/rocksdb/rocksdb/db/memtable.cc +82 -62
  194. package/deps/rocksdb/rocksdb/db/memtable.h +17 -9
  195. package/deps/rocksdb/rocksdb/db/memtable_list.cc +19 -13
  196. package/deps/rocksdb/rocksdb/db/memtable_list.h +3 -1
  197. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +38 -5
  198. package/deps/rocksdb/rocksdb/db/merge_context.h +3 -0
  199. package/deps/rocksdb/rocksdb/db/merge_helper.cc +34 -156
  200. package/deps/rocksdb/rocksdb/db/merge_helper.h +52 -46
  201. package/deps/rocksdb/rocksdb/db/merge_test.cc +16 -11
  202. package/deps/rocksdb/rocksdb/db/multi_cf_iterator_impl.h +289 -0
  203. package/deps/rocksdb/rocksdb/db/multi_cf_iterator_test.cc +918 -0
  204. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +4 -6
  205. package/deps/rocksdb/rocksdb/db/options_file_test.cc +4 -4
  206. package/deps/rocksdb/rocksdb/db/output_validator.cc +8 -12
  207. package/deps/rocksdb/rocksdb/db/output_validator.h +1 -4
  208. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +23 -4
  209. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +2 -3
  210. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +1 -1
  211. package/deps/rocksdb/rocksdb/db/pinned_iterators_manager.h +2 -2
  212. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +3 -6
  213. package/deps/rocksdb/rocksdb/db/prefix_test.cc +21 -8
  214. package/deps/rocksdb/rocksdb/db/range_del_aggregator.cc +0 -2
  215. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +0 -1
  216. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +17 -4
  217. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +6 -3
  218. package/deps/rocksdb/rocksdb/db/repair.cc +35 -29
  219. package/deps/rocksdb/rocksdb/db/repair_test.cc +1 -2
  220. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +428 -156
  221. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +393 -227
  222. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +154 -82
  223. package/deps/rocksdb/rocksdb/db/snapshot_checker.h +2 -2
  224. package/deps/rocksdb/rocksdb/db/table_cache.cc +9 -11
  225. package/deps/rocksdb/rocksdb/db/table_cache.h +2 -1
  226. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +8 -3
  227. package/deps/rocksdb/rocksdb/db/table_properties_collector.h +27 -26
  228. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +23 -23
  229. package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +5 -5
  230. package/deps/rocksdb/rocksdb/db/version_builder.cc +6 -0
  231. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +62 -29
  232. package/deps/rocksdb/rocksdb/db/version_edit.cc +1 -2
  233. package/deps/rocksdb/rocksdb/db/version_edit.h +30 -11
  234. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +291 -116
  235. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +54 -11
  236. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +3 -1
  237. package/deps/rocksdb/rocksdb/db/version_set.cc +301 -141
  238. package/deps/rocksdb/rocksdb/db/version_set.h +90 -33
  239. package/deps/rocksdb/rocksdb/db/version_set_test.cc +817 -193
  240. package/deps/rocksdb/rocksdb/db/version_util.h +10 -5
  241. package/deps/rocksdb/rocksdb/db/wal_manager.cc +15 -11
  242. package/deps/rocksdb/rocksdb/db/wal_manager.h +2 -1
  243. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +10 -9
  244. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +403 -28
  245. package/deps/rocksdb/rocksdb/db/wide/wide_columns.cc +2 -2
  246. package/deps/rocksdb/rocksdb/db/write_batch.cc +204 -18
  247. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +4 -0
  248. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +149 -5
  249. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +7 -7
  250. package/deps/rocksdb/rocksdb/db/write_stall_stats.h +7 -7
  251. package/deps/rocksdb/rocksdb/db/write_thread.cc +86 -47
  252. package/deps/rocksdb/rocksdb/db/write_thread.h +2 -0
  253. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +176 -68
  254. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +337 -125
  255. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +38 -9
  256. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +126 -34
  257. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +1 -1
  258. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.h +2 -2
  259. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +161 -1
  260. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +267 -9
  261. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +13 -7
  262. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +9 -9
  263. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +535 -86
  264. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +27 -5
  265. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +8 -15
  266. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +46 -21
  267. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +74 -4
  268. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +28 -11
  269. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +426 -151
  270. package/deps/rocksdb/rocksdb/env/composite_env.cc +1 -1
  271. package/deps/rocksdb/rocksdb/env/emulated_clock.h +6 -6
  272. package/deps/rocksdb/rocksdb/env/env.cc +21 -11
  273. package/deps/rocksdb/rocksdb/env/env_basic_test.cc +9 -9
  274. package/deps/rocksdb/rocksdb/env/env_chroot.cc +3 -2
  275. package/deps/rocksdb/rocksdb/env/env_encryption.cc +3 -3
  276. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +2 -2
  277. package/deps/rocksdb/rocksdb/env/env_posix.cc +12 -10
  278. package/deps/rocksdb/rocksdb/env/env_test.cc +24 -18
  279. package/deps/rocksdb/rocksdb/env/file_system.cc +7 -6
  280. package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +3 -3
  281. package/deps/rocksdb/rocksdb/env/file_system_tracer.h +3 -3
  282. package/deps/rocksdb/rocksdb/env/fs_on_demand.cc +331 -0
  283. package/deps/rocksdb/rocksdb/env/fs_on_demand.h +139 -0
  284. package/deps/rocksdb/rocksdb/env/fs_posix.cc +14 -15
  285. package/deps/rocksdb/rocksdb/env/io_posix.cc +15 -10
  286. package/deps/rocksdb/rocksdb/env/io_posix.h +86 -92
  287. package/deps/rocksdb/rocksdb/env/mock_env.cc +1 -1
  288. package/deps/rocksdb/rocksdb/env/mock_env_test.cc +6 -6
  289. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +8 -6
  290. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +1 -1
  291. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +599 -592
  292. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +312 -200
  293. package/deps/rocksdb/rocksdb/file/file_util.cc +19 -14
  294. package/deps/rocksdb/rocksdb/file/file_util.h +34 -24
  295. package/deps/rocksdb/rocksdb/file/filename.cc +32 -17
  296. package/deps/rocksdb/rocksdb/file/filename.h +51 -53
  297. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +82 -441
  298. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +7 -6
  299. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +5 -5
  300. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +9 -3
  301. package/deps/rocksdb/rocksdb/file/read_write_util.h +3 -3
  302. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +6 -2
  303. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +9 -4
  304. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +8 -4
  305. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +110 -89
  306. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +34 -17
  307. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +16 -0
  308. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +39 -189
  309. package/deps/rocksdb/rocksdb/include/rocksdb/attribute_groups.h +114 -0
  310. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +91 -6
  311. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +52 -7
  312. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +1 -1
  313. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +27 -0
  314. package/deps/rocksdb/rocksdb/include/rocksdb/compression_type.h +146 -0
  315. package/deps/rocksdb/rocksdb/include/rocksdb/concurrent_task_limiter.h +2 -2
  316. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +254 -151
  317. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +39 -36
  318. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +1 -1
  319. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +431 -0
  320. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +1 -1
  321. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +57 -23
  322. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +27 -57
  323. package/deps/rocksdb/rocksdb/include/rocksdb/iterator_base.h +74 -0
  324. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +2 -1
  325. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +1 -1
  326. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +11 -11
  327. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +1 -1
  328. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +146 -71
  329. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +6 -1
  330. package/deps/rocksdb/rocksdb/include/rocksdb/perf_level.h +7 -4
  331. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +17 -13
  332. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +17 -19
  333. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +5 -5
  334. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +10 -8
  335. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +18 -2
  336. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +12 -2
  337. package/deps/rocksdb/rocksdb/include/rocksdb/sst_partitioner.h +3 -3
  338. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +118 -116
  339. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +4 -4
  340. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +26 -21
  341. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +18 -6
  342. package/deps/rocksdb/rocksdb/include/rocksdb/threadpool.h +1 -1
  343. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +5 -5
  344. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record_result.h +8 -8
  345. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +12 -0
  346. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/cache_dump_load.h +4 -0
  347. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_mirror.h +3 -3
  348. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +8 -0
  349. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +1 -1
  350. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/option_change_migration.h +4 -4
  351. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +3 -3
  352. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +5 -6
  353. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +159 -167
  354. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +1 -2
  355. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +52 -17
  356. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +3 -4
  357. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/types_util.h +36 -0
  358. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +118 -20
  359. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  360. package/deps/rocksdb/rocksdb/include/rocksdb/wal_filter.h +1 -1
  361. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +87 -45
  362. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +26 -3
  363. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +22 -1
  364. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +7 -9
  365. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +5 -6
  366. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +2 -2
  367. package/deps/rocksdb/rocksdb/logging/env_logger.h +3 -3
  368. package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +1 -1
  369. package/deps/rocksdb/rocksdb/logging/log_buffer.h +3 -3
  370. package/deps/rocksdb/rocksdb/memory/arena.h +11 -0
  371. package/deps/rocksdb/rocksdb/memory/arena_test.cc +17 -2
  372. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +1 -1
  373. package/deps/rocksdb/rocksdb/memory/memory_allocator.cc +1 -0
  374. package/deps/rocksdb/rocksdb/memory/memory_allocator_impl.h +1 -1
  375. package/deps/rocksdb/rocksdb/memtable/alloc_tracker.cc +1 -1
  376. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +11 -10
  377. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +8 -7
  378. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +2 -2
  379. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +2 -2
  380. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -1
  381. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +3 -3
  382. package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +2 -2
  383. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +3 -1
  384. package/deps/rocksdb/rocksdb/monitoring/file_read_sample.h +2 -2
  385. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +20 -10
  386. package/deps/rocksdb/rocksdb/monitoring/histogram.h +15 -15
  387. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +7 -3
  388. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +14 -14
  389. package/deps/rocksdb/rocksdb/monitoring/in_memory_stats_history.cc +1 -1
  390. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +4 -0
  391. package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +8 -1
  392. package/deps/rocksdb/rocksdb/monitoring/perf_level.cc +1 -1
  393. package/deps/rocksdb/rocksdb/monitoring/persistent_stats_history.cc +5 -2
  394. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +64 -58
  395. package/deps/rocksdb/rocksdb/monitoring/statistics_impl.h +11 -12
  396. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +1 -1
  397. package/deps/rocksdb/rocksdb/monitoring/thread_status_impl.cc +1 -1
  398. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +7 -1
  399. package/deps/rocksdb/rocksdb/options/cf_options.cc +20 -28
  400. package/deps/rocksdb/rocksdb/options/cf_options.h +7 -14
  401. package/deps/rocksdb/rocksdb/options/configurable.cc +20 -12
  402. package/deps/rocksdb/rocksdb/options/configurable_test.cc +4 -6
  403. package/deps/rocksdb/rocksdb/options/configurable_test.h +2 -2
  404. package/deps/rocksdb/rocksdb/options/customizable.cc +1 -1
  405. package/deps/rocksdb/rocksdb/options/customizable_test.cc +3 -2
  406. package/deps/rocksdb/rocksdb/options/db_options.cc +22 -48
  407. package/deps/rocksdb/rocksdb/options/db_options.h +3 -3
  408. package/deps/rocksdb/rocksdb/options/offpeak_time_info.cc +59 -0
  409. package/deps/rocksdb/rocksdb/options/offpeak_time_info.h +37 -0
  410. package/deps/rocksdb/rocksdb/options/options.cc +14 -6
  411. package/deps/rocksdb/rocksdb/options/options_helper.cc +8 -13
  412. package/deps/rocksdb/rocksdb/options/options_helper.h +2 -3
  413. package/deps/rocksdb/rocksdb/options/options_parser.cc +35 -26
  414. package/deps/rocksdb/rocksdb/options/options_parser.h +4 -2
  415. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +3 -3
  416. package/deps/rocksdb/rocksdb/options/options_test.cc +30 -23
  417. package/deps/rocksdb/rocksdb/port/lang.h +1 -1
  418. package/deps/rocksdb/rocksdb/port/port_example.h +7 -7
  419. package/deps/rocksdb/rocksdb/port/port_posix.cc +7 -7
  420. package/deps/rocksdb/rocksdb/port/port_posix.h +7 -7
  421. package/deps/rocksdb/rocksdb/port/stack_trace.cc +85 -24
  422. package/deps/rocksdb/rocksdb/port/win/env_win.cc +1 -2
  423. package/deps/rocksdb/rocksdb/port/win/io_win.cc +4 -4
  424. package/deps/rocksdb/rocksdb/port/win/io_win.h +13 -17
  425. package/deps/rocksdb/rocksdb/port/win/port_win.cc +3 -2
  426. package/deps/rocksdb/rocksdb/port/win/port_win.h +4 -4
  427. package/deps/rocksdb/rocksdb/src.mk +16 -1
  428. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +1 -7
  429. package/deps/rocksdb/rocksdb/table/block_based/block.cc +39 -15
  430. package/deps/rocksdb/rocksdb/table/block_based/block.h +7 -7
  431. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +80 -40
  432. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +2 -3
  433. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +20 -5
  434. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +228 -122
  435. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +50 -9
  436. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +82 -25
  437. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +17 -20
  438. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +47 -13
  439. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +163 -50
  440. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +1 -2
  441. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +23 -23
  442. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +2 -12
  443. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +1 -2
  444. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +6 -4
  445. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +32 -27
  446. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +1 -1
  447. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +7 -10
  448. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +2 -2
  449. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +1 -2
  450. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +25 -7
  451. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +3 -5
  452. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +4 -6
  453. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +6 -6
  454. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +1 -1
  455. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +3 -5
  456. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +2 -2
  457. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +4 -5
  458. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +138 -86
  459. package/deps/rocksdb/rocksdb/table/block_fetcher.h +22 -0
  460. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +26 -13
  461. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +11 -11
  462. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +11 -11
  463. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +10 -5
  464. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +6 -7
  465. package/deps/rocksdb/rocksdb/table/format.cc +15 -21
  466. package/deps/rocksdb/rocksdb/table/format.h +8 -0
  467. package/deps/rocksdb/rocksdb/table/get_context.cc +121 -78
  468. package/deps/rocksdb/rocksdb/table/get_context.h +11 -6
  469. package/deps/rocksdb/rocksdb/table/internal_iterator.h +12 -5
  470. package/deps/rocksdb/rocksdb/table/iterator.cc +4 -0
  471. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -1
  472. package/deps/rocksdb/rocksdb/table/merger_test.cc +1 -1
  473. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +5 -0
  474. package/deps/rocksdb/rocksdb/table/merging_iterator.h +4 -3
  475. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +15 -11
  476. package/deps/rocksdb/rocksdb/table/meta_blocks.h +8 -4
  477. package/deps/rocksdb/rocksdb/table/mock_table.cc +12 -8
  478. package/deps/rocksdb/rocksdb/table/mock_table.h +1 -3
  479. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +0 -1
  480. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +29 -21
  481. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +4 -14
  482. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +7 -8
  483. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +7 -5
  484. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +15 -8
  485. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +1 -1
  486. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +75 -30
  487. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +7 -2
  488. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +76 -11
  489. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +358 -2
  490. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +93 -16
  491. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +12 -12
  492. package/deps/rocksdb/rocksdb/table/table_builder.h +12 -6
  493. package/deps/rocksdb/rocksdb/table/table_iterator.h +69 -0
  494. package/deps/rocksdb/rocksdb/table/table_properties.cc +1 -1
  495. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +8 -6
  496. package/deps/rocksdb/rocksdb/table/table_test.cc +732 -121
  497. package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +3 -1
  498. package/deps/rocksdb/rocksdb/table/two_level_iterator.h +1 -1
  499. package/deps/rocksdb/rocksdb/table/unique_id.cc +2 -2
  500. package/deps/rocksdb/rocksdb/test_util/mock_time_env.cc +2 -2
  501. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +5 -5
  502. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.cc +2 -6
  503. package/deps/rocksdb/rocksdb/test_util/testharness.cc +2 -4
  504. package/deps/rocksdb/rocksdb/test_util/testutil.cc +56 -32
  505. package/deps/rocksdb/rocksdb/test_util/testutil.h +57 -34
  506. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +18 -1
  507. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +1 -0
  508. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +3 -3
  509. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +210 -112
  510. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +3 -3
  511. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +1 -1
  512. package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +22 -27
  513. package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +10 -4
  514. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +328 -59
  515. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +34 -2
  516. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +64 -17
  517. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +8 -1
  518. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +3 -2
  519. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +136 -10
  520. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +4 -2
  521. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +50 -8
  522. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +51 -45
  523. package/deps/rocksdb/rocksdb/trace_replay/trace_record.cc +1 -1
  524. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.h +10 -10
  525. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +14 -4
  526. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.h +2 -1
  527. package/deps/rocksdb/rocksdb/unreleased_history/README.txt +2 -2
  528. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +2 -4
  529. package/deps/rocksdb/rocksdb/util/atomic.h +111 -0
  530. package/deps/rocksdb/rocksdb/util/autovector.h +5 -1
  531. package/deps/rocksdb/rocksdb/util/bloom_test.cc +12 -2
  532. package/deps/rocksdb/rocksdb/util/cast_util.h +22 -0
  533. package/deps/rocksdb/rocksdb/util/coding.h +34 -38
  534. package/deps/rocksdb/rocksdb/util/coding_test.cc +1 -1
  535. package/deps/rocksdb/rocksdb/util/comparator.cc +18 -5
  536. package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +1 -1
  537. package/deps/rocksdb/rocksdb/util/concurrent_task_limiter_impl.h +4 -4
  538. package/deps/rocksdb/rocksdb/util/crc32c.cc +3 -6
  539. package/deps/rocksdb/rocksdb/util/crc32c.h +3 -3
  540. package/deps/rocksdb/rocksdb/util/crc32c_arm64.h +3 -4
  541. package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +1 -2
  542. package/deps/rocksdb/rocksdb/util/crc32c_test.cc +2 -4
  543. package/deps/rocksdb/rocksdb/util/data_structure.cc +2 -4
  544. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +3 -2
  545. package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +3 -3
  546. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +83 -59
  547. package/deps/rocksdb/rocksdb/util/filelock_test.cc +3 -3
  548. package/deps/rocksdb/rocksdb/util/hash.h +4 -4
  549. package/deps/rocksdb/rocksdb/util/log_write_bench.cc +3 -3
  550. package/deps/rocksdb/rocksdb/util/murmurhash.cc +1 -1
  551. package/deps/rocksdb/rocksdb/util/random.cc +3 -4
  552. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +23 -43
  553. package/deps/rocksdb/rocksdb/util/rate_limiter_impl.h +21 -16
  554. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +44 -24
  555. package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +2 -3
  556. package/deps/rocksdb/rocksdb/util/ribbon_config.cc +2 -10
  557. package/deps/rocksdb/rocksdb/util/ribbon_impl.h +2 -2
  558. package/deps/rocksdb/rocksdb/util/slice.cc +4 -5
  559. package/deps/rocksdb/rocksdb/util/slice_test.cc +70 -4
  560. package/deps/rocksdb/rocksdb/util/status.cc +1 -1
  561. package/deps/rocksdb/rocksdb/util/stderr_logger.cc +39 -7
  562. package/deps/rocksdb/rocksdb/util/stderr_logger.h +12 -2
  563. package/deps/rocksdb/rocksdb/util/string_util.cc +31 -18
  564. package/deps/rocksdb/rocksdb/util/string_util.h +9 -9
  565. package/deps/rocksdb/rocksdb/util/string_util_test.cc +36 -0
  566. package/deps/rocksdb/rocksdb/util/thread_list_test.cc +5 -5
  567. package/deps/rocksdb/rocksdb/util/thread_local.cc +1 -1
  568. package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +3 -4
  569. package/deps/rocksdb/rocksdb/util/threadpool_imp.h +1 -1
  570. package/deps/rocksdb/rocksdb/util/udt_util_test.cc +4 -4
  571. package/deps/rocksdb/rocksdb/util/vector_iterator.h +12 -16
  572. package/deps/rocksdb/rocksdb/util/write_batch_util.h +5 -0
  573. package/deps/rocksdb/rocksdb/util/xxhash.h +116 -116
  574. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +4 -5
  575. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_impl.h +2 -2
  576. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +1 -2
  577. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +33 -31
  578. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +123 -22
  579. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +9 -7
  580. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +3 -6
  581. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +22 -55
  582. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +113 -74
  583. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +36 -24
  584. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +27 -11
  585. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +5 -3
  586. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +68 -54
  587. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +3 -6
  588. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +16 -16
  589. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +3 -2
  590. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +29 -9
  591. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +27 -14
  592. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +2 -4
  593. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +3 -3
  594. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_format_test.cc +2 -4
  595. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +2 -4
  596. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_row_merge_test.cc +2 -4
  597. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_serialize_test.cc +2 -4
  598. package/deps/rocksdb/rocksdb/utilities/cassandra/format.cc +2 -4
  599. package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +8 -8
  600. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +3 -7
  601. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +7 -8
  602. package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.cc +2 -4
  603. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +9 -7
  604. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +7 -10
  605. package/deps/rocksdb/rocksdb/utilities/debug.cc +6 -2
  606. package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +18 -11
  607. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +2 -2
  608. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +18 -25
  609. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +32 -23
  610. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +51 -48
  611. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +5 -3
  612. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +2 -2
  613. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -1
  614. package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +2 -3
  615. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +3 -1
  616. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +7 -7
  617. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +10 -10
  618. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.cc +5 -6
  619. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +5 -6
  620. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +1 -1
  621. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +1 -8
  622. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +29 -21
  623. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +14 -15
  624. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +2 -2
  625. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -1
  626. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_bench.cc +3 -3
  627. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_test.cc +3 -5
  628. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
  629. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.cc +2 -2
  630. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +8 -8
  631. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +4 -4
  632. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +1 -1
  633. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.h +6 -9
  634. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector_test.cc +2 -2
  635. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +1 -1
  636. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.h +6 -6
  637. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +1 -2
  638. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +2 -3
  639. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  640. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.h +1 -1
  641. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +1 -1
  642. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/db.h +5 -0
  643. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/manager.cc +1 -1
  644. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/range_buffer.cc +3 -3
  645. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/wfg.cc +1 -1
  646. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_assert_subst.h +4 -0
  647. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_external_pthread.h +4 -0
  648. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +1 -1
  649. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/txn_subst.h +4 -0
  650. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/standalone_port.cc +12 -3
  651. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/dbt.cc +17 -3
  652. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/growable_array.h +3 -3
  653. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/partitioned_counter.h +1 -1
  654. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +3 -3
  655. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_tracker.cc +4 -2
  656. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_tracker.h +1 -1
  657. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +1 -2
  658. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +2 -3
  659. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +3 -4
  660. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +442 -10
  661. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +27 -9
  662. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +28 -7
  663. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +70 -12
  664. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +50 -22
  665. package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +1 -1
  666. package/deps/rocksdb/rocksdb/utilities/transactions/timestamped_snapshot_test.cc +1 -1
  667. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +64 -3
  668. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +76 -17
  669. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.cc +6 -6
  670. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +573 -77
  671. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +6 -2
  672. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +65 -3
  673. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +13 -11
  674. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +1 -0
  675. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +14 -16
  676. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +37 -24
  677. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +23 -29
  678. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +4 -2
  679. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +31 -40
  680. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +8 -6
  681. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +3 -4
  682. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +34 -18
  683. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +21 -25
  684. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +26 -5
  685. package/deps/rocksdb/rocksdb/utilities/types_util.cc +88 -0
  686. package/deps/rocksdb/rocksdb/utilities/types_util_test.cc +98 -0
  687. package/deps/rocksdb/rocksdb/utilities/util_merge_operators_test.cc +1 -1
  688. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +463 -90
  689. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +259 -76
  690. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +70 -14
  691. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +609 -10
  692. package/deps/rocksdb/rocksdb.gyp +8 -4
  693. package/index.js +18 -4
  694. package/max_rev_operator.h +2 -0
  695. package/package.json +2 -2
  696. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  697. package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
  698. package/util.h +29 -5
  699. package/.tap/coverage/4c642b53-6895-4ef0-9391-7c6b8d484262.json +0 -14334
  700. package/deps/rocksdb/rocksdb/table/scoped_arena_iterator.h +0 -57
@@ -375,7 +375,7 @@ TEST_F(DBBasicTestWithTimestamp, UpdateFullHistoryTsLowWithPublicAPI) {
375
375
  ts_low_str_long);
376
376
  ASSERT_EQ(s, Status::InvalidArgument());
377
377
  // test IncreaseFullHistoryTsLow with a timestamp which is null
378
- std::string ts_low_str_null = "";
378
+ std::string ts_low_str_null;
379
379
  s = db_->IncreaseFullHistoryTsLow(db_->DefaultColumnFamily(),
380
380
  ts_low_str_null);
381
381
  ASSERT_EQ(s, Status::InvalidArgument());
@@ -430,8 +430,8 @@ TEST_F(DBBasicTestWithTimestamp, GetApproximateSizes) {
430
430
  std::vector<Range> ranges;
431
431
  std::string start_tmp = Key(10);
432
432
  std::string end_tmp = Key(20);
433
- ranges.emplace_back(Range(start_tmp, end_tmp));
434
- ranges.emplace_back(Range(start, end));
433
+ ranges.emplace_back(start_tmp, end_tmp);
434
+ ranges.emplace_back(start, end);
435
435
  uint64_t range_sizes[2];
436
436
  ASSERT_OK(db_->GetApproximateSizes(size_approx_options, default_cf,
437
437
  ranges.data(), 2, range_sizes));
@@ -598,8 +598,7 @@ TEST_F(DBBasicTestWithTimestamp, TrimHistoryTest) {
598
598
 
599
599
  ColumnFamilyOptions cf_options(options);
600
600
  std::vector<ColumnFamilyDescriptor> column_families;
601
- column_families.push_back(
602
- ColumnFamilyDescriptor(kDefaultColumnFamilyName, cf_options));
601
+ column_families.emplace_back(kDefaultColumnFamilyName, cf_options);
603
602
  DBOptions db_options(options);
604
603
 
605
604
  // Trim data whose version > Timestamp(5, 0), read(k1, ts(7)) <- NOT_FOUND.
@@ -642,8 +641,7 @@ TEST_F(DBBasicTestWithTimestamp, OpenAndTrimHistoryInvalidOptionTest) {
642
641
 
643
642
  ColumnFamilyOptions cf_options(options);
644
643
  std::vector<ColumnFamilyDescriptor> column_families;
645
- column_families.push_back(
646
- ColumnFamilyDescriptor(kDefaultColumnFamilyName, cf_options));
644
+ column_families.emplace_back(kDefaultColumnFamilyName, cf_options);
647
645
  DBOptions db_options(options);
648
646
 
649
647
  // OpenAndTrimHistory should not work with avoid_flush_during_recovery
@@ -1646,35 +1644,88 @@ TEST_F(DBBasicTestWithTimestamp, GetWithRowCache) {
1646
1644
 
1647
1645
  const Snapshot* snap_with_nothing = db_->GetSnapshot();
1648
1646
  ASSERT_OK(db_->Put(write_opts, "foo", ts_early, "bar"));
1649
- const Snapshot* snap_with_foo = db_->GetSnapshot();
1647
+ ASSERT_OK(db_->Put(write_opts, "foo2", ts_early, "bar2"));
1648
+ ASSERT_OK(db_->Put(write_opts, "foo3", ts_early, "bar3"));
1650
1649
 
1651
- // Ensure file has sequence number greater than snapshot_with_foo
1652
- for (int i = 0; i < 10; i++) {
1653
- std::string numStr = std::to_string(i);
1654
- ASSERT_OK(db_->Put(write_opts, numStr, ts_later, numStr));
1655
- }
1650
+ const Snapshot* snap_with_foo = db_->GetSnapshot();
1656
1651
  ASSERT_OK(Flush());
1657
- ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_HIT), 0);
1658
- ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_MISS), 0);
1659
1652
 
1660
1653
  ReadOptions read_opts;
1661
1654
  read_opts.timestamp = &ts_later_slice;
1662
1655
 
1663
1656
  std::string read_value;
1664
1657
  std::string read_ts;
1665
- Status s = db_->Get(read_opts, "foo", &read_value, &read_ts);
1666
- ASSERT_OK(s);
1667
- ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_HIT), 0);
1668
- ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_MISS), 1);
1669
- ASSERT_EQ(read_ts, ts_early);
1658
+ Status s;
1670
1659
 
1671
- s = db_->Get(read_opts, "foo", &read_value, &read_ts);
1672
- ASSERT_OK(s);
1673
- ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_HIT), 1);
1674
- ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_MISS), 1);
1675
- // Row cache is not storing the ts when record is inserted/updated.
1676
- // To be fixed after enabling ROW_CACHE with timestamp.
1677
- // ASSERT_EQ(read_ts, ts_early);
1660
+ int expected_hit_count = 0;
1661
+ int expected_miss_count = 0;
1662
+ ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_HIT), expected_hit_count);
1663
+ ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_MISS), expected_miss_count);
1664
+
1665
+ {
1666
+ read_opts.timestamp = nullptr;
1667
+ s = db_->Get(read_opts, "foo", &read_value);
1668
+ ASSERT_NOK(s);
1669
+ ASSERT_TRUE(s.IsInvalidArgument());
1670
+ }
1671
+
1672
+ // Mix use of Get
1673
+ {
1674
+ read_opts.timestamp = &ts_later_slice;
1675
+
1676
+ // Use Get without ts first, expect cache entry to store the correct ts
1677
+ s = db_->Get(read_opts, "foo2", &read_value);
1678
+ ASSERT_OK(s);
1679
+ ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_HIT), expected_hit_count);
1680
+ ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_MISS),
1681
+ ++expected_miss_count);
1682
+ ASSERT_EQ(read_value, "bar2");
1683
+
1684
+ s = db_->Get(read_opts, "foo2", &read_value, &read_ts);
1685
+ ASSERT_OK(s);
1686
+ ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_HIT), ++expected_hit_count);
1687
+ ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_MISS), expected_miss_count);
1688
+ ASSERT_EQ(read_ts, ts_early);
1689
+ ASSERT_EQ(read_value, "bar2");
1690
+
1691
+ // Use Get with ts first, expect the Get without ts can get correct record
1692
+ s = db_->Get(read_opts, "foo3", &read_value, &read_ts);
1693
+ ASSERT_OK(s);
1694
+ ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_HIT), expected_hit_count);
1695
+ ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_MISS),
1696
+ ++expected_miss_count);
1697
+ ASSERT_EQ(read_ts, ts_early);
1698
+ ASSERT_EQ(read_value, "bar3");
1699
+
1700
+ s = db_->Get(read_opts, "foo3", &read_value);
1701
+ ASSERT_OK(s);
1702
+ ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_HIT), ++expected_hit_count);
1703
+ ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_MISS), expected_miss_count);
1704
+ ASSERT_EQ(read_value, "bar3");
1705
+ }
1706
+
1707
+ {
1708
+ // Test with consecutive calls of Get with ts.
1709
+ s = db_->Get(read_opts, "foo", &read_value, &read_ts);
1710
+ ASSERT_OK(s);
1711
+ ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_HIT), expected_hit_count);
1712
+ ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_MISS),
1713
+ ++expected_miss_count);
1714
+ ASSERT_EQ(read_ts, ts_early);
1715
+ ASSERT_EQ(read_value, "bar");
1716
+
1717
+ // Test repeated get on cache entry
1718
+ for (int i = 0; i < 3; i++) {
1719
+ s = db_->Get(read_opts, "foo", &read_value, &read_ts);
1720
+ ASSERT_OK(s);
1721
+ ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_HIT),
1722
+ ++expected_hit_count);
1723
+ ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_MISS),
1724
+ expected_miss_count);
1725
+ ASSERT_EQ(read_ts, ts_early);
1726
+ ASSERT_EQ(read_value, "bar");
1727
+ }
1728
+ }
1678
1729
 
1679
1730
  {
1680
1731
  std::string ts_nothing = Timestamp(0, 0);
@@ -1682,41 +1733,43 @@ TEST_F(DBBasicTestWithTimestamp, GetWithRowCache) {
1682
1733
  read_opts.timestamp = &ts_nothing_slice;
1683
1734
  s = db_->Get(read_opts, "foo", &read_value, &read_ts);
1684
1735
  ASSERT_TRUE(s.IsNotFound());
1685
- ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_HIT), 1);
1686
- ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_MISS), 2);
1687
-
1688
- read_opts.timestamp = &ts_later_slice;
1689
- s = db_->Get(read_opts, "foo", &read_value, &read_ts);
1690
- ASSERT_OK(s);
1691
- ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_HIT), 2);
1692
- ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_MISS), 2);
1736
+ ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_HIT), expected_hit_count);
1737
+ ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_MISS),
1738
+ ++expected_miss_count);
1693
1739
  }
1694
1740
 
1695
1741
  {
1696
1742
  read_opts.snapshot = snap_with_foo;
1697
-
1743
+ read_opts.timestamp = &ts_later_slice;
1698
1744
  s = db_->Get(read_opts, "foo", &read_value, &read_ts);
1699
1745
  ASSERT_OK(s);
1700
- ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_HIT), 2);
1701
- ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_MISS), 3);
1746
+ ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_HIT), expected_hit_count);
1747
+ ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_MISS),
1748
+ ++expected_miss_count);
1749
+ ASSERT_EQ(read_ts, ts_early);
1750
+ ASSERT_EQ(read_value, "bar");
1702
1751
 
1703
1752
  s = db_->Get(read_opts, "foo", &read_value, &read_ts);
1704
1753
  ASSERT_OK(s);
1705
- ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_HIT), 3);
1706
- ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_MISS), 3);
1754
+ ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_HIT), ++expected_hit_count);
1755
+ ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_MISS), expected_miss_count);
1756
+ ASSERT_EQ(read_ts, ts_early);
1757
+ ASSERT_EQ(read_value, "bar");
1707
1758
  }
1708
1759
 
1709
1760
  {
1710
1761
  read_opts.snapshot = snap_with_nothing;
1711
1762
  s = db_->Get(read_opts, "foo", &read_value, &read_ts);
1712
1763
  ASSERT_TRUE(s.IsNotFound());
1713
- ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_HIT), 3);
1714
- ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_MISS), 4);
1764
+ ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_HIT), expected_hit_count);
1765
+ ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_MISS),
1766
+ ++expected_miss_count);
1715
1767
 
1716
1768
  s = db_->Get(read_opts, "foo", &read_value, &read_ts);
1717
1769
  ASSERT_TRUE(s.IsNotFound());
1718
- ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_HIT), 3);
1719
- ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_MISS), 5);
1770
+ ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_HIT), expected_hit_count);
1771
+ ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_MISS),
1772
+ ++expected_miss_count);
1720
1773
  }
1721
1774
 
1722
1775
  db_->ReleaseSnapshot(snap_with_nothing);
@@ -1724,6 +1777,65 @@ TEST_F(DBBasicTestWithTimestamp, GetWithRowCache) {
1724
1777
  Close();
1725
1778
  }
1726
1779
 
1780
+ TEST_F(DBBasicTestWithTimestamp, GetWithRowCacheMultiSST) {
1781
+ BlockBasedTableOptions table_options;
1782
+ table_options.block_size = 1;
1783
+ Options options = CurrentOptions();
1784
+ options.env = env_;
1785
+ options.create_if_missing = true;
1786
+ options.statistics = ROCKSDB_NAMESPACE::CreateDBStatistics();
1787
+ LRUCacheOptions cache_options;
1788
+ cache_options.capacity = 8192;
1789
+ options.row_cache = cache_options.MakeSharedRowCache();
1790
+
1791
+ const size_t kTimestampSize = Timestamp(0, 0).size();
1792
+ TestComparator test_cmp(kTimestampSize);
1793
+ options.comparator = &test_cmp;
1794
+ options.table_factory.reset(NewBlockBasedTableFactory(table_options));
1795
+ options.merge_operator = MergeOperators::CreateStringAppendTESTOperator();
1796
+ options.disable_auto_compactions = true;
1797
+
1798
+ DestroyAndReopen(options);
1799
+
1800
+ std::string ts_early = Timestamp(1, 0);
1801
+ std::string ts_later = Timestamp(10, 0);
1802
+ Slice ts_later_slice = ts_later;
1803
+
1804
+ ASSERT_OK(db_->Put(WriteOptions(), "foo", ts_early, "v1"));
1805
+ ASSERT_OK(Flush());
1806
+
1807
+ ColumnFamilyHandle* default_cf = db_->DefaultColumnFamily();
1808
+ ASSERT_OK(
1809
+ db_->Merge(WriteOptions(), default_cf, "foo", Timestamp(2, 0), "v2"));
1810
+ ASSERT_OK(
1811
+ db_->Merge(WriteOptions(), default_cf, "foo", Timestamp(3, 0), "v3"));
1812
+ ASSERT_OK(Flush());
1813
+
1814
+ ReadOptions read_opts;
1815
+ read_opts.timestamp = &ts_later_slice;
1816
+
1817
+ std::string read_value;
1818
+ std::string read_ts;
1819
+ Status s;
1820
+
1821
+ {
1822
+ // Since there are two SST files, will trigger the table lookup twice.
1823
+ s = db_->Get(read_opts, "foo", &read_value, &read_ts);
1824
+ ASSERT_OK(s);
1825
+ ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_HIT), 0);
1826
+ ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_MISS), 2);
1827
+ ASSERT_EQ(read_ts, Timestamp(3, 0));
1828
+ ASSERT_EQ(read_value, "v1,v2,v3");
1829
+
1830
+ s = db_->Get(read_opts, "foo", &read_value, &read_ts);
1831
+ ASSERT_OK(s);
1832
+ ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_HIT), 2);
1833
+ ASSERT_EQ(TestGetTickerCount(options, ROW_CACHE_MISS), 2);
1834
+ ASSERT_EQ(read_ts, Timestamp(3, 0));
1835
+ ASSERT_EQ(read_value, "v1,v2,v3");
1836
+ }
1837
+ }
1838
+
1727
1839
  TEST_P(DBBasicTestWithTimestampTableOptions, MultiGetPrefixFilter) {
1728
1840
  Options options = CurrentOptions();
1729
1841
  options.env = env_;
@@ -2498,10 +2610,10 @@ TEST_F(DataVisibilityTest, MultiGetWithoutSnapshot) {
2498
2610
 
2499
2611
  SyncPoint::GetInstance()->DisableProcessing();
2500
2612
  SyncPoint::GetInstance()->LoadDependency({
2501
- {"DBImpl::MultiGet:AfterGetSeqNum1",
2613
+ {"DBImpl::MultiCFSnapshot:AfterGetSeqNum1",
2502
2614
  "DataVisibilityTest::MultiGetWithoutSnapshot:BeforePut"},
2503
2615
  {"DataVisibilityTest::MultiGetWithoutSnapshot:AfterPut",
2504
- "DBImpl::MultiGet:AfterGetSeqNum2"},
2616
+ "DBImpl::MultiCFSnapshot:AfterGetSeqNum2"},
2505
2617
  });
2506
2618
  SyncPoint::GetInstance()->EnableProcessing();
2507
2619
  port::Thread writer_thread([this]() {
@@ -2520,7 +2632,7 @@ TEST_F(DataVisibilityTest, MultiGetWithoutSnapshot) {
2520
2632
  auto ss = db_->MultiGet(read_opts, keys, &values);
2521
2633
 
2522
2634
  writer_thread.join();
2523
- for (auto s : ss) {
2635
+ for (const auto& s : ss) {
2524
2636
  ASSERT_TRUE(s.IsNotFound());
2525
2637
  }
2526
2638
  VerifyDefaultCF();
@@ -2790,8 +2902,8 @@ TEST_P(DBBasicTestWithTimestampCompressionSettings, PutDeleteGet) {
2790
2902
  // A class which remembers the name of each flushed file.
2791
2903
  class FlushedFileCollector : public EventListener {
2792
2904
  public:
2793
- FlushedFileCollector() {}
2794
- ~FlushedFileCollector() override {}
2905
+ FlushedFileCollector() = default;
2906
+ ~FlushedFileCollector() override = default;
2795
2907
 
2796
2908
  void OnFlushCompleted(DB* /*db*/, const FlushJobInfo& info) override {
2797
2909
  InstrumentedMutexLock lock(&mutex_);
@@ -2973,7 +3085,7 @@ TEST_F(DBBasicTestWithTimestamp, BatchWriteAndMultiGet) {
2973
3085
  key_vals.push_back(Key1(j));
2974
3086
  }
2975
3087
  for (size_t j = 0; j != kNumKeysPerTimestamp; ++j) {
2976
- keys.push_back(key_vals[j]);
3088
+ keys.emplace_back(key_vals[j]);
2977
3089
  }
2978
3090
 
2979
3091
  ReadOptions ropts;
@@ -3378,7 +3490,7 @@ TEST_F(UpdateFullHistoryTsLowTest, ConcurrentUpdate) {
3378
3490
  VersionEdit* version_edit;
3379
3491
  SyncPoint::GetInstance()->SetCallBack(
3380
3492
  "DBImpl::IncreaseFullHistoryTsLowImpl:BeforeEdit",
3381
- [&](void* arg) { version_edit = reinterpret_cast<VersionEdit*>(arg); });
3493
+ [&](void* arg) { version_edit = static_cast<VersionEdit*>(arg); });
3382
3494
  SyncPoint::GetInstance()->SetCallBack(
3383
3495
  "VersionSet::LogAndApply:BeforeWriterWaiting",
3384
3496
  [&](void* /*arg*/) { version_edit->SetFullHistoryTsLow(higher_ts_low); });
@@ -3403,7 +3515,7 @@ class HandleFileBoundariesTest
3403
3515
  : DBBasicTestWithTimestampBase("/handle_file_boundaries") {}
3404
3516
  };
3405
3517
 
3406
- TEST_P(HandleFileBoundariesTest, ConfigurePersistUdt) {
3518
+ TEST_P(HandleFileBoundariesTest, ConfigurePersistUdtWithPut) {
3407
3519
  Options options = CurrentOptions();
3408
3520
  options.env = env_;
3409
3521
  // Write a timestamp that is not the min timestamp to help test the behavior
@@ -3427,7 +3539,7 @@ TEST_P(HandleFileBoundariesTest, ConfigurePersistUdt) {
3427
3539
  ASSERT_OK(
3428
3540
  db_->Put(WriteOptions(), largest_ukey_without_ts, write_ts, "val2"));
3429
3541
 
3430
- // Create a L0 SST file and its record is added to the Manfiest.
3542
+ // Create a L0 SST file and its record is added to the Manifest.
3431
3543
  ASSERT_OK(Flush());
3432
3544
  Close();
3433
3545
 
@@ -3459,6 +3571,61 @@ TEST_P(HandleFileBoundariesTest, ConfigurePersistUdt) {
3459
3571
  Close();
3460
3572
  }
3461
3573
 
3574
+ TEST_P(HandleFileBoundariesTest, ConfigurePersistUdtWithRangeDelete) {
3575
+ Options options = CurrentOptions();
3576
+ options.env = env_;
3577
+ // Write a timestamp that is not the min/max timestamp to help test the
3578
+ // behavior of flag `persist_user_defined_timestamps`.
3579
+ std::string write_ts;
3580
+ std::string min_ts;
3581
+ std::string max_ts;
3582
+ PutFixed64(&write_ts, 1);
3583
+ PutFixed64(&min_ts, 0);
3584
+ PutFixed64(&max_ts, std::numeric_limits<uint64_t>::max());
3585
+ std::string smallest_ukey_without_ts = "bar";
3586
+ std::string largest_ukey_without_ts = "foo";
3587
+ options.comparator = test::BytewiseComparatorWithU64TsWrapper();
3588
+ bool persist_udt = test::ShouldPersistUDT(GetParam());
3589
+ options.persist_user_defined_timestamps = persist_udt;
3590
+ if (!persist_udt) {
3591
+ options.allow_concurrent_memtable_write = false;
3592
+ }
3593
+ DestroyAndReopen(options);
3594
+
3595
+ ASSERT_OK(db_->DeleteRange(WriteOptions(), db_->DefaultColumnFamily(),
3596
+ smallest_ukey_without_ts, largest_ukey_without_ts,
3597
+ write_ts));
3598
+
3599
+ // Create a L0 SST file and its record is added to the Manifest.
3600
+ ASSERT_OK(Flush());
3601
+ Close();
3602
+
3603
+ options.create_if_missing = false;
3604
+ // Reopen the DB and process manifest file.
3605
+ Reopen(options);
3606
+
3607
+ std::vector<std::vector<FileMetaData>> level_to_files;
3608
+ dbfull()->TEST_GetFilesMetaData(dbfull()->DefaultColumnFamily(),
3609
+ &level_to_files);
3610
+ ASSERT_GT(level_to_files.size(), 1);
3611
+ // L0 only has one SST file.
3612
+ ASSERT_EQ(level_to_files[0].size(), 1);
3613
+ auto file_meta = level_to_files[0][0];
3614
+ if (persist_udt) {
3615
+ ASSERT_EQ(smallest_ukey_without_ts + write_ts,
3616
+ file_meta.smallest.user_key());
3617
+ } else {
3618
+ ASSERT_EQ(smallest_ukey_without_ts + min_ts, file_meta.smallest.user_key());
3619
+ }
3620
+ // When right file boundary comes from range deletion, it uses max timestamp
3621
+ // and a range deletion sentinel that uses the max sequence number to mark the
3622
+ // end key exclusive. This is regardless of whether timestamp is persisted.
3623
+ ASSERT_EQ(largest_ukey_without_ts + max_ts, file_meta.largest.user_key());
3624
+ auto largest_footer = ExtractInternalKeyFooter(file_meta.largest.Encode());
3625
+ ASSERT_EQ(largest_footer, kRangeTombstoneSentinel);
3626
+ Close();
3627
+ }
3628
+
3462
3629
  INSTANTIATE_TEST_CASE_P(
3463
3630
  ConfigurePersistUdt, HandleFileBoundariesTest,
3464
3631
  ::testing::Values(
@@ -3679,12 +3846,12 @@ TEST_F(DBBasicTestWithTimestamp, FullHistoryTsLowSanityCheckFail) {
3679
3846
  std::vector<Slice> keys;
3680
3847
  std::vector<std::string> values;
3681
3848
  for (size_t j = 0; j < 2; ++j) {
3682
- keys.push_back(key_vals[j]);
3849
+ keys.emplace_back(key_vals[j]);
3683
3850
  }
3684
3851
 
3685
3852
  std::vector<Status> statuses =
3686
3853
  db_->MultiGet(read_opts, cfhs, keys, &values);
3687
- for (auto status : statuses) {
3854
+ for (const auto& status : statuses) {
3688
3855
  ASSERT_TRUE(status.IsInvalidArgument());
3689
3856
  }
3690
3857
  }
@@ -3696,12 +3863,12 @@ TEST_F(DBBasicTestWithTimestamp, FullHistoryTsLowSanityCheckFail) {
3696
3863
  std::vector<Slice> keys;
3697
3864
  std::vector<std::string> values;
3698
3865
  for (size_t j = 0; j < 1; ++j) {
3699
- keys.push_back(key_vals[j]);
3866
+ keys.emplace_back(key_vals[j]);
3700
3867
  }
3701
3868
 
3702
3869
  std::vector<Status> statuses =
3703
3870
  db_->MultiGet(read_opts, one_cfh, keys, &values);
3704
- for (auto status : statuses) {
3871
+ for (const auto& status : statuses) {
3705
3872
  ASSERT_TRUE(status.IsInvalidArgument());
3706
3873
  }
3707
3874
  }
@@ -3714,7 +3881,7 @@ TEST_F(DBBasicTestWithTimestamp, FullHistoryTsLowSanityCheckFail) {
3714
3881
  Status statuses[] = {Status::OK(), Status::OK()};
3715
3882
  db_->MultiGet(read_opts, /*num_keys=*/2, &column_families[0], &keys[0],
3716
3883
  &values[0], &statuses[0], /*sorted_input=*/false);
3717
- for (auto status : statuses) {
3884
+ for (const auto& status : statuses) {
3718
3885
  ASSERT_TRUE(status.IsInvalidArgument());
3719
3886
  }
3720
3887
  }
@@ -3727,7 +3894,7 @@ TEST_F(DBBasicTestWithTimestamp, FullHistoryTsLowSanityCheckFail) {
3727
3894
  Status statuses[] = {Status::OK()};
3728
3895
  db_->MultiGet(read_opts, /*num_keys=*/1, &one_column_family[0], &keys[0],
3729
3896
  &values[0], &statuses[0], /*sorted_input=*/false);
3730
- for (auto status : statuses) {
3897
+ for (const auto& status : statuses) {
3731
3898
  ASSERT_TRUE(status.IsInvalidArgument());
3732
3899
  }
3733
3900
  }
@@ -3894,42 +4061,80 @@ TEST_F(DBBasicTestWithTimestamp,
3894
4061
  Close();
3895
4062
  }
3896
4063
 
3897
- TEST_P(DBBasicTestWithTimestampTableOptions, DeleteRangeBaiscReadAndIterate) {
4064
+ class DeleteRangeWithTimestampTableOptions
4065
+ : public DBBasicTestWithTimestampBase,
4066
+ public testing::WithParamInterface<
4067
+ std::tuple<BlockBasedTableOptions::IndexType,
4068
+ test::UserDefinedTimestampTestMode>> {
4069
+ public:
4070
+ explicit DeleteRangeWithTimestampTableOptions()
4071
+ : DBBasicTestWithTimestampBase(
4072
+ "delete_range_with_timestamp_table_options") {}
4073
+ };
4074
+
4075
+ INSTANTIATE_TEST_CASE_P(
4076
+ Timestamp, DeleteRangeWithTimestampTableOptions,
4077
+ testing::Combine(
4078
+ testing::Values(
4079
+ BlockBasedTableOptions::IndexType::kBinarySearch,
4080
+ BlockBasedTableOptions::IndexType::kHashSearch,
4081
+ BlockBasedTableOptions::IndexType::kTwoLevelIndexSearch,
4082
+ BlockBasedTableOptions::IndexType::kBinarySearchWithFirstKey),
4083
+ testing::Values(
4084
+ test::UserDefinedTimestampTestMode::kNormal,
4085
+ test::UserDefinedTimestampTestMode::kStripUserDefinedTimestamp)));
4086
+
4087
+ TEST_P(DeleteRangeWithTimestampTableOptions, BasicReadAndIterate) {
3898
4088
  const int kNum = 200, kRangeBegin = 50, kRangeEnd = 150, kNumPerFile = 25;
3899
4089
  Options options = CurrentOptions();
4090
+ options.disable_auto_compactions = true;
3900
4091
  options.prefix_extractor.reset(NewFixedPrefixTransform(3));
3901
4092
  options.compression = kNoCompression;
3902
4093
  BlockBasedTableOptions bbto;
3903
- bbto.index_type = GetParam();
4094
+ bbto.index_type = std::get<0>(GetParam());
3904
4095
  bbto.block_size = 100;
3905
4096
  options.table_factory.reset(NewBlockBasedTableFactory(bbto));
3906
4097
  options.env = env_;
3907
4098
  options.create_if_missing = true;
3908
- const size_t kTimestampSize = Timestamp(0, 0).size();
3909
- TestComparator test_cmp(kTimestampSize);
3910
- options.comparator = &test_cmp;
4099
+ bool persist_udt = test::ShouldPersistUDT(std::get<1>(GetParam()));
4100
+ options.comparator = test::BytewiseComparatorWithU64TsWrapper();
4101
+ options.persist_user_defined_timestamps = persist_udt;
4102
+ // UDT in memtables only not compatible with concurrent memtable writes.
4103
+ options.allow_concurrent_memtable_write = persist_udt;
3911
4104
  options.memtable_factory.reset(test::NewSpecialSkipListFactory(kNumPerFile));
3912
4105
  DestroyAndReopen(options);
3913
4106
 
3914
4107
  // Write half of the keys before the tombstone and half after the tombstone.
3915
4108
  // Only covered keys (i.e., within the range and older than the tombstone)
3916
4109
  // should be deleted.
4110
+ std::string full_history_ts_low;
4111
+ int cutoff_ts = 0;
3917
4112
  for (int i = 0; i < kNum; ++i) {
4113
+ std::string write_ts;
4114
+ PutFixed64(&write_ts, i);
3918
4115
  if (i == kNum / 2) {
3919
4116
  ASSERT_OK(db_->DeleteRange(WriteOptions(), db_->DefaultColumnFamily(),
3920
- Key1(kRangeBegin), Key1(kRangeEnd),
3921
- Timestamp(i, 0)));
4117
+ Key1(kRangeBegin), Key1(kRangeEnd), write_ts));
3922
4118
  }
3923
- ASSERT_OK(db_->Put(WriteOptions(), Key1(i), Timestamp(i, 0),
3924
- "val" + std::to_string(i)));
4119
+ ASSERT_OK(
4120
+ db_->Put(WriteOptions(), Key1(i), write_ts, "val" + std::to_string(i)));
3925
4121
  if (i == kNum - kNumPerFile) {
4122
+ if (!persist_udt) {
4123
+ // When UDTs are not persisted, mark the timestamps in the Memtables as
4124
+ // all expired so the followed flush can go through.
4125
+ cutoff_ts = i + 1;
4126
+ PutFixed64(&full_history_ts_low, cutoff_ts);
4127
+ ASSERT_OK(db_->IncreaseFullHistoryTsLow(db_->DefaultColumnFamily(),
4128
+ full_history_ts_low));
4129
+ }
3926
4130
  ASSERT_OK(Flush());
3927
4131
  }
3928
4132
  }
3929
4133
 
3930
4134
  ReadOptions read_opts;
3931
4135
  read_opts.total_order_seek = true;
3932
- std::string read_ts = Timestamp(kNum, 0);
4136
+ std::string read_ts;
4137
+ PutFixed64(&read_ts, kNum);
3933
4138
  Slice read_ts_slice = read_ts;
3934
4139
  read_opts.timestamp = &read_ts_slice;
3935
4140
  {
@@ -3964,33 +4169,43 @@ TEST_P(DBBasicTestWithTimestampTableOptions, DeleteRangeBaiscReadAndIterate) {
3964
4169
  ASSERT_OK(iter->status());
3965
4170
  ASSERT_EQ(-1, expected);
3966
4171
 
3967
- read_ts = Timestamp(0, 0);
3968
- read_ts_slice = read_ts;
3969
- read_opts.timestamp = &read_ts_slice;
3970
- iter.reset(db_->NewIterator(read_opts));
3971
- iter->SeekToFirst();
3972
- ASSERT_TRUE(iter->Valid());
3973
- ASSERT_EQ(iter->key(), Key1(0));
3974
- iter->Next();
3975
- ASSERT_FALSE(iter->Valid());
3976
- ASSERT_OK(iter->status());
4172
+ // Cannot read below the cutoff timestamp when timestamps are not persisted.
4173
+ if (persist_udt) {
4174
+ read_ts.clear();
4175
+ PutFixed64(&read_ts, 0);
4176
+ read_ts_slice = read_ts;
4177
+ read_opts.timestamp = &read_ts_slice;
4178
+ iter.reset(db_->NewIterator(read_opts));
4179
+ iter->SeekToFirst();
4180
+ ASSERT_TRUE(iter->Valid());
4181
+ ASSERT_EQ(iter->key(), Key1(0));
4182
+ iter->Next();
4183
+ ASSERT_FALSE(iter->Valid());
4184
+ ASSERT_OK(iter->status());
4185
+ }
3977
4186
  }
3978
4187
 
3979
- read_ts = Timestamp(kNum, 0);
4188
+ read_ts.clear();
4189
+ PutFixed64(&read_ts, kNum);
3980
4190
  read_ts_slice = read_ts;
3981
4191
  read_opts.timestamp = &read_ts_slice;
3982
4192
  std::string value, timestamp;
3983
4193
  Status s;
4194
+ std::string expected_ts;
4195
+ int int_expected_ts;
3984
4196
  for (int i = 0; i < kNum; ++i) {
3985
4197
  s = db_->Get(read_opts, Key1(i), &value, &timestamp);
3986
4198
  if (i >= kRangeBegin && i < kNum / 2) {
3987
4199
  ASSERT_TRUE(s.IsNotFound());
3988
- ASSERT_EQ(timestamp, Timestamp(kNum / 2, 0));
4200
+ int_expected_ts = (persist_udt || kNum / 2 >= cutoff_ts) ? kNum / 2 : 0;
3989
4201
  } else {
3990
4202
  ASSERT_OK(s);
3991
4203
  ASSERT_EQ(value, "val" + std::to_string(i));
3992
- ASSERT_EQ(timestamp, Timestamp(i, 0));
4204
+ int_expected_ts = (persist_udt || i >= cutoff_ts) ? i : 0;
3993
4205
  }
4206
+ expected_ts.clear();
4207
+ PutFixed64(&expected_ts, int_expected_ts);
4208
+ ASSERT_EQ(timestamp, expected_ts);
3994
4209
  }
3995
4210
 
3996
4211
  size_t batch_size = kNum;
@@ -4009,11 +4224,41 @@ TEST_P(DBBasicTestWithTimestampTableOptions, DeleteRangeBaiscReadAndIterate) {
4009
4224
  for (int i = 0; i < kNum; ++i) {
4010
4225
  if (i >= kRangeBegin && i < kNum / 2) {
4011
4226
  ASSERT_TRUE(statuses[i].IsNotFound());
4012
- ASSERT_EQ(timestamps[i], Timestamp(kNum / 2, 0));
4227
+ int_expected_ts = (persist_udt || kNum / 2 >= cutoff_ts) ? kNum / 2 : 0;
4013
4228
  } else {
4014
4229
  ASSERT_OK(statuses[i]);
4015
4230
  ASSERT_EQ(values[i], "val" + std::to_string(i));
4016
- ASSERT_EQ(timestamps[i], Timestamp(i, 0));
4231
+ int_expected_ts = (persist_udt || i >= cutoff_ts) ? i : 0;
4232
+ }
4233
+ expected_ts.clear();
4234
+ PutFixed64(&expected_ts, int_expected_ts);
4235
+ ASSERT_EQ(timestamps[i], expected_ts);
4236
+ }
4237
+
4238
+ CompactRangeOptions cro;
4239
+ cro.bottommost_level_compaction = BottommostLevelCompaction::kForce;
4240
+ if (!persist_udt) {
4241
+ // Mark everything expired so manual compaction can go through
4242
+ full_history_ts_low.clear();
4243
+ PutFixed64(&full_history_ts_low, kNum);
4244
+ ASSERT_OK(db_->IncreaseFullHistoryTsLow(db_->DefaultColumnFamily(),
4245
+ full_history_ts_low));
4246
+ }
4247
+ Slice compaction_ts = full_history_ts_low;
4248
+ cro.full_history_ts_low = &compaction_ts;
4249
+ ASSERT_OK(db_->CompactRange(cro, nullptr, nullptr));
4250
+ for (int i = kRangeBegin; i < kNum / 2; ++i) {
4251
+ s = db_->Get(read_opts, Key1(i), &value, &timestamp);
4252
+ ASSERT_TRUE(s.IsNotFound());
4253
+ if (persist_udt) {
4254
+ expected_ts.clear();
4255
+ PutFixed64(&expected_ts, kNum / 2);
4256
+ ASSERT_EQ(timestamp, expected_ts);
4257
+ } else {
4258
+ // When timestamps are not persisted, data in SST files all logically have
4259
+ // min timestamp. A compaction to the last level will drop the range
4260
+ // tombstone.
4261
+ ASSERT_TRUE(timestamp.empty());
4017
4262
  }
4018
4263
  }
4019
4264
  Close();
@@ -4442,8 +4687,8 @@ TEST_F(DBBasicTestWithTimestamp, TimestampFilterTableReadOnGet) {
4442
4687
  Slice read_ts_slice = Slice(read_ts_str);
4443
4688
  ReadOptions read_opts;
4444
4689
  read_opts.timestamp = &read_ts_slice;
4445
- std::string value_from_get = "";
4446
- std::string timestamp_from_get = "";
4690
+ std::string value_from_get;
4691
+ std::string timestamp_from_get;
4447
4692
  auto status =
4448
4693
  db_->Get(read_opts, Key1(3), &value_from_get, &timestamp_from_get);
4449
4694
  ASSERT_TRUE(status.IsNotFound());
@@ -4492,4 +4737,4 @@ int main(int argc, char** argv) {
4492
4737
  ::testing::InitGoogleTest(&argc, argv);
4493
4738
  RegisterCustomObjects(argc, argv);
4494
4739
  return RUN_ALL_TESTS();
4495
- }
4740
+ }
@@ -64,7 +64,7 @@ TEST_F(TimestampCompatibleCompactionTest, UserKeyCrossFileBoundary) {
64
64
  SyncPoint::GetInstance()->ClearAllCallBacks();
65
65
  SyncPoint::GetInstance()->SetCallBack(
66
66
  "LevelCompactionPicker::PickCompaction:Return", [&](void* arg) {
67
- const auto* compaction = reinterpret_cast<Compaction*>(arg);
67
+ const auto* compaction = static_cast<Compaction*>(arg);
68
68
  ASSERT_NE(nullptr, compaction);
69
69
  ASSERT_EQ(0, compaction->start_level());
70
70
  ASSERT_EQ(1, compaction->num_input_levels());
@@ -172,8 +172,8 @@ TEST_F(TimestampCompatibleCompactionTest, MultipleSubCompactions) {
172
172
 
173
173
  class TestFilePartitioner : public SstPartitioner {
174
174
  public:
175
- explicit TestFilePartitioner() {}
176
- ~TestFilePartitioner() override {}
175
+ explicit TestFilePartitioner() = default;
176
+ ~TestFilePartitioner() override = default;
177
177
 
178
178
  const char* Name() const override { return "TestFilePartitioner"; }
179
179
  PartitionerResult ShouldPartition(
@@ -188,7 +188,7 @@ class TestFilePartitioner : public SstPartitioner {
188
188
 
189
189
  class TestFilePartitionerFactory : public SstPartitionerFactory {
190
190
  public:
191
- explicit TestFilePartitionerFactory() {}
191
+ explicit TestFilePartitionerFactory() = default;
192
192
  std::unique_ptr<SstPartitioner> CreatePartitioner(
193
193
  const SstPartitioner::Context& /*context*/) const override {
194
194
  std::unique_ptr<SstPartitioner> ret =