@nxtedition/rocksdb 8.2.8 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (359) hide show
  1. package/deps/rocksdb/rocksdb/CMakeLists.txt +7 -1
  2. package/deps/rocksdb/rocksdb/Makefile +22 -19
  3. package/deps/rocksdb/rocksdb/TARGETS +8 -0
  4. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +157 -61
  5. package/deps/rocksdb/rocksdb/cache/cache_test.cc +43 -92
  6. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +632 -455
  7. package/deps/rocksdb/rocksdb/cache/clock_cache.h +244 -149
  8. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +41 -13
  9. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +11 -1
  10. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +216 -17
  11. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +7 -5
  12. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +279 -199
  13. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +2 -1
  14. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +159 -8
  15. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +28 -2
  16. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +1 -1
  17. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +8 -0
  18. package/deps/rocksdb/rocksdb/crash_test.mk +14 -0
  19. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +3 -1
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -1
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -1
  22. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
  23. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +1 -1
  24. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +18 -21
  25. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +1 -2
  26. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -1
  27. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +2 -3
  28. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +1 -1
  29. package/deps/rocksdb/rocksdb/db/builder.cc +32 -7
  30. package/deps/rocksdb/rocksdb/db/c.cc +169 -6
  31. package/deps/rocksdb/rocksdb/db/c_test.c +104 -6
  32. package/deps/rocksdb/rocksdb/db/column_family.cc +98 -47
  33. package/deps/rocksdb/rocksdb/db/column_family.h +25 -2
  34. package/deps/rocksdb/rocksdb/db/column_family_test.cc +213 -2
  35. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -1
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +93 -23
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +33 -9
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +7 -6
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -6
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +2 -2
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +107 -43
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +15 -4
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -0
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +4 -2
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +25 -17
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +13 -4
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -11
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +29 -4
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +24 -31
  50. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +3 -1
  51. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +19 -19
  52. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +2 -1
  53. package/deps/rocksdb/rocksdb/db/convenience.cc +20 -3
  54. package/deps/rocksdb/rocksdb/db/convenience_impl.h +15 -0
  55. package/deps/rocksdb/rocksdb/db/corruption_test.cc +17 -0
  56. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
  57. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +17 -3
  58. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +5 -0
  59. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +15 -15
  60. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +666 -44
  61. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +2 -29
  62. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +274 -1
  63. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +40 -19
  64. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +6 -5
  65. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +250 -116
  66. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +51 -23
  67. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +354 -96
  68. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +6 -3
  69. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +2 -1
  70. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +5 -0
  71. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +50 -21
  72. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +26 -13
  73. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +13 -5
  74. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +61 -21
  75. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +8 -87
  76. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +7 -1
  77. package/deps/rocksdb/rocksdb/db/db_iter.cc +2 -2
  78. package/deps/rocksdb/rocksdb/db/db_iter.h +1 -0
  79. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +4 -11
  80. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +6 -6
  81. package/deps/rocksdb/rocksdb/db/db_options_test.cc +39 -29
  82. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +26 -36
  83. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +106 -0
  84. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +12 -3
  85. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +1 -1
  86. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +1 -0
  87. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +279 -166
  88. package/deps/rocksdb/rocksdb/db/db_test.cc +48 -21
  89. package/deps/rocksdb/rocksdb/db/db_test2.cc +81 -12
  90. package/deps/rocksdb/rocksdb/db/db_test_util.cc +14 -6
  91. package/deps/rocksdb/rocksdb/db/db_test_util.h +40 -0
  92. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +13 -1
  93. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +233 -0
  94. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +143 -0
  95. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +6 -6
  96. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -2
  97. package/deps/rocksdb/rocksdb/db/dbformat.cc +36 -0
  98. package/deps/rocksdb/rocksdb/db/dbformat.h +169 -20
  99. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +129 -0
  100. package/deps/rocksdb/rocksdb/db/error_handler.cc +16 -0
  101. package/deps/rocksdb/rocksdb/db/error_handler.h +6 -3
  102. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
  103. package/deps/rocksdb/rocksdb/db/event_helpers.cc +4 -0
  104. package/deps/rocksdb/rocksdb/db/experimental.cc +2 -1
  105. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +4 -4
  106. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +17 -8
  107. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -4
  108. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -1
  109. package/deps/rocksdb/rocksdb/db/file_indexer.cc +2 -4
  110. package/deps/rocksdb/rocksdb/db/flush_job.cc +101 -11
  111. package/deps/rocksdb/rocksdb/db/flush_job.h +24 -1
  112. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +88 -11
  113. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +2 -3
  114. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +159 -91
  115. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +19 -10
  116. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +143 -0
  117. package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -1
  118. package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
  119. package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -1
  120. package/deps/rocksdb/rocksdb/db/log_reader.h +3 -2
  121. package/deps/rocksdb/rocksdb/db/log_test.cc +17 -21
  122. package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
  123. package/deps/rocksdb/rocksdb/db/log_writer.h +3 -2
  124. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +4 -3
  125. package/deps/rocksdb/rocksdb/db/memtable.cc +52 -13
  126. package/deps/rocksdb/rocksdb/db/memtable.h +45 -1
  127. package/deps/rocksdb/rocksdb/db/memtable_list.cc +44 -10
  128. package/deps/rocksdb/rocksdb/db/memtable_list.h +32 -1
  129. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +90 -4
  130. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +2 -2
  131. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +1 -0
  132. package/deps/rocksdb/rocksdb/db/repair.cc +21 -4
  133. package/deps/rocksdb/rocksdb/db/repair_test.cc +143 -2
  134. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +5 -4
  135. package/deps/rocksdb/rocksdb/db/table_cache.cc +44 -35
  136. package/deps/rocksdb/rocksdb/db/table_cache.h +6 -6
  137. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
  138. package/deps/rocksdb/rocksdb/db/version_builder.cc +0 -1
  139. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +236 -204
  140. package/deps/rocksdb/rocksdb/db/version_edit.cc +66 -4
  141. package/deps/rocksdb/rocksdb/db/version_edit.h +48 -6
  142. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +80 -8
  143. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +12 -0
  144. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +86 -17
  145. package/deps/rocksdb/rocksdb/db/version_set.cc +136 -41
  146. package/deps/rocksdb/rocksdb/db/version_set.h +28 -7
  147. package/deps/rocksdb/rocksdb/db/version_set_test.cc +25 -15
  148. package/deps/rocksdb/rocksdb/db/write_batch.cc +11 -0
  149. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +3 -0
  150. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +16 -0
  151. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +22 -3
  152. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +2 -0
  153. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +42 -0
  154. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +32 -3
  155. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +7 -0
  156. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +247 -120
  157. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +9 -4
  158. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +13 -6
  159. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +2 -0
  160. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +15 -27
  161. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +264 -69
  162. package/deps/rocksdb/rocksdb/env/env.cc +1 -2
  163. package/deps/rocksdb/rocksdb/env/env_encryption.cc +11 -165
  164. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +0 -17
  165. package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -2
  166. package/deps/rocksdb/rocksdb/env/env_test.cc +86 -2
  167. package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
  168. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +78 -0
  169. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +34 -0
  170. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -0
  171. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +15 -4
  172. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +52 -43
  173. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +34 -18
  174. package/deps/rocksdb/rocksdb/file/file_util.cc +10 -5
  175. package/deps/rocksdb/rocksdb/file/file_util.h +13 -1
  176. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +724 -79
  177. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +64 -33
  178. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -16
  179. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +23 -12
  180. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +3 -0
  181. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +2 -1
  182. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +153 -88
  183. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +70 -2
  184. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +50 -11
  185. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -0
  186. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +16 -2
  187. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +1 -1
  188. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +55 -8
  189. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +32 -4
  190. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +9 -109
  191. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +90 -13
  192. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +3 -0
  193. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +85 -17
  194. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +13 -1
  195. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +2 -1
  196. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +5 -1
  197. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +21 -2
  198. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +7 -1
  199. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +6 -0
  200. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +5 -0
  201. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +33 -2
  202. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +14 -0
  203. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +33 -2
  204. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +0 -3
  205. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  206. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -0
  207. package/deps/rocksdb/rocksdb/memory/arena_test.cc +18 -11
  208. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +2 -1
  209. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +69 -34
  210. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +16 -1
  211. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +10 -0
  212. package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
  213. package/deps/rocksdb/rocksdb/options/cf_options.h +10 -2
  214. package/deps/rocksdb/rocksdb/options/customizable_test.cc +2 -1
  215. package/deps/rocksdb/rocksdb/options/db_options.cc +7 -0
  216. package/deps/rocksdb/rocksdb/options/db_options.h +1 -0
  217. package/deps/rocksdb/rocksdb/options/options.cc +15 -1
  218. package/deps/rocksdb/rocksdb/options/options_helper.cc +6 -0
  219. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +11 -3
  220. package/deps/rocksdb/rocksdb/options/options_test.cc +8 -0
  221. package/deps/rocksdb/rocksdb/port/mmap.h +20 -0
  222. package/deps/rocksdb/rocksdb/port/stack_trace.cc +27 -12
  223. package/deps/rocksdb/rocksdb/port/win/env_win.h +1 -1
  224. package/deps/rocksdb/rocksdb/src.mk +3 -0
  225. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  226. package/deps/rocksdb/rocksdb/table/block_based/block.cc +48 -22
  227. package/deps/rocksdb/rocksdb/table/block_based/block.h +60 -12
  228. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +115 -42
  229. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +6 -5
  230. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +60 -2
  231. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +2 -0
  232. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +62 -44
  233. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +36 -14
  234. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +38 -15
  235. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +219 -51
  236. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +41 -8
  237. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -1
  238. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +50 -21
  239. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +11 -4
  240. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +195 -55
  241. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  242. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +31 -16
  243. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +97 -58
  244. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +1 -1
  245. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +6 -0
  246. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +27 -12
  247. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +3 -1
  248. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +114 -70
  249. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +1 -2
  250. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +9 -6
  251. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +15 -3
  252. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +6 -3
  253. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +11 -11
  254. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +3 -0
  255. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +1 -0
  256. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +6 -2
  257. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -2
  258. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +2 -3
  259. package/deps/rocksdb/rocksdb/table/format.cc +175 -33
  260. package/deps/rocksdb/rocksdb/table/format.h +63 -10
  261. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +10 -2
  262. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +12 -4
  263. package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -0
  264. package/deps/rocksdb/rocksdb/table/mock_table.cc +8 -3
  265. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +10 -5
  266. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +10 -1
  267. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +1 -2
  268. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +3 -3
  269. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +12 -3
  270. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +26 -1
  271. package/deps/rocksdb/rocksdb/table/table_builder.h +6 -2
  272. package/deps/rocksdb/rocksdb/table/table_properties.cc +6 -0
  273. package/deps/rocksdb/rocksdb/table/table_test.cc +52 -22
  274. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +19 -7
  275. package/deps/rocksdb/rocksdb/test_util/sync_point.h +3 -1
  276. package/deps/rocksdb/rocksdb/test_util/testutil.cc +29 -0
  277. package/deps/rocksdb/rocksdb/test_util/testutil.h +19 -0
  278. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +65 -26
  279. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +8 -5
  280. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -0
  281. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
  282. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +0 -1
  283. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +4 -0
  284. package/deps/rocksdb/rocksdb/unreleased_history/README.txt +73 -0
  285. package/deps/rocksdb/rocksdb/unreleased_history/add.sh +27 -0
  286. package/deps/rocksdb/rocksdb/unreleased_history/behavior_changes/.gitkeep +0 -0
  287. package/deps/rocksdb/rocksdb/unreleased_history/bug_fixes/.gitkeep +0 -0
  288. package/deps/rocksdb/rocksdb/unreleased_history/new_features/.gitkeep +0 -0
  289. package/deps/rocksdb/rocksdb/unreleased_history/performance_improvements/.gitkeep +0 -0
  290. package/deps/rocksdb/rocksdb/unreleased_history/public_api_changes/.gitkeep +0 -0
  291. package/deps/rocksdb/rocksdb/unreleased_history/release.sh +104 -0
  292. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +5 -0
  293. package/deps/rocksdb/rocksdb/util/bloom_impl.h +3 -3
  294. package/deps/rocksdb/rocksdb/util/cast_util.h +14 -0
  295. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +2 -0
  296. package/deps/rocksdb/rocksdb/util/comparator.cc +29 -7
  297. package/deps/rocksdb/rocksdb/util/compression.cc +4 -4
  298. package/deps/rocksdb/rocksdb/util/compression.h +110 -32
  299. package/deps/rocksdb/rocksdb/util/core_local.h +2 -1
  300. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +4 -4
  301. package/deps/rocksdb/rocksdb/util/filelock_test.cc +3 -0
  302. package/deps/rocksdb/rocksdb/util/hash.h +7 -3
  303. package/deps/rocksdb/rocksdb/util/hash_test.cc +44 -0
  304. package/deps/rocksdb/rocksdb/util/math.h +58 -6
  305. package/deps/rocksdb/rocksdb/util/math128.h +29 -7
  306. package/deps/rocksdb/rocksdb/util/mutexlock.h +35 -27
  307. package/deps/rocksdb/rocksdb/util/single_thread_executor.h +1 -0
  308. package/deps/rocksdb/rocksdb/util/stop_watch.h +1 -1
  309. package/deps/rocksdb/rocksdb/util/thread_operation.h +8 -1
  310. package/deps/rocksdb/rocksdb/util/udt_util.cc +343 -0
  311. package/deps/rocksdb/rocksdb/util/udt_util.h +173 -1
  312. package/deps/rocksdb/rocksdb/util/udt_util_test.cc +447 -0
  313. package/deps/rocksdb/rocksdb/util/write_batch_util.cc +25 -0
  314. package/deps/rocksdb/rocksdb/util/write_batch_util.h +80 -0
  315. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +4 -4
  316. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +69 -25
  317. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +7 -6
  318. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +1 -1
  319. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -3
  320. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +6 -11
  321. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +1 -2
  322. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +4 -5
  323. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +1 -1
  324. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +2 -2
  325. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +2 -1
  326. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +3 -3
  327. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
  328. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +2 -3
  329. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +2 -2
  330. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  331. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +23 -8
  332. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +9 -6
  333. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +37 -12
  334. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +231 -33
  335. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +0 -1
  336. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +76 -20
  337. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +18 -9
  338. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +40 -23
  339. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +13 -12
  340. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +7 -0
  341. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -1
  342. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +41 -11
  343. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +6 -3
  344. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +71 -24
  345. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +19 -4
  346. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +60 -107
  347. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +39 -11
  348. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +6 -3
  349. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +14 -8
  350. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +1 -1
  351. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +10 -5
  352. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
  353. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -1
  354. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +2 -1
  355. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +6 -6
  356. package/deps/rocksdb/rocksdb.gyp +2 -0
  357. package/package.json +1 -1
  358. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  359. package/prebuilds/linux-x64/node.napi.node +0 -0
