@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
@@ -41,30 +41,94 @@ class MergeHelper {
41
41
  Statistics* stats = nullptr,
42
42
  const std::atomic<bool>* shutting_down = nullptr);
43
43
 
44
- // Wrapper around MergeOperator::FullMergeV2() that records perf statistics.
45
- // Result of merge will be written to result if status returned is OK.
46
- // If operands is empty, the value will simply be copied to result.
47
- // Set `update_num_ops_stats` to true if it is from a user read, so that
48
- // the latency is sensitive.
44
+ // Wrappers around MergeOperator::FullMergeV3() that record perf statistics.
45
+ // Set `update_num_ops_stats` to true if it is from a user read so that
46
+ // the corresponding statistics are updated.
49
47
  // Returns one of the following statuses:
50
48
  // - OK: Entries were successfully merged.
51
49
  // - Corruption: Merge operator reported unsuccessful merge. The scope of the
52
50
  // damage will be stored in `*op_failure_scope` when `op_failure_scope` is
53
51
  // not nullptr
52
+
53
+ // Empty tag types to disambiguate overloads
54
+ struct NoBaseValueTag {};
55
+ static constexpr NoBaseValueTag kNoBaseValue{};
56
+
57
+ struct PlainBaseValueTag {};
58
+ static constexpr PlainBaseValueTag kPlainBaseValue{};
59
+
60
+ struct WideBaseValueTag {};
61
+ static constexpr WideBaseValueTag kWideBaseValue{};
62
+
63
+ // Variants that expose the merge result directly (in serialized form for wide
64
+ // columns) as well as its value type. Used by iterator and compaction.
65
+ static Status TimedFullMerge(const MergeOperator* merge_operator,
66
+ const Slice& key, NoBaseValueTag,
67
+ const std::vector<Slice>& operands,
68
+ Logger* logger, Statistics* statistics,
69
+ SystemClock* clock, bool update_num_ops_stats,
70
+ std::string* result, Slice* result_operand,
71
+ ValueType* result_type,
72
+ MergeOperator::OpFailureScope* op_failure_scope);
73
+
74
+ static Status TimedFullMerge(
75
+ const MergeOperator* merge_operator, const Slice& key, PlainBaseValueTag,
76
+ const Slice& value, const std::vector<Slice>& operands, Logger* logger,
77
+ Statistics* statistics, SystemClock* clock, bool update_num_ops_stats,
78
+ std::string* result, Slice* result_operand, ValueType* result_type,
79
+ MergeOperator::OpFailureScope* op_failure_scope);
80
+
81
+ static Status TimedFullMerge(
82
+ const MergeOperator* merge_operator, const Slice& key, WideBaseValueTag,
83
+ const Slice& entity, const std::vector<Slice>& operands, Logger* logger,
84
+ Statistics* statistics, SystemClock* clock, bool update_num_ops_stats,
85
+ std::string* result, Slice* result_operand, ValueType* result_type,
86
+ MergeOperator::OpFailureScope* op_failure_scope);
87
+
88
+ static Status TimedFullMerge(
89
+ const MergeOperator* merge_operator, const Slice& key, WideBaseValueTag,
90
+ const WideColumns& columns, const std::vector<Slice>& operands,
91
+ Logger* logger, Statistics* statistics, SystemClock* clock,
92
+ bool update_num_ops_stats, std::string* result, Slice* result_operand,
93
+ ValueType* result_type, MergeOperator::OpFailureScope* op_failure_scope);
94
+
95
+ // Variants that expose the merge result translated to the form requested by
96
+ // the client. (For example, if the result is a wide-column structure but the
97
+ // client requested the results in plain-value form, the value of the default
98
+ // column is returned.) Used by point lookups.
54
99
  static Status TimedFullMerge(const MergeOperator* merge_operator,
55
- const Slice& key, const Slice* value,
100
+ const Slice& key, NoBaseValueTag,
56
101
  const std::vector<Slice>& operands,
57
- std::string* result, Logger* logger,
58
- Statistics* statistics, SystemClock* clock,
59
- Slice* result_operand, bool update_num_ops_stats,
102
+ Logger* logger, Statistics* statistics,
103
+ SystemClock* clock, bool update_num_ops_stats,
104
+ std::string* result_value,
105
+ PinnableWideColumns* result_entity,
60
106
  MergeOperator::OpFailureScope* op_failure_scope);
