@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
@@ -188,40 +188,6 @@ TEST_F(DBPropertiesTest, GetAggregatedIntPropertyTest) {
188
188
  }
189
189
 
190
190
  namespace {
191
- void ResetTableProperties(TableProperties* tp) {
192
- tp->data_size = 0;
193
- tp->index_size = 0;
194
- tp->filter_size = 0;
195
- tp->raw_key_size = 0;
196
- tp->raw_value_size = 0;
197
- tp->num_data_blocks = 0;
198
- tp->num_entries = 0;
199
- tp->num_deletions = 0;
200
- tp->num_merge_operands = 0;
201
- tp->num_range_deletions = 0;
202
- }
203
-
204
- void ParseTablePropertiesString(std::string tp_string, TableProperties* tp) {
205
- double dummy_double;
206
- std::replace(tp_string.begin(), tp_string.end(), ';', ' ');
207
- std::replace(tp_string.begin(), tp_string.end(), '=', ' ');
208
- ResetTableProperties(tp);
209
- sscanf(tp_string.c_str(),
210
- "# data blocks %" SCNu64 " # entries %" SCNu64 " # deletions %" SCNu64
211
- " # merge operands %" SCNu64 " # range deletions %" SCNu64
212
- " raw key size %" SCNu64
213
- " raw average key size %lf "
214
- " raw value size %" SCNu64
215
- " raw average value size %lf "
216
- " data block size %" SCNu64 " index block size (user-key? %" SCNu64
217
- ", delta-value? %" SCNu64 ") %" SCNu64 " filter block size %" SCNu64,
218
- &tp->num_data_blocks, &tp->num_entries, &tp->num_deletions,
219
- &tp->num_merge_operands, &tp->num_range_deletions, &tp->raw_key_size,
220
- &dummy_double, &tp->raw_value_size, &dummy_double, &tp->data_size,
221
- &tp->index_key_is_user_key, &tp->index_value_is_delta_encoded,
222
- &tp->index_size, &tp->filter_size);
223
- }
224
-
225
191
  void VerifySimilar(uint64_t a, uint64_t b, double bias) {
226
192
  ASSERT_EQ(a == 0U, b == 0U);
227
193
  if (a == 0) {
@@ -1749,14 +1715,35 @@ TEST_F(DBPropertiesTest, SstFilesSize) {
1749
1715
  ASSERT_OK(Delete("key" + std::to_string(i)));
1750
1716
  }
1751
1717
  ASSERT_OK(Flush());
1718
+
1752
1719
  uint64_t sst_size;
1753
- bool ok = db_->GetIntProperty(DB::Properties::kTotalSstFilesSize, &sst_size);
1754
- ASSERT_TRUE(ok);
1720
+ ASSERT_TRUE(
1721
+ db_->GetIntProperty(DB::Properties::kTotalSstFilesSize, &sst_size));
1755
1722
  ASSERT_GT(sst_size, 0);
1756
1723
  listener->size_before_compaction = sst_size;
1724
+
1725
+ uint64_t obsolete_sst_size;
1726
+ ASSERT_TRUE(db_->GetIntProperty(DB::Properties::kObsoleteSstFilesSize,
1727
+ &obsolete_sst_size));
1728
+ ASSERT_EQ(obsolete_sst_size, 0);
1729
+
1730
+ // Hold files from being deleted so we can test property for size of obsolete
1731
+ // SST files.
1732
+ ASSERT_OK(db_->DisableFileDeletions());
1733
+
1757
1734
  // Compact to clean all keys and trigger listener.
1758
1735
  ASSERT_OK(db_->CompactRange(CompactRangeOptions(), nullptr, nullptr));
1759
1736
  ASSERT_TRUE(listener->callback_triggered);
1737
+
1738
+ ASSERT_TRUE(db_->GetIntProperty(DB::Properties::kObsoleteSstFilesSize,
1739
+ &obsolete_sst_size));
1740
+ ASSERT_EQ(obsolete_sst_size, sst_size);
1741
+
1742
+ // Let the obsolete files be deleted.
1743
+ ASSERT_OK(db_->EnableFileDeletions());
1744
+ ASSERT_TRUE(db_->GetIntProperty(DB::Properties::kObsoleteSstFilesSize,
1745
+ &obsolete_sst_size));
1746
+ ASSERT_EQ(obsolete_sst_size, 0);
1760
1747
  }
1761
1748
 
1762
1749
  TEST_F(DBPropertiesTest, MinObsoleteSstNumberToKeep) {
@@ -2361,6 +2348,9 @@ TEST_F(DBPropertiesTest, TableMetaIndexKeys) {
2361
2348
  EXPECT_EQ("rocksdb.hashindex.prefixes",
2362
2349
  PopMetaIndexKey(meta_iter.get()));
2363
2350
  }
2351
+ if (bbto->format_version >= 6) {
2352
+ EXPECT_EQ("rocksdb.index", PopMetaIndexKey(meta_iter.get()));
2353
+ }
2364
2354
  }
2365
2355
  EXPECT_EQ("rocksdb.properties", PopMetaIndexKey(meta_iter.get()));
2366
2356
  EXPECT_EQ("NOT_FOUND", PopMetaIndexKey(meta_iter.get()));
@@ -682,6 +682,7 @@ TEST_F(DBRangeDelTest, TableEvictedDuringScan) {
682
682
  // soon as its refcount drops to zero.
683
683
  bbto.block_cache->EraseUnRefEntries();
684
684
  }
685
+ ASSERT_OK(iter->status());
685
686
  ASSERT_EQ(kNum, expected);
686
687
  delete iter;
687
688
  db_->ReleaseSnapshot(snapshot);
@@ -840,6 +841,7 @@ TEST_F(DBRangeDelTest, IteratorRemovesCoveredKeys) {
840
841
  ++expected;
841
842
  }
842
843
  }
844
+ ASSERT_OK(iter->status());
843
845
  ASSERT_EQ(kNum, expected);
844
846
  delete iter;
845
847
  }