@@ -0,0 +1,447 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+ //
3
+ // This source code is licensed under both the GPLv2 (found in the
4
+ // COPYING file in the root directory) and Apache 2.0 License
5
+ // (found in the LICENSE.Apache file in the root directory).
6
+
7
+ #include "util/udt_util.h"
8
+
9
+ #include <gtest/gtest.h>
10
+
11
+ #include "db/dbformat.h"
12
+ #include "test_util/testharness.h"
13
+ #include "test_util/testutil.h"
14
+
15
+ namespace ROCKSDB_NAMESPACE {
16
+ namespace {
17
+ static const std::string kTestKeyWithoutTs = "key";
18
+ static const std::string kValuePlaceHolder = "value";
19
+ } // namespace
20
+
21
+ class HandleTimestampSizeDifferenceTest : public testing::Test {
22
+ public:
23
+ HandleTimestampSizeDifferenceTest() {}
24
+
25
+ // Test handler used to collect the column family id and user keys contained
26
+ // in a WriteBatch for test verification. And verifies the value part stays
27
+ // the same if it's available.
28
+ class KeyCollector : public WriteBatch::Handler {
29
+ public:
30
+ explicit KeyCollector() {}
31
+
32
+ ~KeyCollector() override {}
33
+
34
+ Status PutCF(uint32_t cf, const Slice& key, const Slice& value) override {
35
+ if (value.compare(kValuePlaceHolder) != 0) {
36
+ return Status::InvalidArgument();
37
+ }
38
+ return AddKey(cf, key);
39
+ }
40
+
41
+ Status DeleteCF(uint32_t cf, const Slice& key) override {
42
+ return AddKey(cf, key);
43
+ }
44
+
45
+ Status SingleDeleteCF(uint32_t cf, const Slice& key) override {
46
+ return AddKey(cf, key);
47
+ }
48
+
49
+ Status DeleteRangeCF(uint32_t cf, const Slice& begin_key,
50
+ const Slice& end_key) override {
51
+ Status status = AddKey(cf, begin_key);
52
+ if (!status.ok()) {
53
+ return status;
54
+ }
55
+ return AddKey(cf, end_key);
56
+ }
57
+
58
+ Status MergeCF(uint32_t cf, const Slice& key, const Slice& value) override {
59
+ if (value.compare(kValuePlaceHolder) != 0) {
60
+ return Status::InvalidArgument();
61
+ }
62
+ return AddKey(cf, key);
63
+ }
64
+
65
+ Status PutBlobIndexCF(uint32_t cf, const Slice& key,
66
+ const Slice& value) override {
67
+ if (value.compare(kValuePlaceHolder) != 0) {
68
+ return Status::InvalidArgument();
69
+ }
70
+ return AddKey(cf, key);
71
+ }
72
+
73
+ Status MarkBeginPrepare(bool) override { return Status::OK(); }
74
+
75
+ Status MarkEndPrepare(const Slice&) override { return Status::OK(); }
76
+
77
+ Status MarkRollback(const Slice&) override { return Status::OK(); }
78
+
79
+ Status MarkCommit(const Slice&) override { return Status::OK(); }
80
+
81
+ Status MarkCommitWithTimestamp(const Slice&, const Slice&) override {
82
+ return Status::OK();
83
+ }
84
+
85
+ Status MarkNoop(bool) override { return Status::OK(); }
86
+
87
+ const std::vector<std::pair<uint32_t, const Slice>>& GetKeys() const {
88
+ return keys_;
89
+ }
90
+
91
+ private:
92
+ Status AddKey(uint32_t cf, const Slice& key) {
93
+ keys_.push_back(std::make_pair(cf, key));
94
+ return Status::OK();
95
+ }
96
+ std::vector<std::pair<uint32_t, const Slice>> keys_;
97
+ };
98
+
99
+ void CreateKey(std::string* key_buf, size_t ts_sz) {
100
+ if (ts_sz > 0) {
101
+ AppendKeyWithMinTimestamp(key_buf, kTestKeyWithoutTs, ts_sz);
102
+ } else {
103
+ key_buf->assign(kTestKeyWithoutTs);
104
+ }
105
+ }
106
+
107
+ void CreateWriteBatch(const UnorderedMap<uint32_t, size_t>& ts_sz_for_batch,
108
+ WriteBatch* batch) {
109
+ for (const auto& [cf_id, ts_sz] : ts_sz_for_batch) {
110
+ std::string key;
111
+ CreateKey(&key, ts_sz);
112
+ ASSERT_OK(WriteBatchInternal::Put(batch, cf_id, key, kValuePlaceHolder));
113
+ ASSERT_OK(WriteBatchInternal::Delete(batch, cf_id, key));
114
+ ASSERT_OK(WriteBatchInternal::SingleDelete(batch, cf_id, key));
115
+ ASSERT_OK(WriteBatchInternal::DeleteRange(batch, cf_id, key, key));
116
+ ASSERT_OK(
117
+ WriteBatchInternal::Merge(batch, cf_id, key, kValuePlaceHolder));
118
+ ASSERT_OK(WriteBatchInternal::PutBlobIndex(batch, cf_id, key,
119
+ kValuePlaceHolder));
120
+ }
121
+ }
122
+
123
+ void CheckSequenceEqual(const WriteBatch& orig_batch,
124
+ const WriteBatch& new_batch) {
125
+ ASSERT_EQ(WriteBatchInternal::Sequence(&orig_batch),
126
+ WriteBatchInternal::Sequence(&new_batch));
127
+ }
128
+ void CheckCountEqual(const WriteBatch& orig_batch,
129
+ const WriteBatch& new_batch) {
130
+ ASSERT_EQ(WriteBatchInternal::Count(&orig_batch),
131
+ WriteBatchInternal::Count(&new_batch));
132
+ }
133
+
134
+ void VerifyKeys(
135
+ const std::vector<std::pair<uint32_t, const Slice>>& keys_with_ts,
136
+ const std::vector<std::pair<uint32_t, const Slice>>& keys_without_ts,
137
+ size_t ts_sz, std::optional<uint32_t> dropped_cf) {
138
+ ASSERT_EQ(keys_with_ts.size(), keys_without_ts.size());
139
+ const std::string kTsMin(ts_sz, static_cast<unsigned char>(0));
140
+ for (size_t i = 0; i < keys_with_ts.size(); i++) {
141
+ // TimestampRecoveryHandler ignores dropped column family and copy it over
142
+ // as is. Check the keys stay the same.
143
+ if (dropped_cf.has_value() &&
144
+ keys_with_ts[i].first == dropped_cf.value()) {
145
+ ASSERT_EQ(keys_with_ts[i].first, keys_without_ts[i].first);
146
+ ASSERT_EQ(keys_with_ts[i].second, keys_without_ts[i].second);
147
+ continue;
148
+ }
149
+ const Slice& key_with_ts = keys_with_ts[i].second;
150
+ const Slice& key_without_ts = keys_without_ts[i].second;
151
+ ASSERT_TRUE(key_with_ts.starts_with(key_without_ts));
152
+ ASSERT_EQ(key_with_ts.size() - key_without_ts.size(), ts_sz);
153
+ ASSERT_TRUE(key_with_ts.ends_with(kTsMin));
154
+ }
155
+ }
156
+
157
+ void CheckContentsWithTimestampStripping(const WriteBatch& orig_batch,
158
+ const WriteBatch& new_batch,
159
+ size_t ts_sz,
160
+ std::optional<uint32_t> dropped_cf) {
161
+ CheckSequenceEqual(orig_batch, new_batch);
162
+ CheckCountEqual(orig_batch, new_batch);
163
+ KeyCollector collector_for_orig_batch;
164
+ ASSERT_OK(orig_batch.Iterate(&collector_for_orig_batch));
165
+ KeyCollector collector_for_new_batch;
166
+ ASSERT_OK(new_batch.Iterate(&collector_for_new_batch));
167
+ VerifyKeys(collector_for_orig_batch.GetKeys(),
168
+ collector_for_new_batch.GetKeys(), ts_sz, dropped_cf);
169
+ }
170
+
171
+ void CheckContentsWithTimestampPadding(const WriteBatch& orig_batch,
172
+ const WriteBatch& new_batch,
173
+ size_t ts_sz) {
174
+ CheckSequenceEqual(orig_batch, new_batch);
175
+ CheckCountEqual(orig_batch, new_batch);
176
+ KeyCollector collector_for_orig_batch;
177
+ ASSERT_OK(orig_batch.Iterate(&collector_for_orig_batch));
178
+ KeyCollector collector_for_new_batch;
179
+ ASSERT_OK(new_batch.Iterate(&collector_for_new_batch));
180
+ VerifyKeys(collector_for_new_batch.GetKeys(),
181
+ collector_for_orig_batch.GetKeys(), ts_sz,
182
+ std::nullopt /* dropped_cf */);
183
+ }
184
+ };
185
+
186
+ TEST_F(HandleTimestampSizeDifferenceTest, AllColumnFamiliesConsistent) {
187
+ UnorderedMap<uint32_t, size_t> running_ts_sz = {{1, sizeof(uint64_t)},
188
+ {2, 0}};
189
+ UnorderedMap<uint32_t, size_t> record_ts_sz = {{1, sizeof(uint64_t)}};
190
+ WriteBatch batch;
191
+ CreateWriteBatch(running_ts_sz, &batch);
192
+
193
+ // All `check_mode` pass with OK status and `batch` not checked or updated.
194
+ ASSERT_OK(HandleWriteBatchTimestampSizeDifference(
195
+ &batch, running_ts_sz, record_ts_sz,
196
+ TimestampSizeConsistencyMode::kVerifyConsistency));
197
+ std::unique_ptr<WriteBatch> new_batch(nullptr);
198
+ ASSERT_OK(HandleWriteBatchTimestampSizeDifference(
199
+ &batch, running_ts_sz, record_ts_sz,
200
+ TimestampSizeConsistencyMode::kReconcileInconsistency, &new_batch));
201
+ ASSERT_TRUE(new_batch.get() == nullptr);
202
+ }
203
+
204
+ TEST_F(HandleTimestampSizeDifferenceTest,
205
+ AllInconsistentColumnFamiliesDropped) {
206
+ UnorderedMap<uint32_t, size_t> running_ts_sz = {{2, 0}};
207
+ UnorderedMap<uint32_t, size_t> record_ts_sz = {{1, sizeof(uint64_t)},
208
+ {3, sizeof(char)}};
209
+ WriteBatch batch;
210
+ CreateWriteBatch(record_ts_sz, &batch);
211
+
212
+ // All `check_mode` pass with OK status and `batch` not checked or updated.
213
+ ASSERT_OK(HandleWriteBatchTimestampSizeDifference(
214
+ &batch, running_ts_sz, record_ts_sz,
215
+ TimestampSizeConsistencyMode::kVerifyConsistency));
216
+ std::unique_ptr<WriteBatch> new_batch(nullptr);
217
+ ASSERT_OK(HandleWriteBatchTimestampSizeDifference(
218
+ &batch, running_ts_sz, record_ts_sz,
219
+ TimestampSizeConsistencyMode::kReconcileInconsistency, &new_batch));
220
+ ASSERT_TRUE(new_batch.get() == nullptr);
221
+ }
222
+
223
+ TEST_F(HandleTimestampSizeDifferenceTest, InvolvedColumnFamiliesConsistent) {
224
+ UnorderedMap<uint32_t, size_t> running_ts_sz = {{1, sizeof(uint64_t)},
225
+ {2, sizeof(char)}};
226
+ UnorderedMap<uint32_t, size_t> record_ts_sz = {{1, sizeof(uint64_t)}};
227
+ WriteBatch batch;
228
+ CreateWriteBatch(record_ts_sz, &batch);
229
+
230
+ // All `check_mode` pass with OK status and `batch` not updated.
231
+ ASSERT_OK(HandleWriteBatchTimestampSizeDifference(
232
+ &batch, running_ts_sz, record_ts_sz,
233
+ TimestampSizeConsistencyMode::kVerifyConsistency));
234
+ std::unique_ptr<WriteBatch> new_batch(nullptr);
235
+ ASSERT_OK(HandleWriteBatchTimestampSizeDifference(
236
+ &batch, running_ts_sz, record_ts_sz,
237
+ TimestampSizeConsistencyMode::kReconcileInconsistency, &new_batch));
238
+ ASSERT_TRUE(new_batch.get() == nullptr);
239
+ }
240
+
241
+ TEST_F(HandleTimestampSizeDifferenceTest,
242
+ InconsistentColumnFamilyNeedsTimestampStripping) {
243
+ UnorderedMap<uint32_t, size_t> running_ts_sz = {{1, 0}, {2, sizeof(char)}};
244
+ UnorderedMap<uint32_t, size_t> record_ts_sz = {{1, sizeof(uint64_t)}};
245
+ WriteBatch batch;
246
+ CreateWriteBatch(record_ts_sz, &batch);
247
+
248
+ // kVerifyConsistency doesn't tolerate inconsistency for running column
249
+ // families.
250
+ ASSERT_TRUE(HandleWriteBatchTimestampSizeDifference(
251
+ &batch, running_ts_sz, record_ts_sz,
252
+ TimestampSizeConsistencyMode::kVerifyConsistency)
253
+ .IsInvalidArgument());
254
+
255
+ std::unique_ptr<WriteBatch> new_batch(nullptr);
256
+ ASSERT_OK(HandleWriteBatchTimestampSizeDifference(
257
+ &batch, running_ts_sz, record_ts_sz,
258
+ TimestampSizeConsistencyMode::kReconcileInconsistency, &new_batch));
259
+ ASSERT_TRUE(new_batch.get() != nullptr);
260
+ CheckContentsWithTimestampStripping(batch, *new_batch, sizeof(uint64_t),
261
+ std::nullopt /* dropped_cf */);
262
+ }
263
+
264
+ TEST_F(HandleTimestampSizeDifferenceTest,
265
+ InconsistentColumnFamilyNeedsTimestampPadding) {
266
+ UnorderedMap<uint32_t, size_t> running_ts_sz = {{1, sizeof(uint64_t)}};
267
+ // Make `record_ts_sz` not contain zero timestamp size entries to follow the
268
+ // behavior of actual WAL log timestamp size record.
269
+ UnorderedMap<uint32_t, size_t> record_ts_sz;
270
+ WriteBatch batch;
271
+ CreateWriteBatch({{1, 0}}, &batch);
272
+
273
+ // kVerifyConsistency doesn't tolerate inconsistency for running column
274
+ // families.
275
+ ASSERT_TRUE(HandleWriteBatchTimestampSizeDifference(
276
+ &batch, running_ts_sz, record_ts_sz,
277
+ TimestampSizeConsistencyMode::kVerifyConsistency)
278
+ .IsInvalidArgument());
279
+
280
+ std::unique_ptr<WriteBatch> new_batch(nullptr);
281
+ ASSERT_OK(HandleWriteBatchTimestampSizeDifference(
282
+ &batch, running_ts_sz, record_ts_sz,
283
+ TimestampSizeConsistencyMode::kReconcileInconsistency, &new_batch));
284
+ ASSERT_TRUE(new_batch.get() != nullptr);
285
+ CheckContentsWithTimestampPadding(batch, *new_batch, sizeof(uint64_t));
286
+ }
287
+
288
+ TEST_F(HandleTimestampSizeDifferenceTest,
289
+ InconsistencyReconcileCopyOverDroppedColumnFamily) {
290
+ UnorderedMap<uint32_t, size_t> running_ts_sz = {{1, 0}};
291
+ UnorderedMap<uint32_t, size_t> record_ts_sz = {{1, sizeof(uint64_t)},
292
+ {2, sizeof(char)}};
293
+ WriteBatch batch;
294
+ CreateWriteBatch(record_ts_sz, &batch);
295
+ std::unique_ptr<WriteBatch> new_batch(nullptr);
296
+
297
+ // kReconcileInconsistency tolerate inconsistency for dropped column family
298
+ // and all related entries copied over to the new WriteBatch.
299
+ ASSERT_OK(HandleWriteBatchTimestampSizeDifference(
300
+ &batch, running_ts_sz, record_ts_sz,
301
+ TimestampSizeConsistencyMode::kReconcileInconsistency, &new_batch));
302
+
303
+ ASSERT_TRUE(new_batch.get() != nullptr);
304
+ CheckContentsWithTimestampStripping(batch, *new_batch, sizeof(uint64_t),
305
+ std::optional<uint32_t>(2));
306
+ }
307
+
308
+ TEST_F(HandleTimestampSizeDifferenceTest, UnrecoverableInconsistency) {
309
+ UnorderedMap<uint32_t, size_t> running_ts_sz = {{1, sizeof(char)}};
310
+ UnorderedMap<uint32_t, size_t> record_ts_sz = {{1, sizeof(uint64_t)}};
311
+ WriteBatch batch;
312
+ CreateWriteBatch(record_ts_sz, &batch);
313
+
314
+ ASSERT_TRUE(HandleWriteBatchTimestampSizeDifference(
315
+ &batch, running_ts_sz, record_ts_sz,
316
+ TimestampSizeConsistencyMode::kVerifyConsistency)
317
+ .IsInvalidArgument());
318
+
319
+ ASSERT_TRUE(HandleWriteBatchTimestampSizeDifference(
320
+ &batch, running_ts_sz, record_ts_sz,
321
+ TimestampSizeConsistencyMode::kReconcileInconsistency)
322
+ .IsInvalidArgument());
323
+ }
324
+
325
+ TEST(ValidateUserDefinedTimestampsOptionsTest, EnableUserDefinedTimestamps) {
326
+ bool mark_sst_files = false;
327
+ const Comparator* new_comparator = test::BytewiseComparatorWithU64TsWrapper();
328
+ const Comparator* old_comparator = BytewiseComparator();
329
+ ASSERT_OK(ValidateUserDefinedTimestampsOptions(
330
+ new_comparator, std::string(old_comparator->Name()),
331
+ false /*new_persist_udt*/, true /*old_persist_udt*/, &mark_sst_files));
332
+ ASSERT_TRUE(mark_sst_files);
333
+
334
+ ASSERT_OK(ValidateUserDefinedTimestampsOptions(
335
+ new_comparator, std::string(old_comparator->Name()),
336
+ false /*new_persist_udt*/, false /*old_persist_udt*/, &mark_sst_files));
337
+ ASSERT_TRUE(mark_sst_files);
338
+ }
339
+
340
+ TEST(ValidateUserDefinedTimestampsOptionsTest,
341
+ EnableUserDefinedTimestampsNewPersistUDTFlagIncorrect) {
342
+ bool mark_sst_files = false;
343
+ const Comparator* new_comparator = test::BytewiseComparatorWithU64TsWrapper();
344
+ const Comparator* old_comparator = BytewiseComparator();
345
+ ASSERT_TRUE(ValidateUserDefinedTimestampsOptions(
346
+ new_comparator, std::string(old_comparator->Name()),
347
+ true /*new_persist_udt*/, true /*old_persist_udt*/,
348
+ &mark_sst_files)
349
+ .IsInvalidArgument());
350
+ ASSERT_TRUE(ValidateUserDefinedTimestampsOptions(
351
+ new_comparator, std::string(old_comparator->Name()),
352
+ true /*new_persist_udt*/, false /*old_persist_udt*/,
353
+ &mark_sst_files)
354
+ .IsInvalidArgument());
355
+ }
356
+
357
+ TEST(ValidateUserDefinedTimestampsOptionsTest, DisableUserDefinedTimestamps) {
358
+ bool mark_sst_files = false;
359
+ const Comparator* new_comparator = ReverseBytewiseComparator();
360
+ const Comparator* old_comparator =
361
+ test::ReverseBytewiseComparatorWithU64TsWrapper();
362
+ ASSERT_OK(ValidateUserDefinedTimestampsOptions(
363
+ new_comparator, std::string(old_comparator->Name()),
364
+ false /*new_persist_udt*/, false /*old_persist_udt*/, &mark_sst_files));
365
+ ASSERT_FALSE(mark_sst_files);
366
+
367
+ ASSERT_OK(ValidateUserDefinedTimestampsOptions(
368
+ new_comparator, std::string(old_comparator->Name()),
369
+ true /*new_persist_udt*/, false /*old_persist_udt*/, &mark_sst_files));
370
+ ASSERT_FALSE(mark_sst_files);
371
+ }
372
+
373
+ TEST(ValidateUserDefinedTimestampsOptionsTest,
374
+ DisableUserDefinedTimestampsOldPersistUDTFlagIncorrect) {
375
+ bool mark_sst_files = false;
376
+ const Comparator* new_comparator = BytewiseComparator();
377
+ const Comparator* old_comparator = test::BytewiseComparatorWithU64TsWrapper();
378
+ ASSERT_TRUE(ValidateUserDefinedTimestampsOptions(
379
+ new_comparator, std::string(old_comparator->Name()),
380
+ false /*new_persist_udt*/, true /*old_persist_udt*/,
381
+ &mark_sst_files)
382
+ .IsInvalidArgument());
383
+ ASSERT_TRUE(ValidateUserDefinedTimestampsOptions(
384
+ new_comparator, std::string(old_comparator->Name()),
385
+ true /*new_persist_udt*/, true /*old_persist_udt*/,
386
+ &mark_sst_files)
387
+ .IsInvalidArgument());
388
+ }
389
+
390
+ TEST(ValidateUserDefinedTimestampsOptionsTest, UserComparatorUnchanged) {
391
+ bool mark_sst_files = false;
392
+ const Comparator* ucmp_without_ts = BytewiseComparator();
393
+ const Comparator* ucmp_with_ts = test::BytewiseComparatorWithU64TsWrapper();
394
+ ASSERT_OK(ValidateUserDefinedTimestampsOptions(
395
+ ucmp_without_ts, std::string(ucmp_without_ts->Name()),
396
+ false /*new_persist_udt*/, false /*old_persist_udt*/, &mark_sst_files));
397
+ ASSERT_FALSE(mark_sst_files);
398
+ ASSERT_OK(ValidateUserDefinedTimestampsOptions(
399
+ ucmp_without_ts, std::string(ucmp_without_ts->Name()),
400
+ true /*new_persist_udt*/, true /*old_persist_udt*/, &mark_sst_files));
401
+ ASSERT_FALSE(mark_sst_files);
402
+ ASSERT_OK(ValidateUserDefinedTimestampsOptions(
403
+ ucmp_without_ts, std::string(ucmp_without_ts->Name()),
404
+ true /*new_persist_udt*/, false /*old_persist_udt*/, &mark_sst_files));
405
+ ASSERT_FALSE(mark_sst_files);
406
+ ASSERT_OK(ValidateUserDefinedTimestampsOptions(
407
+ ucmp_without_ts, std::string(ucmp_without_ts->Name()),
408
+ false /*new_persist_udt*/, true /*old_persist_udt*/, &mark_sst_files));
409
+ ASSERT_FALSE(mark_sst_files);
410
+
411
+ ASSERT_OK(ValidateUserDefinedTimestampsOptions(
412
+ ucmp_with_ts, std::string(ucmp_with_ts->Name()), true /*new_persist_udt*/,
413
+ true /*old_persist_udt*/, &mark_sst_files));
414
+ ASSERT_FALSE(mark_sst_files);
415
+ ASSERT_OK(ValidateUserDefinedTimestampsOptions(
416
+ ucmp_with_ts, std::string(ucmp_with_ts->Name()),
417
+ false /*new_persist_udt*/, false /*old_persist_udt*/, &mark_sst_files));
418
+ ASSERT_FALSE(mark_sst_files);
419
+ ASSERT_TRUE(ValidateUserDefinedTimestampsOptions(
420
+ ucmp_with_ts, std::string(ucmp_with_ts->Name()),
421
+ true /*new_persist_udt*/, false /*old_persist_udt*/,
422
+ &mark_sst_files)
423
+ .IsInvalidArgument());
424
+ ASSERT_TRUE(ValidateUserDefinedTimestampsOptions(
425
+ ucmp_with_ts, std::string(ucmp_with_ts->Name()),
426
+ false /*new_persist_udt*/, true /*old_persist_udt*/,
427
+ &mark_sst_files)
428
+ .IsInvalidArgument());
429
+ }
430
+
431
+ TEST(ValidateUserDefinedTimestampsOptionsTest, InvalidUserComparatorChange) {
432
+ bool mark_sst_files = false;
433
+ const Comparator* new_comparator = BytewiseComparator();
434
+ const Comparator* old_comparator = ReverseBytewiseComparator();
435
+ ASSERT_TRUE(ValidateUserDefinedTimestampsOptions(
436
+ new_comparator, std::string(old_comparator->Name()),
437
+ false /*new_persist_udt*/, true /*old_persist_udt*/,
438
+ &mark_sst_files)
439
+ .IsInvalidArgument());
440
+ }
441
+ } // namespace ROCKSDB_NAMESPACE
442
+
443
+ int main(int argc, char** argv) {
444
+ ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
445
+ ::testing::InitGoogleTest(&argc, argv);
446
+ return RUN_ALL_TESTS();
447
+ }
@@ -0,0 +1,25 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+ //
3
+ // This source code is licensed under both the GPLv2 (found in the
4
+ // COPYING file in the root directory) and Apache 2.0 License
5
+ // (found in the LICENSE.Apache file in the root directory).
6
+
7
+ #include "util/write_batch_util.h"
8
+
9
+ namespace ROCKSDB_NAMESPACE {
10
+
11
+ Status CollectColumnFamilyIdsFromWriteBatch(
12
+ const WriteBatch& batch, std::vector<uint32_t>* column_family_ids) {
13
+ assert(column_family_ids != nullptr);
14
+ column_family_ids->clear();
15
+ ColumnFamilyCollector handler;
16
+ Status s = batch.Iterate(&handler);
17
+ if (s.ok()) {
18
+ for (const auto& cf : handler.column_families()) {
19
+ column_family_ids->push_back(cf);
20
+ }
21
+ }
22
+ return s;
23
+ }
24
+
25
+ } // namespace ROCKSDB_NAMESPACE
@@ -0,0 +1,80 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+ //
3
+ // This source code is licensed under both the GPLv2 (found in the
4
+ // COPYING file in the root directory) and Apache 2.0 License
5
+ // (found in the LICENSE.Apache file in the root directory).
6
+
7
+ #pragma once
8
+ #include <unordered_set>
9
+ #include <vector>
10
+
11
+ #include "rocksdb/slice.h"
12
+ #include "rocksdb/status.h"
13
+ #include "rocksdb/write_batch.h"
14
+
15
+ namespace ROCKSDB_NAMESPACE {
16
+ // ColumnFamilyCollector is a write batch handler which does nothing
17
+ // except recording unique column family IDs
18
+ class ColumnFamilyCollector : public WriteBatch::Handler {
19
+ std::unordered_set<uint32_t> column_family_ids_;
20
+
21
+ Status AddColumnFamilyId(uint32_t column_family_id) {
22
+ column_family_ids_.insert(column_family_id);
23
+ return Status::OK();
24
+ }
25
+
26
+ public:
27
+ explicit ColumnFamilyCollector() {}
28
+
29
+ ~ColumnFamilyCollector() override {}
30
+
31
+ Status PutCF(uint32_t column_family_id, const Slice&, const Slice&) override {
32
+ return AddColumnFamilyId(column_family_id);
33
+ }
34
+
35
+ Status DeleteCF(uint32_t column_family_id, const Slice&) override {
36
+ return AddColumnFamilyId(column_family_id);
37
+ }
38
+
39
+ Status SingleDeleteCF(uint32_t column_family_id, const Slice&) override {
40
+ return AddColumnFamilyId(column_family_id);
41
+ }
42
+
43
+ Status DeleteRangeCF(uint32_t column_family_id, const Slice&,
44
+ const Slice&) override {
45
+ return AddColumnFamilyId(column_family_id);
46
+ }
47
+
48
+ Status MergeCF(uint32_t column_family_id, const Slice&,
49
+ const Slice&) override {
50
+ return AddColumnFamilyId(column_family_id);
51
+ }
52
+
53
+ Status PutBlobIndexCF(uint32_t column_family_id, const Slice&,
54
+ const Slice&) override {
55
+ return AddColumnFamilyId(column_family_id);
56
+ }
57
+
58
+ Status MarkBeginPrepare(bool) override { return Status::OK(); }
59
+
60
+ Status MarkEndPrepare(const Slice&) override { return Status::OK(); }
61
+
62
+ Status MarkRollback(const Slice&) override { return Status::OK(); }
63
+
64
+ Status MarkCommit(const Slice&) override { return Status::OK(); }
65
+
66
+ Status MarkCommitWithTimestamp(const Slice&, const Slice&) override {
67
+ return Status::OK();
68
+ }
69
+
70
+ Status MarkNoop(bool) override { return Status::OK(); }
71
+
72
+ const std::unordered_set<uint32_t>& column_families() const {
73
+ return column_family_ids_;
74
+ }
75
+ };
76
+
77
+ Status CollectColumnFamilyIdsFromWriteBatch(
78
+ const WriteBatch& batch, std::vector<uint32_t>* column_family_ids);
79
+
80
+ } // namespace ROCKSDB_NAMESPACE
@@ -589,7 +589,7 @@ void AssertExists(DB* db, int from, int to) {
589
589
  for (int i = from; i < to; ++i) {
590
590
  std::string key = "testkey" + std::to_string(i);
591
591
  std::string value;
592
- Status s = db->Get(ReadOptions(), Slice(key), &value);
592
+ ASSERT_OK(db->Get(ReadOptions(), Slice(key), &value));
593
593
  ASSERT_EQ(value, "testvalue" + std::to_string(i));
594
594
  }
595
595
  }