61
107
 
62
- static Status TimedFullMergeWithEntity(
63
- const MergeOperator* merge_operator, const Slice& key, Slice base_entity,
64
- const std::vector<Slice>& operands, std::string* result, Logger* logger,
108
+ static Status TimedFullMerge(
109
+ const MergeOperator* merge_operator, const Slice& key, PlainBaseValueTag,
110
+ const Slice& value, const std::vector<Slice>& operands, Logger* logger,
65
111
  Statistics* statistics, SystemClock* clock, bool update_num_ops_stats,
112
+ std::string* result_value, PinnableWideColumns* result_entity,
66
113
  MergeOperator::OpFailureScope* op_failure_scope);
67
114
 
115
+ static Status TimedFullMerge(
116
+ const MergeOperator* merge_operator, const Slice& key, WideBaseValueTag,
117
+ const Slice& entity, const std::vector<Slice>& operands, Logger* logger,
118
+ Statistics* statistics, SystemClock* clock, bool update_num_ops_stats,
119
+ std::string* result_value, PinnableWideColumns* result_entity,
120
+ MergeOperator::OpFailureScope* op_failure_scope);
121
+
122
+ static Status TimedFullMerge(const MergeOperator* merge_operator,
123
+ const Slice& key, WideBaseValueTag,
124
+ const WideColumns& columns,
125
+ const std::vector<Slice>& operands,
126
+ Logger* logger, Statistics* statistics,
127
+ SystemClock* clock, bool update_num_ops_stats,
128
+ std::string* result_value,
129
+ PinnableWideColumns* result_entity,
130
+ MergeOperator::OpFailureScope* op_failure_scope);
131
+
68
132
  // During compaction, merge entries until we hit
69
133
  // - a corrupted key
70
134
  // - a Put/Delete,
@@ -198,6 +262,30 @@ class MergeHelper {
198
262
  // This is a best-effort facility, so memory_order_relaxed is sufficient.
199
263
  return shutting_down_ && shutting_down_->load(std::memory_order_relaxed);
200
264
  }
265
+
266
+ template <typename Visitor>
267
+ static Status TimedFullMergeCommonImpl(
268
+ const MergeOperator* merge_operator, const Slice& key,
269
+ MergeOperator::MergeOperationInputV3::ExistingValue&& existing_value,
270
+ const std::vector<Slice>& operands, Logger* logger,
271
+ Statistics* statistics, SystemClock* clock, bool update_num_ops_stats,
272
+ MergeOperator::OpFailureScope* op_failure_scope, Visitor&& visitor);
273
+
274
+ static Status TimedFullMergeImpl(
275
+ const MergeOperator* merge_operator, const Slice& key,
276
+ MergeOperator::MergeOperationInputV3::ExistingValue&& existing_value,
277
+ const std::vector<Slice>& operands, Logger* logger,
278
+ Statistics* statistics, SystemClock* clock, bool update_num_ops_stats,
279
+ std::string* result, Slice* result_operand, ValueType* result_type,
280
+ MergeOperator::OpFailureScope* op_failure_scope);
281
+
282
+ static Status TimedFullMergeImpl(
283
+ const MergeOperator* merge_operator, const Slice& key,
284
+ MergeOperator::MergeOperationInputV3::ExistingValue&& existing_value,
285
+ const std::vector<Slice>& operands, Logger* logger,
286
+ Statistics* statistics, SystemClock* clock, bool update_num_ops_stats,
287
+ std::string* result_value, PinnableWideColumns* result_entity,
288
+ MergeOperator::OpFailureScope* op_failure_scope);
201
289
  };