@@ -908,6 +910,7 @@ TEST_F(DBRangeDelTest, IteratorIgnoresRangeDeletions) {
908
910
  std::string key;
909
911
  ASSERT_EQ(expected[i], iter->key());
910
912
  }
913
+ ASSERT_OK(iter->status());
911
914
  ASSERT_EQ(3, i);
912
915
  delete iter;
913
916
  db_->ReleaseSnapshot(snapshot);
@@ -1382,6 +1385,7 @@ TEST_F(DBRangeDelTest, UntruncatedTombstoneDoesNotDeleteNewerKey) {
1382
1385
  for (; iter->Valid(); iter->Next()) {
1383
1386
  ++keys_found;
1384
1387
  }
1388
+ EXPECT_OK(iter->status());
1385
1389
  delete iter;
1386
1390
  return keys_found;
1387
1391
  };
@@ -1485,6 +1489,7 @@ TEST_F(DBRangeDelTest, DeletedMergeOperandReappearsIterPrev) {
1485
1489
  for (; iter->Valid(); iter->Prev()) {
1486
1490
  ++keys_found;
1487
1491
  }
1492
+ ASSERT_OK(iter->status());
1488
1493
  delete iter;
1489
1494
  ASSERT_EQ(kNumKeys, keys_found);
1490
1495
 
@@ -1519,6 +1524,7 @@ TEST_F(DBRangeDelTest, SnapshotPreventsDroppedKeys) {
1519
1524
 
1520
1525
  iter->Next();
1521
1526
  ASSERT_FALSE(iter->Valid());
1527
+ ASSERT_OK(iter->status());
1522
1528
 
1523
1529
  delete iter;
1524
1530
  db_->ReleaseSnapshot(snapshot);
@@ -1564,6 +1570,7 @@ TEST_F(DBRangeDelTest, SnapshotPreventsDroppedKeysInImmMemTables) {
1564
1570
 
1565
1571
  iter->Next();
1566
1572
  ASSERT_FALSE(iter->Valid());
1573
+ ASSERT_OK(iter->status());
1567
1574
  }
1568
1575
 
1569
1576
  TEST_F(DBRangeDelTest, RangeTombstoneWrittenToMinimalSsts) {
@@ -1690,6 +1697,8 @@ TEST_F(DBRangeDelTest, LevelCompactOutputCutAtRangeTombstoneForTtlFiles) {
1690
1697
  ASSERT_EQ("0,1,0,1", FilesPerLevel());
1691
1698
 
1692
1699
  env_->MockSleepForSeconds(20 * 60 * 60);
1700
+ // Prevent range tombstone from being dropped during compaction.
1701
+ const Snapshot* snapshot = db_->GetSnapshot();
1693
1702
  ASSERT_OK(db_->DeleteRange(WriteOptions(), db_->DefaultColumnFamily(),
1694
1703
  Key(11), Key(12)));
1695
1704
  ASSERT_OK(Put(Key(0), rnd.RandomString(1 << 10)));
@@ -1703,6 +1712,7 @@ TEST_F(DBRangeDelTest, LevelCompactOutputCutAtRangeTombstoneForTtlFiles) {
1703
1712
  // File 1: (qualified for TTL): Key(5) - Key(10)
1704
1713
  // File 1: DeleteRange [11, 12)
1705
1714
  ASSERT_EQ("0,3,0,1", FilesPerLevel());
1715
+ db_->ReleaseSnapshot(snapshot);
1706
1716
  }
1707
1717
 
1708
1718
  // Test SST partitioner cut after every single key
@@ -1975,6 +1985,7 @@ TEST_F(DBRangeDelTest, IteratorRefresh) {
1975
1985
  ASSERT_EQ("key1", iter->key());
1976
1986
  iter->Next();
1977
1987
  ASSERT_FALSE(iter->Valid());
1988
+ ASSERT_OK(iter->status());
1978
1989
 
1979
1990
  delete iter;
1980
1991
  }
@@ -3405,6 +3416,359 @@ TEST_F(DBRangeDelTest, AddRangeDelsSingleUserKeyTombstoneOnlyFile) {
3405
3416
  db_->ReleaseSnapshot(snapshot1);
3406
3417
  }
3407
3418
 
3419
+ TEST_F(DBRangeDelTest, NonBottommostCompactionDropRangetombstone) {
3420
+ // L0: file 1: [DeleteRange[4, 5)], file 2: [3, 6, DeleteRange[8, 9)]
3421
+ // L6 file 1: [2, 3], file 2: [7, 8]
3422
+ // When compacting the two L0 files to L1, the compaction is non-bottommost
3423
+ // since the compaction key range overlaps with L6 file 1. The range tombstone
3424
+ // [4, 5) should be dropped since it does not overlap with any file in lower
3425
+ // levels. The range tombstone [8, 9) should not be dropped.
3426
+ Options opts = CurrentOptions();
3427
+ opts.level_compaction_dynamic_level_bytes = false;
3428
+ opts.num_levels = 7;
3429
+ opts.level0_file_num_compaction_trigger = 3;
3430
+ DestroyAndReopen(opts);
3431
+
3432
+ Random rnd(301);
3433
+ // L6 file 1
3434
+ ASSERT_OK(Put(Key(2), rnd.RandomString(100)));
3435
+ ASSERT_OK(Put(Key(3), rnd.RandomString(100)));
3436
+ ASSERT_OK(Flush());
3437
+ // L6 file 2
3438
+ ASSERT_OK(Put(Key(7), rnd.RandomString(100)));
3439
+ ASSERT_OK(Put(Key(8), rnd.RandomString(100)));
3440
+ ASSERT_OK(Flush());
3441
+ MoveFilesToLevel(6);
3442
+ ASSERT_EQ(NumTableFilesAtLevel(6), 2);
3443
+ // L0 file 1
3444
+ ASSERT_OK(db_->DeleteRange(WriteOptions(), db_->DefaultColumnFamily(), Key(4),
3445
+ Key(5)));
3446
+ ASSERT_OK(Flush());
3447
+ // L0 file 2
3448
+ ASSERT_OK(Put(Key(3), rnd.RandomString(100)));
3449
+ ASSERT_OK(Put(Key(6), rnd.RandomString(100)));
3450
+ ASSERT_OK(db_->DeleteRange(WriteOptions(), db_->DefaultColumnFamily(), Key(8),
3451
+ Key(9)));
3452
+ ASSERT_OK(Flush());
3453
+ // nothing is dropped during flush
3454
+ std::string property;
3455
+ db_->GetProperty(DB::Properties::kAggregatedTableProperties, &property);
3456
+ TableProperties output_tp;
3457
+ ParseTablePropertiesString(property, &output_tp);
3458
+ ASSERT_EQ(output_tp.num_range_deletions, 2);
3459
+ // Add one more L0 file to trigger L0->L1 compaction
3460
+ ASSERT_OK(Put(Key(1), rnd.RandomString(100)));
3461
+ ASSERT_OK(Put(Key(9), rnd.RandomString(100)));
3462
+ ASSERT_OK(Flush());
3463
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
3464
+ ASSERT_EQ(NumTableFilesAtLevel(1), 1);
3465
+ db_->GetProperty(DB::Properties::kAggregatedTableProperties, &property);
3466
+ ParseTablePropertiesString(property, &output_tp);
3467
+ ASSERT_EQ(output_tp.num_range_deletions, 1);
3468
+
3469
+ // Now create a snapshot protected range tombstone [4, 5), it should not
3470
+ // be dropped.
3471
+ ASSERT_OK(Put(Key(4), rnd.RandomString(100)));
3472
+ const Snapshot* snapshot = db_->GetSnapshot();
3473
+ ASSERT_OK(db_->DeleteRange(WriteOptions(), db_->DefaultColumnFamily(), Key(4),
3474
+ Key(5)));
3475
+ CompactRangeOptions cro;
3476
+ cro.bottommost_level_compaction = BottommostLevelCompaction::kForceOptimized;
3477
+ ASSERT_OK(db_->CompactRange(cro, nullptr, nullptr));
3478
+ // All compacted to L6
3479
+ ASSERT_EQ("0,0,0,0,0,0,1", FilesPerLevel(0));
3480
+ db_->GetProperty(DB::Properties::kAggregatedTableProperties, &property);
3481
+ ParseTablePropertiesString(property, &output_tp);
3482
+ ASSERT_EQ(output_tp.num_range_deletions, 1);
3483
+ db_->ReleaseSnapshot(snapshot);
3484
+ }
3485
+
3486
+ TEST_F(DBRangeDelTest, MemtableMaxRangeDeletions) {
3487
+ // Tests option `memtable_max_range_deletions`.
3488
+ Options options = CurrentOptions();
3489
+ options.level_compaction_dynamic_file_size = false;
3490
+ options.memtable_max_range_deletions = 50;
3491
+ options.level0_file_num_compaction_trigger = 5;
3492
+ DestroyAndReopen(options);
3493
+
3494
+ for (int i = 0; i < 50; ++i) {
3495
+ // Intentionally delete overlapping ranges to see if the option
3496
+ // checks number of range tombstone fragments instead.
3497
+ ASSERT_OK(Put(Key(i), "val1"));
3498
+ ASSERT_OK(Put(Key(i + 1), "val2"));
3499
+ ASSERT_OK(db_->DeleteRange(WriteOptions(), db_->DefaultColumnFamily(),
3500
+ Key(i), Key(i + 2)));
3501
+ ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
3502
+ ASSERT_EQ(0, NumTableFilesAtLevel(0));
3503
+ }
3504
+ // One more write to trigger flush.
3505
+ ASSERT_OK(Put(Key(50), "val"));
3506
+ ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
3507
+ ASSERT_EQ(1, NumTableFilesAtLevel(0));
3508
+
3509
+ // This should take effect for the next new memtable.
3510
+ ASSERT_OK(db_->SetOptions({{"memtable_max_range_deletions", "1"}}));
3511
+ ASSERT_OK(Flush());
3512
+ ASSERT_EQ(2, NumTableFilesAtLevel(0));
3513
+ ASSERT_OK(db_->DeleteRange(WriteOptions(), db_->DefaultColumnFamily(),
3514
+ Key(50), Key(100)));
3515
+ ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
3516
+ ASSERT_EQ(2, NumTableFilesAtLevel(0));
3517
+ // One more write to trigger flush.
3518
+ ASSERT_OK(Put(Key(50), "new val"));
3519
+ ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
3520
+ ASSERT_EQ(3, NumTableFilesAtLevel(0));
3521
+ }
3522
+
3523
+ TEST_F(DBRangeDelTest, RangeDelReseekAfterFileReadError) {
3524
+ // This is to test a bug that is fixed in
3525
+ // https://github.com/facebook/rocksdb/pull/11786.
3526
+ Options opts = CurrentOptions();
3527
+ opts.num_levels = 7;
3528
+
3529
+ // Set up LSM
3530
+ //
3531
+ // L4: F1: [key1] F2: [key2]
3532
+ // L5: F3:[DeleteRange(key3, key6)]
3533
+ // L6: F4:[key3, key6]
3534
+ // Will inject error when reading from F2.
3535
+ // SeekToFirst() should land on key1.
3536
+ // Next() should encounter error when reading from F2,
3537
+ // and range del reseek should not reset this status.
3538
+ Random rnd(301);
3539
+ // L6
3540
+ ASSERT_OK(Put(Key(3), rnd.RandomString(100)));
3541
+ ASSERT_OK(Put(Key(6), rnd.RandomString(100)));
3542
+ ASSERT_OK(Flush());
3543
+ MoveFilesToLevel(6);
3544
+ // L5
3545
+ ASSERT_OK(db_->DeleteRange(WriteOptions(), db_->DefaultColumnFamily(), Key(3),
3546
+ Key(6)));
3547
+ ASSERT_OK(Flush());
3548
+ MoveFilesToLevel(5);
3549
+ // L4
3550
+ ASSERT_OK(Put(Key(2), rnd.RandomString(100)));
3551
+ ASSERT_OK(Flush());
3552
+ MoveFilesToLevel(4);
3553
+ std::string fname;
3554
+ std::vector<LiveFileMetaData> live_files;
3555
+ db_->GetLiveFilesMetaData(&live_files);
3556
+ for (auto& meta : live_files) {
3557
+ if (meta.level == 4) {
3558
+ fname = meta.name;
3559
+ break;
3560
+ }
3561
+ }
3562
+ ASSERT_TRUE(!fname.empty());
3563
+ ASSERT_OK(Put(Key(1), rnd.RandomString(100)));
3564
+ ASSERT_OK(Flush());
3565
+ MoveFilesToLevel(4);
3566
+
3567
+ SyncPoint::GetInstance()->SetCallBack(
3568
+ "RandomAccessFileReader::Read::BeforeReturn", [&fname](void* pair_ptr) {
3569
+ auto p =
3570
+ reinterpret_cast<std::pair<std::string*, IOStatus*>*>(pair_ptr);
3571
+ if (p->first->find(fname) != std::string::npos) {
3572
+ *p->second = IOStatus::IOError();
3573
+ p->second->SetRetryable(true);
3574
+ }
3575
+ });
3576
+ SyncPoint::GetInstance()->EnableProcessing();
3577
+ std::unique_ptr<Iterator> iter{db_->NewIterator(ReadOptions())};
3578
+ iter->SeekToFirst();
3579
+ ASSERT_TRUE(iter->Valid());
3580
+ ASSERT_OK(iter->status());
3581
+ ASSERT_EQ(iter->key(), Key(1));
3582
+ iter->Next();
3583
+ ASSERT_FALSE(iter->Valid());
3584
+ ASSERT_NOK(iter->status());
3585
+ ASSERT_TRUE(iter->status().IsIOError());
3586
+ iter.reset();
3587
+ SyncPoint::GetInstance()->ClearAllCallBacks();
3588
+ SyncPoint::GetInstance()->DisableProcessing();
3589
+
3590
+ // Reverse scan
3591
+ // LSM setup
3592
+ // L4: F1: [key2] F2: [key7, key8]
3593
+ // L5: F3:[[key3, key6)]
3594
+ // L6: F4:[key1, key5]
3595
+ // Ingest error when read from F1.
3596
+ // SeekToLast() should land on key8.
3597
+ // During Prev(), MergingIterator will encounter error when reading from F1
3598
+ // and do a range del reseek (it sees key5 covered by a range tombstone).
3599
+ DestroyAndReopen(opts);
3600
+ // L6
3601
+ ASSERT_OK(Put(Key(1), rnd.RandomString(100)));
3602
+ ASSERT_OK(Put(Key(5), rnd.RandomString(100)));
3603
+ ASSERT_OK(Flush());
3604
+ MoveFilesToLevel(6);
3605
+ // L5
3606
+ ASSERT_OK(db_->DeleteRange(WriteOptions(), db_->DefaultColumnFamily(), Key(3),
3607
+ Key(6)));
3608
+ ASSERT_OK(Flush());
3609
+ MoveFilesToLevel(5);
3610
+ // L4
3611
+ ASSERT_OK(Put(Key(2), rnd.RandomString(100)));
3612
+ ASSERT_OK(Flush());
3613
+ MoveFilesToLevel(4);
3614
+ live_files.clear();
3615
+ db_->GetLiveFilesMetaData(&live_files);
3616
+ for (auto& meta : live_files) {
3617
+ if (meta.level == 4) {
3618
+ fname = meta.name;
3619
+ break;
3620
+ }
3621
+ }
3622
+ ASSERT_TRUE(!fname.empty());
3623
+ ASSERT_OK(Put(Key(7), rnd.RandomString(100)));
3624
+ ASSERT_OK(Put(Key(8), rnd.RandomString(100)));
3625
+ ASSERT_OK(Flush());
3626
+ MoveFilesToLevel(4);
3627
+
3628
+ SyncPoint::GetInstance()->SetCallBack(
3629
+ "RandomAccessFileReader::Read::AnyOffset", [&fname](void* pair_ptr) {
3630
+ auto p =
3631
+ reinterpret_cast<std::pair<std::string*, IOStatus*>*>(pair_ptr);
3632
+ if (p->first->find(fname) != std::string::npos) {
3633
+ *p->second = IOStatus::IOError();
3634
+ p->second->SetRetryable(true);
3635
+ }
3636
+ });
3637
+ SyncPoint::GetInstance()->EnableProcessing();
3638
+ iter.reset(db_->NewIterator(ReadOptions()));
3639
+ iter->SeekToLast();
3640
+ ASSERT_TRUE(iter->Valid());
3641
+ ASSERT_OK(iter->status());
3642
+ ASSERT_EQ(iter->key(), Key(8));
3643
+ // Note that for reverse scan, DBIter will need to ensure
3644
+ // the key it returns is the one with the highest sequence number.
3645
+ // To return key7, it internally calls MergingIterator::Prev()
3646
+ // until it reaches a previous user key.
3647
+ iter->Prev();
3648
+ ASSERT_FALSE(iter->Valid());
3649
+ ASSERT_NOK(iter->status());
3650
+ ASSERT_TRUE(iter->status().IsIOError());
3651
+
3652
+ iter.reset();
3653
+ }
3654
+
3655
+ TEST_F(DBRangeDelTest, ReleaseSnapshotAfterIteratorCreation) {
3656
+ // Test that range tombstone code path in LevelIterator
3657
+ // does access ReadOptions::snapshot after Iterator creation.
3658
+ //
3659
+ // Put some data in L2 so that range tombstone in L1 will not be dropped.
3660
+ ASSERT_OK(Put(Key(0), "v"));
3661
+ ASSERT_OK(Put(Key(100), "v"));
3662
+ ASSERT_OK(Flush());
3663
+ MoveFilesToLevel(2);
3664
+
3665
+ // two L1 file with range del
3666
+ ASSERT_OK(Put(Key(1), "v"));
3667
+ ASSERT_OK(Put(Key(2), "v"));
3668
+ ASSERT_OK(db_->DeleteRange(WriteOptions(), db_->DefaultColumnFamily(), Key(3),
3669
+ Key(4)));
3670
+ ASSERT_OK(Flush());
3671
+ MoveFilesToLevel(1);
3672
+
3673
+ ASSERT_OK(Put(Key(5), "v"));
3674
+ ASSERT_OK(Put(Key(6), "v"));
3675
+ ASSERT_OK(db_->DeleteRange(WriteOptions(), db_->DefaultColumnFamily(), Key(5),
3676
+ Key(6)));
3677
+ ASSERT_OK(Flush());
3678
+ MoveFilesToLevel(1);
3679
+
3680
+ ASSERT_EQ(2, NumTableFilesAtLevel(1));
3681
+ ASSERT_EQ(1, NumTableFilesAtLevel(2));
3682
+
3683
+ const Snapshot* snapshot = db_->GetSnapshot();
3684
+ ReadOptions ro;
3685
+ ro.snapshot = snapshot;
3686
+
3687
+ Iterator* iter = db_->NewIterator(ro);
3688
+ db_->ReleaseSnapshot(snapshot);
3689
+
3690
+ iter->Seek(Key(1));
3691
+ std::vector<int> expected_keys{1, 2, 6, 100};
3692
+ for (int i : expected_keys) {
3693
+ ASSERT_OK(iter->status());
3694
+ ASSERT_TRUE(iter->Valid());
3695
+ ASSERT_EQ(iter->key(), Key(i));
3696
+ iter->Next();
3697
+ }
3698
+ ASSERT_TRUE(!iter->Valid() && iter->status().ok());
3699
+
3700
+ delete iter;
3701
+ }
3702
+
3703
+ TEST_F(DBRangeDelTest, RefreshWithSnapshot) {
3704
+ ASSERT_OK(Put(Key(4), "4"));
3705
+ ASSERT_OK(Put(Key(6), "6"));
3706
+ const Snapshot* snapshot = db_->GetSnapshot();
3707
+ ASSERT_OK(db_->DeleteRange(WriteOptions(), db_->DefaultColumnFamily(), Key(3),
3708
+ Key(5)));
3709
+
3710
+ std::unique_ptr<Iterator> iter{db_->NewIterator(ReadOptions())};
3711
+ // Live Memtable
3712
+ iter->SeekToFirst();
3713
+ ASSERT_TRUE(iter->Valid());
3714
+ ASSERT_EQ(iter->key(), Key(6));
3715
+ ASSERT_OK(iter->Refresh(snapshot));
3716
+ iter->SeekToFirst();
3717
+ ASSERT_TRUE(iter->Valid());
3718
+ ASSERT_EQ(iter->key(), Key(4));
3719
+ // Immutable Memtable
3720
+ ASSERT_OK(dbfull()->TEST_SwitchMemtable());
3721
+ ASSERT_OK(iter->Refresh(nullptr));
3722
+ iter->SeekToFirst();
3723
+ ASSERT_TRUE(iter->Valid());
3724
+ ASSERT_EQ(iter->key(), Key(6));
3725
+ ASSERT_OK(iter->Refresh(snapshot));
3726
+ iter->SeekToFirst();
3727
+ ASSERT_TRUE(iter->Valid());
3728
+ ASSERT_EQ(iter->key(), Key(4));
3729
+ // L0
3730
+ ASSERT_OK(Flush());
3731
+ ASSERT_EQ(1, NumTableFilesAtLevel(0));
3732
+ ASSERT_OK(iter->Refresh(nullptr));
3733
+ iter->SeekToFirst();
3734
+ ASSERT_TRUE(iter->Valid());
3735
+ ASSERT_EQ(iter->key(), Key(6));
3736
+ ASSERT_OK(iter->Refresh(snapshot));
3737
+ iter->SeekToFirst();
3738
+ ASSERT_TRUE(iter->Valid());
3739
+ ASSERT_EQ(iter->key(), Key(4));
3740
+ // L1
3741
+ MoveFilesToLevel(1);
3742
+ ASSERT_EQ(1, NumTableFilesAtLevel(1));
3743
+ ASSERT_OK(iter->Refresh(nullptr));
3744
+ iter->SeekToFirst();
3745
+ ASSERT_TRUE(iter->Valid());
3746
+ ASSERT_EQ(iter->key(), Key(6));
3747
+ ASSERT_OK(iter->Refresh(snapshot));
3748
+ iter->SeekToFirst();
3749
+ ASSERT_TRUE(iter->Valid());
3750
+ ASSERT_EQ(iter->key(), Key(4));
3751
+ // L1 with two file.
3752
+ // Test that when LevelIterator enters a new file,
3753
+ // it remembers which snapshot sequence number to use.
3754
+ ASSERT_OK(Put(Key(2), "2"));
3755
+ ASSERT_OK(Flush());
3756
+ MoveFilesToLevel(1);
3757
+ ASSERT_EQ(2, NumTableFilesAtLevel(1));
3758
+ ASSERT_OK(iter->Refresh(nullptr));
3759
+ iter->SeekToFirst();
3760
+ ASSERT_TRUE(iter->Valid());
3761
+ // LevelIterator is at the first file
3762
+ ASSERT_EQ(iter->key(), Key(2));
3763
+ ASSERT_OK(iter->Refresh(snapshot));
3764
+ // Will enter the second file, and create a new range tombstone iterator.
3765
+ // It should use the snapshot sequence number.
3766
+ iter->SeekToFirst();
3767
+ ASSERT_TRUE(iter->Valid());
3768
+ ASSERT_EQ(iter->key(), Key(4));
3769
+ iter.reset();
3770
+ db_->ReleaseSnapshot(snapshot);
3771
+ }
3408
3772
  } // namespace ROCKSDB_NAMESPACE
3409
3773
 
3410
3774
  int main(int argc, char** argv) {
@@ -220,6 +220,7 @@ TEST_P(DBRateLimiterOnReadTest, Iterator) {
220
220
  ++expected;
221
221
  }
222
222
  }
223
+ ASSERT_OK(iter->status());
223
224
  // Reverse scan does not read evenly (one block per iteration) due to
224
225
  // descending seqno ordering, so wait until after the loop to check total.
225
226
  ASSERT_EQ(expected, options_.rate_limiter->GetTotalRequests(Env::IO_USER));
@@ -235,9 +236,18 @@ TEST_P(DBRateLimiterOnReadTest, VerifyChecksum) {
235
236
  ASSERT_EQ(0, options_.rate_limiter->GetTotalRequests(Env::IO_USER));
236
237
 
237
238
  ASSERT_OK(db_->VerifyChecksum(GetReadOptions()));
238
- // There are 3 reads per file: ReadMetaIndexBlock,
239
- // VerifyChecksumInMetaBlocks, VerifyChecksumInBlocks
240
- int expected = kNumFiles * 3;
239
+ // In BufferedIO,
240
+ // there are 7 reads per file, each of which will be rate-limited.
241
+ // During open: read footer, meta index block, properties block, index block.
242
+ // During actual checksum verification: read meta index block, verify checksum
243
+ // in meta blocks and verify checksum in file blocks.
244
+ //
245
+ // In DirectIO, where we support tail prefetching, during table open, we only
246
+ // do 1 read instead of 4 as described above. Actual checksum verification
247
+ // reads stay the same.
248
+ int num_read_per_file = (!use_direct_io_) ? 7 : 4;
249
+ int expected = kNumFiles * num_read_per_file;
250
+
241
251
  ASSERT_EQ(expected, options_.rate_limiter->GetTotalRequests(Env::IO_USER));
242
252
  }
243
253
 
@@ -240,6 +240,7 @@ TEST_F(DBReadOnlyTestWithTimestamp, IteratorAndGet) {
240
240
  get_value_and_check(db_, read_opts, it->key(), it->value(),
241
241
  write_timestamps[i]);
242
242
  }
243
+ ASSERT_OK(it->status());
243
244
  size_t expected_count = kMaxKey - start_keys[i] + 1;
244
245
  ASSERT_EQ(expected_count, count);
245
246
 
@@ -252,6 +253,7 @@ TEST_F(DBReadOnlyTestWithTimestamp, IteratorAndGet) {
252
253
  get_value_and_check(db_, read_opts, it->key(), it->value(),
253
254
  write_timestamps[i]);
254
255
  }
256
+ ASSERT_OK(it->status());
255
257
  ASSERT_EQ(static_cast<size_t>(kMaxKey) - start_keys[i] + 1, count);
256
258
 
257
259
  // SeekToFirst()/SeekToLast() with lower/upper bounds.
@@ -273,6 +275,7 @@ TEST_F(DBReadOnlyTestWithTimestamp, IteratorAndGet) {
273
275
  get_value_and_check(db_, read_opts, it->key(), it->value(),
274
276
  write_timestamps[i]);
275
277
  }
278
+ ASSERT_OK(it->status());
276
279
  ASSERT_EQ(r - std::max(l, start_keys[i]), count);
277
280
 
278
281
  for (it->SeekToLast(), key = std::min(r, kMaxKey + 1), count = 0;
@@ -282,6 +285,7 @@ TEST_F(DBReadOnlyTestWithTimestamp, IteratorAndGet) {
282
285
  get_value_and_check(db_, read_opts, it->key(), it->value(),
283
286
  write_timestamps[i]);
284
287
  }
288
+ ASSERT_OK(it->status());
285
289
  l += (kMaxKey / 100);
286
290
  r -= (kMaxKey / 100);
287
291
  }
@@ -328,6 +332,7 @@ TEST_F(DBReadOnlyTestWithTimestamp, Iterators) {
328
332
  CheckIterUserEntry(iters[0], Key1(key), kTypeValue,
329
333
  "value" + std::to_string(key), write_timestamp);
330
334
  }
335
+ ASSERT_OK(iters[0]->status());
331
336
 
332
337
  size_t expected_count = kMaxKey - 0 + 1;
333
338
  ASSERT_EQ(expected_count, count);
@@ -336,6 +341,53 @@ TEST_F(DBReadOnlyTestWithTimestamp, Iterators) {
336
341
  Close();
337
342
  }
338
343
 
344
+ TEST_F(DBReadOnlyTestWithTimestamp, FullHistoryTsLowSanityCheckFail) {
345
+ Options options = CurrentOptions();
346
+ options.env = env_;
347
+ options.comparator = test::BytewiseComparatorWithU64TsWrapper();
348
+ // Use UDT in memtable only feature for this test, so we can control that
349
+ // newly set `full_history_ts_low` collapse history when Flush happens.
350
+ options.persist_user_defined_timestamps = false;
351
+ options.allow_concurrent_memtable_write = false;
352
+ DestroyAndReopen(options);
353
+
354
+ std::string write_ts;
355
+ PutFixed64(&write_ts, 1);
356
+ ASSERT_OK(db_->Put(WriteOptions(), "foo", write_ts, "val1"));
357
+
358
+ std::string full_history_ts_low;
359
+ PutFixed64(&full_history_ts_low, 3);
360
+ ASSERT_OK(db_->IncreaseFullHistoryTsLow(db_->DefaultColumnFamily(),
361
+ full_history_ts_low));
362
+ ASSERT_OK(Flush(0));
363
+
364
+ // Reopen the database in read only mode to test its timestamp support.
365
+ Close();
366
+ ASSERT_OK(ReadOnlyReopen(options));
367
+
368
+ // Reading below full_history_ts_low fails a sanity check.
369
+ std::string read_ts;
370
+ PutFixed64(&read_ts, 2);
371
+ Slice read_ts_slice = read_ts;
372
+ ReadOptions read_opts;
373
+ read_opts.timestamp = &read_ts_slice;
374
+
375
+ // Get()
376
+ std::string value;
377
+ ASSERT_TRUE(db_->Get(read_opts, "foo", &value).IsInvalidArgument());
378
+ // NewIterator()
379
+ std::unique_ptr<Iterator> iter(
380
+ db_->NewIterator(read_opts, db_->DefaultColumnFamily()));
381
+ ASSERT_TRUE(iter->status().IsInvalidArgument());
382
+
383
+ // NewIterators()
384
+ std::vector<ColumnFamilyHandle*> cfhs = {db_->DefaultColumnFamily()};
385
+ std::vector<Iterator*> iterators;
386
+ ASSERT_TRUE(
387
+ db_->NewIterators(read_opts, cfhs, &iterators).IsInvalidArgument());
388
+ Close();
389
+ }
390
+
339
391
  TEST_F(DBReadOnlyTestWithTimestamp, IteratorsReadTimestampSizeMismatch) {
340
392
  const int kNumKeysPerFile = 128;
341
393
  const uint64_t kMaxKey = 1024;