@@ -4308,13 +4308,13 @@ TEST_F(BackupEngineTest, ExcludeFiles) {
4308
4308
  for (auto be_pair :
4309
4309
  {std::make_pair(backup_engine_.get(), alt_backup_engine),
4310
4310
  std::make_pair(alt_backup_engine, backup_engine_.get())}) {
4311
- DestroyDB(dbname_, options_);
4311
+ ASSERT_OK(DestroyDB(dbname_, options_));
4312
4312
  RestoreOptions ro;
4313
4313
  // Fails without alternate dir
4314
4314
  ASSERT_TRUE(be_pair.first->RestoreDBFromLatestBackup(dbname_, dbname_, ro)
4315
4315
  .IsInvalidArgument());
4316
4316
 
4317
- DestroyDB(dbname_, options_);
4317
+ ASSERT_OK(DestroyDB(dbname_, options_));
4318
4318
  // Works with alternate dir
4319
4319
  ro.alternate_dirs.push_front(be_pair.second);
4320
4320
  ASSERT_OK(be_pair.first->RestoreDBFromLatestBackup(dbname_, dbname_, ro));
@@ -4332,7 +4332,7 @@ TEST_F(BackupEngineTest, ExcludeFiles) {
4332
4332
  for (auto be_pair :
4333
4333
  {std::make_pair(backup_engine_.get(), alt_backup_engine),
4334
4334
  std::make_pair(alt_backup_engine, backup_engine_.get())}) {
4335
- DestroyDB(dbname_, options_);
4335
+ ASSERT_OK(DestroyDB(dbname_, options_));
4336
4336
  RestoreOptions ro;
4337
4337
  ro.alternate_dirs.push_front(be_pair.second);
4338
4338
  ASSERT_OK(be_pair.first->RestoreDBFromLatestBackup(dbname_, dbname_, ro));