202
290
 
203
291
  // MergeOutputIterator can be used to iterate over the result of a merge.
@@ -9,6 +9,11 @@
9
9
 
10
10
  #include "rocksdb/merge_operator.h"
11
11
 
12
+ #include <type_traits>
13
+
14
+ #include "db/wide/wide_columns_helper.h"
15
+ #include "util/overload.h"
16
+
12
17
  namespace ROCKSDB_NAMESPACE {
13
18
 
14
19
  bool MergeOperator::FullMergeV2(const MergeOperationInput& merge_in,
@@ -23,6 +28,83 @@ bool MergeOperator::FullMergeV2(const MergeOperationInput& merge_in,
23
28
  &merge_out->new_value, merge_in.logger);
24
29
  }
25
30
 
31
+ bool MergeOperator::FullMergeV3(const MergeOperationInputV3& merge_in,
32
+ MergeOperationOutputV3* merge_out) const {
33
+ assert(merge_out);
34
+
35
+ MergeOperationInput in_v2(merge_in.key, nullptr, merge_in.operand_list,
36
+ merge_in.logger);
37
+
38
+ std::string new_value;
39
+ Slice existing_operand(nullptr, 0);
40
+ MergeOperationOutput out_v2(new_value, existing_operand);
41
+
42
+ return std::visit(
43
+ overload{
44
+ [&](const auto& existing) -> bool {
45
+ using T = std::decay_t<decltype(existing)>;
46
+
47
+ if constexpr (std::is_same_v<T, Slice>) {
48
+ in_v2.existing_value = &existing;
49
+ }
50
+
51
+ const bool result = FullMergeV2(in_v2, &out_v2);
52
+ if (!result) {
53
+ merge_out->op_failure_scope = out_v2.op_failure_scope;
54
+ return false;
55
+ }
56
+
57
+ if (existing_operand.data()) {
58
+ merge_out->new_value = existing_operand;
59
+ } else {
60
+ merge_out->new_value = std::move(new_value);
61
+ }
62
+
63
+ return true;
64
+ },
65
+ [&](const WideColumns& existing_columns) -> bool {
66
+ const bool has_default_column =
67
+ WideColumnsHelper::HasDefaultColumn(existing_columns);
68
+
69
+ Slice value_of_default;
70
+ if (has_default_column) {
71
+ value_of_default = existing_columns.front().value();
72
+ }
73
+
74
+ in_v2.existing_value = &value_of_default;
75
+
76
+ const bool result = FullMergeV2(in_v2, &out_v2);
77
+ if (!result) {
78
+ merge_out->op_failure_scope = out_v2.op_failure_scope;
79
+ return false;
80
+ }
81
+
82
+ merge_out->new_value = MergeOperationOutputV3::NewColumns();
83
+ auto& new_columns = std::get<MergeOperationOutputV3::NewColumns>(
84
+ merge_out->new_value);
85
+ new_columns.reserve(has_default_column
86
+ ? existing_columns.size()
87
+ : (existing_columns.size() + 1));
88
+
89
+ if (existing_operand.data()) {
90
+ new_columns.emplace_back(kDefaultWideColumnName.ToString(),
91
+ existing_operand.ToString());
92
+ } else {
93
+ new_columns.emplace_back(kDefaultWideColumnName.ToString(),
94
+ std::move(new_value));
95
+ }
96
+
97
+ for (size_t i = has_default_column ? 1 : 0;
98
+ i < existing_columns.size(); ++i) {
99
+ new_columns.emplace_back(existing_columns[i].name().ToString(),
100
+ existing_columns[i].value().ToString());
101
+ }
102
+
103
+ return true;
104
+ }},
105
+ merge_in.existing_value);
106
+ }
107
+
26
108
  // The default implementation of PartialMergeMulti, which invokes
27
109
  // PartialMerge multiple times internally and merges two operands at
28
110
  // a time.
@@ -18,6 +18,7 @@
18
18
  #include "rocksdb/env.h"
19
19
  #include "rocksdb/merge_operator.h"
20
20
  #include "rocksdb/utilities/db_ttl.h"
21
+ #include "rocksdb/wide_columns.h"
21
22
  #include "test_util/testharness.h"
22
23
  #include "util/coding.h"
23
24
  #include "utilities/merge_operators.h"
@@ -607,6 +608,272 @@ TEST_F(MergeTest, MergeWithCompactionAndFlush) {
607
608
  ASSERT_OK(DestroyDB(dbname, Options()));
608
609
  }
609
610
 
611
+ TEST_F(MergeTest, FullMergeV3FallbackNewValue) {
612
+ // Test that the default FullMergeV3 implementation correctly handles the case
613
+ // when FullMergeV2 results in a new value.
614
+
615
+ const Slice key("foo");
616
+ const MergeOperator::MergeOperationInputV3::OperandList operands{
617
+ "first", "second", "third"};
618
+ constexpr Logger* logger = nullptr;
619
+
620
+ auto append_operator =
621
+ MergeOperators::CreateStringAppendOperator(std::string());
622
+
623
+ // No existing value
624
+ {
625
+ MergeOperator::MergeOperationInputV3::ExistingValue existing_value;
626
+ const MergeOperator::MergeOperationInputV3 merge_in(
627
+ key, std::move(existing_value), operands, logger);
628
+
629
+ MergeOperator::MergeOperationOutputV3 merge_out;
630
+
631
+ ASSERT_TRUE(append_operator->FullMergeV3(merge_in, &merge_out));
632
+
633
+ const auto& result = std::get<std::string>(merge_out.new_value);
634
+ ASSERT_EQ(result, operands[0].ToString() + operands[1].ToString() +
635
+ operands[2].ToString());
636
+ }
637
+
638
+ // Plain existing value
639
+ {
640
+ const Slice plain("plain");
641
+ MergeOperator::MergeOperationInputV3::ExistingValue existing_value(plain);
642
+ const MergeOperator::MergeOperationInputV3 merge_in(
643
+ key, std::move(existing_value), operands, logger);
644
+
645
+ MergeOperator::MergeOperationOutputV3 merge_out;
646
+
647
+ ASSERT_TRUE(append_operator->FullMergeV3(merge_in, &merge_out));
648
+
649
+ const auto& result = std::get<std::string>(merge_out.new_value);
650
+ ASSERT_EQ(result, plain.ToString() + operands[0].ToString() +
651
+ operands[1].ToString() + operands[2].ToString());
652
+ }
653
+
654
+ // Wide-column existing value with default column
655
+ {
656
+ const WideColumns entity{
657
+ {kDefaultWideColumnName, "default"}, {"one", "1"}, {"two", "2"}};
658
+ MergeOperator::MergeOperationInputV3::ExistingValue existing_value(entity);
659
+ const MergeOperator::MergeOperationInputV3 merge_in(
660
+ key, std::move(existing_value), operands, logger);
661
+
662
+ MergeOperator::MergeOperationOutputV3 merge_out;
663
+
664
+ ASSERT_TRUE(append_operator->FullMergeV3(merge_in, &merge_out));
665
+
666
+ const auto& result =
667
+ std::get<MergeOperator::MergeOperationOutputV3::NewColumns>(
668
+ merge_out.new_value);
669
+ ASSERT_EQ(result.size(), entity.size());
670
+ ASSERT_EQ(result[0].first, entity[0].name());
671
+ ASSERT_EQ(result[0].second,
672
+ entity[0].value().ToString() + operands[0].ToString() +
673
+ operands[1].ToString() + operands[2].ToString());
674
+ ASSERT_EQ(result[1].first, entity[1].name());
675
+ ASSERT_EQ(result[1].second, entity[1].value());
676
+ ASSERT_EQ(result[2].first, entity[2].name());
677
+ ASSERT_EQ(result[2].second, entity[2].value());
678
+ }
679
+
680
+ // Wide-column existing value without default column
681
+ {
682
+ const WideColumns entity{{"one", "1"}, {"two", "2"}};
683
+ MergeOperator::MergeOperationInputV3::ExistingValue existing_value(entity);
684
+ const MergeOperator::MergeOperationInputV3 merge_in(
685
+ key, std::move(existing_value), operands, logger);
686
+
687
+ MergeOperator::MergeOperationOutputV3 merge_out;
688
+
689
+ ASSERT_TRUE(append_operator->FullMergeV3(merge_in, &merge_out));
690
+
691
+ const auto& result =
692
+ std::get<MergeOperator::MergeOperationOutputV3::NewColumns>(
693
+ merge_out.new_value);
694
+ ASSERT_EQ(result.size(), entity.size() + 1);
695
+ ASSERT_EQ(result[0].first, kDefaultWideColumnName);
696
+ ASSERT_EQ(result[0].second, operands[0].ToString() +
697
+ operands[1].ToString() +
698
+ operands[2].ToString());
699
+ ASSERT_EQ(result[1].first, entity[0].name());
700
+ ASSERT_EQ(result[1].second, entity[0].value());
701
+ ASSERT_EQ(result[2].first, entity[1].name());
702
+ ASSERT_EQ(result[2].second, entity[1].value());
703
+ }
704
+ }
705
+
706
+ TEST_F(MergeTest, FullMergeV3FallbackExistingOperand) {
707
+ // Test that the default FullMergeV3 implementation correctly handles the case
708
+ // when FullMergeV2 results in an existing operand.
709
+
710
+ const Slice key("foo");
711
+ const MergeOperator::MergeOperationInputV3::OperandList operands{
712
+ "first", "second", "third"};
713
+ constexpr Logger* logger = nullptr;
714
+
715
+ auto put_operator = MergeOperators::CreatePutOperator();
716
+
717
+ // No existing value
718
+ {
719
+ MergeOperator::MergeOperationInputV3::ExistingValue existing_value;
720
+ const MergeOperator::MergeOperationInputV3 merge_in(
721
+ key, std::move(existing_value), operands, logger);
722
+
723
+ MergeOperator::MergeOperationOutputV3 merge_out;
724
+
725
+ ASSERT_TRUE(put_operator->FullMergeV3(merge_in, &merge_out));
726
+
727
+ const auto& result = std::get<Slice>(merge_out.new_value);
728
+ ASSERT_EQ(result.data(), operands.back().data());
729
+ ASSERT_EQ(result.size(), operands.back().size());
730
+ }
731
+
732
+ // Plain existing value
733
+ {
734
+ const Slice plain("plain");
735
+ MergeOperator::MergeOperationInputV3::ExistingValue existing_value(plain);
736
+ const MergeOperator::MergeOperationInputV3 merge_in(
737
+ key, std::move(existing_value), operands, logger);
738
+
739
+ MergeOperator::MergeOperationOutputV3 merge_out;
740
+
741
+ ASSERT_TRUE(put_operator->FullMergeV3(merge_in, &merge_out));
742
+
743
+ const auto& result = std::get<Slice>(merge_out.new_value);
744
+ ASSERT_EQ(result.data(), operands.back().data());
745
+ ASSERT_EQ(result.size(), operands.back().size());
746
+ }
747
+
748
+ // Wide-column existing value with default column
749
+ {
750
+ const WideColumns entity{
751
+ {kDefaultWideColumnName, "default"}, {"one", "1"}, {"two", "2"}};
752
+ MergeOperator::MergeOperationInputV3::ExistingValue existing_value(entity);
753
+ const MergeOperator::MergeOperationInputV3 merge_in(
754
+ key, std::move(existing_value), operands, logger);
755
+
756
+ MergeOperator::MergeOperationOutputV3 merge_out;
757
+
758
+ ASSERT_TRUE(put_operator->FullMergeV3(merge_in, &merge_out));
759
+
760
+ const auto& result =
761
+ std::get<MergeOperator::MergeOperationOutputV3::NewColumns>(
762
+ merge_out.new_value);
763
+ ASSERT_EQ(result.size(), entity.size());
764
+ ASSERT_EQ(result[0].first, entity[0].name());
765
+ ASSERT_EQ(result[0].second, operands.back());
766
+ ASSERT_EQ(result[1].first, entity[1].name());
767
+ ASSERT_EQ(result[1].second, entity[1].value());
768
+ ASSERT_EQ(result[2].first, entity[2].name());
769
+ ASSERT_EQ(result[2].second, entity[2].value());
770
+ }
771
+
772
+ // Wide-column existing value without default column
773
+ {
774
+ const WideColumns entity{{"one", "1"}, {"two", "2"}};
775
+ MergeOperator::MergeOperationInputV3::ExistingValue existing_value(entity);
776
+ const MergeOperator::MergeOperationInputV3 merge_in(
777
+ key, std::move(existing_value), operands, logger);
778
+
779
+ MergeOperator::MergeOperationOutputV3 merge_out;
780
+
781
+ ASSERT_TRUE(put_operator->FullMergeV3(merge_in, &merge_out));
782
+
783
+ const auto& result =
784
+ std::get<MergeOperator::MergeOperationOutputV3::NewColumns>(
785
+ merge_out.new_value);
786
+ ASSERT_EQ(result.size(), entity.size() + 1);
787
+ ASSERT_EQ(result[0].first, kDefaultWideColumnName);
788
+ ASSERT_EQ(result[0].second, operands.back());
789
+ ASSERT_EQ(result[1].first, entity[0].name());
790
+ ASSERT_EQ(result[1].second, entity[0].value());
791
+ ASSERT_EQ(result[2].first, entity[1].name());
792
+ ASSERT_EQ(result[2].second, entity[1].value());
793
+ }
794
+ }
795
+
796
+ TEST_F(MergeTest, FullMergeV3FallbackFailure) {
797
+ // Test that the default FullMergeV3 implementation correctly handles the case
798
+ // when FullMergeV2 fails.
799
+
800
+ const Slice key("foo");
801
+ const MergeOperator::MergeOperationInputV3::OperandList operands{
802
+ "first", "second", "third"};
803
+ constexpr Logger* logger = nullptr;
804
+
805
+ class FailMergeOperator : public MergeOperator {
806
+ public:
807
+ bool FullMergeV2(const MergeOperationInput& /* merge_in */,
808
+ MergeOperationOutput* merge_out) const override {
809
+ assert(merge_out);
810
+ merge_out->op_failure_scope = OpFailureScope::kMustMerge;
811
+
812
+ return false;
813
+ }
814
+
815
+ const char* Name() const override { return "FailMergeOperator"; }
816
+ };
817
+
818
+ FailMergeOperator fail_operator;
819
+
820
+ // No existing value
821
+ {
822
+ MergeOperator::MergeOperationInputV3::ExistingValue existing_value;
823
+ const MergeOperator::MergeOperationInputV3 merge_in(
824
+ key, std::move(existing_value), operands, logger);
825
+
826
+ MergeOperator::MergeOperationOutputV3 merge_out;
827
+
828
+ ASSERT_FALSE(fail_operator.FullMergeV3(merge_in, &merge_out));
829
+ ASSERT_EQ(merge_out.op_failure_scope,
830
+ MergeOperator::OpFailureScope::kMustMerge);
831
+ }
832
+
833
+ // Plain existing value
834
+ {
835
+ const Slice plain("plain");
836
+ MergeOperator::MergeOperationInputV3::ExistingValue existing_value(plain);
837
+ const MergeOperator::MergeOperationInputV3 merge_in(
838
+ key, std::move(existing_value), operands, logger);
839
+
840
+ MergeOperator::MergeOperationOutputV3 merge_out;
841
+
842
+ ASSERT_FALSE(fail_operator.FullMergeV3(merge_in, &merge_out));
843
+ ASSERT_EQ(merge_out.op_failure_scope,
844
+ MergeOperator::OpFailureScope::kMustMerge);
845
+ }
846
+
847
+ // Wide-column existing value with default column
848
+ {
849
+ const WideColumns entity{
850
+ {kDefaultWideColumnName, "default"}, {"one", "1"}, {"two", "2"}};
851
+ MergeOperator::MergeOperationInputV3::ExistingValue existing_value(entity);
852
+ const MergeOperator::MergeOperationInputV3 merge_in(
853
+ key, std::move(existing_value), operands, logger);
854
+
855
+ MergeOperator::MergeOperationOutputV3 merge_out;
856
+
857
+ ASSERT_FALSE(fail_operator.FullMergeV3(merge_in, &merge_out));
858
+ ASSERT_EQ(merge_out.op_failure_scope,
859
+ MergeOperator::OpFailureScope::kMustMerge);
860
+ }
861
+
862
+ // Wide-column existing value without default column
863
+ {
864
+ const WideColumns entity{{"one", "1"}, {"two", "2"}};
865
+ MergeOperator::MergeOperationInputV3::ExistingValue existing_value(entity);
866
+ const MergeOperator::MergeOperationInputV3 merge_in(
867
+ key, std::move(existing_value), operands, logger);
868
+
869
+ MergeOperator::MergeOperationOutputV3 merge_out;
870
+
871
+ ASSERT_FALSE(fail_operator.FullMergeV3(merge_in, &merge_out));
872
+ ASSERT_EQ(merge_out.op_failure_scope,
873
+ MergeOperator::OpFailureScope::kMustMerge);
874
+ }
875
+ }
876
+
610
877
  } // namespace ROCKSDB_NAMESPACE
611
878
 
612
879
  int main(int argc, char** argv) {
@@ -149,6 +149,7 @@ TEST_F(PerfContextTest, SeekIntoDeletion) {
149
149
  ASSERT_TRUE(iter->Valid());
150
150
  StopWatchNano timer2(SystemClock::Default().get(), true);
151
151
  iter->Next();
152
+ ASSERT_OK(iter->status());
152
153
  auto elapsed_nanos2 = timer2.ElapsedNanos();
153
154
  if (FLAGS_verbose) {
154
155
  std::cout << "next cmp: " << get_perf_context()->user_key_comparison_count
@@ -262,7 +263,7 @@ void ProfileQueries(bool enabled_time = false) {
262
263
  for (const int i : keys) {
263
264
  if (i == kFlushFlag) {
264
265
  FlushOptions fo;
265
- db->Flush(fo);
266
+ ASSERT_OK(db->Flush(fo));
266
267
  continue;
267
268
  }
268
269
 
@@ -1092,6 +1093,7 @@ TEST_F(PerfContextTest, MergeOperandCount) {
1092
1093
 
1093
1094
  get_perf_context()->Reset();
1094
1095
  }
1096
+ ASSERT_OK(it->status());
1095
1097
  }
1096
1098
 
1097
1099
  // Backward iteration
@@ -1104,6 +1106,7 @@ TEST_F(PerfContextTest, MergeOperandCount) {
1104
1106
 
1105
1107
  get_perf_context()->Reset();
1106
1108
  }
1109
+ ASSERT_OK(it->status());
1107
1110
  }
1108
1111
  };
1109
1112
 
@@ -1111,7 +1114,7 @@ TEST_F(PerfContextTest, MergeOperandCount) {
1111
1114
  verify();
1112
1115
 
1113
1116
  // Verify counters when reading from table files
1114
- db->Flush(FlushOptions());
1117
+ ASSERT_OK(db->Flush(FlushOptions()));
1115
1118
 
1116
1119
  verify();
1117
1120
  }
@@ -42,15 +42,16 @@ class PeriodicTaskScheduler {
42
42
  PeriodicTaskScheduler& operator=(const PeriodicTaskScheduler&) = delete;
43
43
  PeriodicTaskScheduler& operator=(PeriodicTaskScheduler&&) = delete;
44
44
 
45
- // Register a task with its default repeat period
45
+ // Register a task with its default repeat period. Thread safe call.
46
46
  Status Register(PeriodicTaskType task_type, const PeriodicTaskFunc& fn);
47
47
 
48
48
  // Register a task with specified repeat period. 0 is an invalid argument
49
- // (kInvalidPeriodSec). To stop the task, please use Unregister() specifically
49
+ // (kInvalidPeriodSec). To stop the task, please use Unregister().
50
+ // Thread safe call.
50
51
  Status Register(PeriodicTaskType task_type, const PeriodicTaskFunc& fn,
51
52
  uint64_t repeat_period_seconds);
52
53
 
53
- // Unregister the task
54
+ // Unregister the task. Thread safe call.
54
55
  Status Unregister(PeriodicTaskType task_type);
55
56
 
56
57
  #ifndef NDEBUG
@@ -105,4 +106,3 @@ class PeriodicTaskScheduler {
105
106
  };
106
107
 
107
108
  } // namespace ROCKSDB_NAMESPACE
108
-
@@ -123,6 +123,7 @@ class PlainTableDBTest : public testing::Test,
123
123
  // Return the current option configuration.
124
124
  Options CurrentOptions() {
125
125
  Options options;
126
+ options.level_compaction_dynamic_level_bytes = false;
126
127
 
127
128
  PlainTableOptions plain_table_options;
128
129
  plain_table_options.user_key_len = 0;
@@ -896,6 +897,7 @@ TEST_P(PlainTableDBTest, IteratorLargeKeys) {
896
897
  }
897
898
 
898
899
  ASSERT_TRUE(!iter->Valid());
900
+ ASSERT_OK(iter->status());
899
901
 
900
902
  delete iter;
901
903
  }
@@ -944,6 +946,7 @@ TEST_P(PlainTableDBTest, IteratorLargeKeysWithPrefix) {
944
946
  }
945
947
 
946
948
  ASSERT_TRUE(!iter->Valid());
949
+ ASSERT_OK(iter->status());
947
950
 
948
951
  delete iter;
949
952
  }
@@ -782,6 +782,7 @@ TEST_F(PrefixTest, PrefixSeekModePrev) {
782
782
  }
783
783
  }
784
784
  }
785
+ ASSERT_OK(iter->status());
785
786
  }
786
787
  }
787
788
 
@@ -36,6 +36,10 @@ class TruncatedRangeDelIterator {
36
36
  const InternalKeyComparator* icmp, const InternalKey* smallest,
37
37
  const InternalKey* largest);
38
38
 
39
+ void SetRangeDelReadSeqno(SequenceNumber read_seqno) {
40
+ iter_->SetRangeDelReadSeqno(read_seqno);
41
+ }
42
+
39
43
  bool Valid() const;
40
44
 
41
45
  void Next() { iter_->TopNext(); }
@@ -148,6 +148,10 @@ class FragmentedRangeTombstoneIterator : public InternalIterator {
148
148
  const InternalKeyComparator& icmp, SequenceNumber upper_bound,
149
149
  const Slice* ts_upper_bound = nullptr, SequenceNumber lower_bound = 0);
150
150
 
151
+ void SetRangeDelReadSeqno(SequenceNumber read_seqno) override {
152
+ upper_bound_ = read_seqno;
153
+ }
154
+
151
155
  void SeekToFirst() override;
152
156
  void SeekToLast() override;
153
157