@nxtedition/rocksdb 8.2.7 → 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
@@ -284,9 +284,9 @@ void PlainTableReader::FillBloom(const std::vector<uint32_t>& prefix_hashes) {
284
284
  Status PlainTableReader::MmapDataIfNeeded() {
285
285
  if (file_info_.is_mmap_mode) {
286
286
  // Get mmapped memory.
287
- return file_info_.file->Read(
288
- IOOptions(), 0, static_cast<size_t>(file_size_), &file_info_.file_data,
289
- nullptr, nullptr, Env::IO_TOTAL /* rate_limiter_priority */);
287
+ return file_info_.file->Read(IOOptions(), 0,
288
+ static_cast<size_t>(file_size_),
289
+ &file_info_.file_data, nullptr, nullptr);
290
290
  }
291
291
  return Status::OK();
292
292
  }
@@ -109,8 +109,7 @@ Status SstFileDumper::GetTableReader(const std::string& file_path) {
109
109
  uint64_t prefetch_off = file_size - prefetch_size;
110
110
  IOOptions opts;
111
111
  s = prefetch_buffer.Prefetch(opts, file_.get(), prefetch_off,
112
- static_cast<size_t>(prefetch_size),
113
- Env::IO_TOTAL /* rate_limiter_priority */);
112
+ static_cast<size_t>(prefetch_size));
114
113
 
115
114
  s = ReadFooterFromFile(opts, file_.get(), *fs, &prefetch_buffer, file_size,
116
115
  &footer);
@@ -165,10 +164,19 @@ Status SstFileDumper::NewTableReader(
165
164
  const ImmutableOptions& /*ioptions*/, const EnvOptions& /*soptions*/,
166
165
  const InternalKeyComparator& /*internal_comparator*/, uint64_t file_size,
167
166
  std::unique_ptr<TableReader>* /*table_reader*/) {
167
+ // TODO(yuzhangyu): full support in sst_dump for SST files generated when
168
+ // `user_defined_timestamps_persisted` is false.
168
169
  auto t_opt = TableReaderOptions(
169
170
  ioptions_, moptions_.prefix_extractor, soptions_, internal_comparator_,
170
171
  0 /* block_protection_bytes_per_key */, false /* skip_filters */,
171
- false /* immortal */, true /* force_direct_prefetch */);
172
+ false /* immortal */, true /* force_direct_prefetch */, -1 /* level */,
173
+ nullptr /* block_cache_tracer */, 0 /* max_file_size_for_l0_meta_pin */,
174
+ "" /* cur_db_session_id */, 0 /* cur_file_num */, {} /* unique_id */,
175
+ 0 /* largest_seqno */, 0 /* tail_size */,
176
+ table_properties_ == nullptr
177
+ ? true
178
+ : static_cast<bool>(
179
+ table_properties_->user_defined_timestamps_persisted));
172
180
  // Allow open file with global sequence number for backward compatibility.
173
181
  t_opt.largest_seqno = kMaxSequenceNumber;
174
182
 
@@ -187,6 +195,7 @@ Status SstFileDumper::NewTableReader(
187
195
  }
188
196
 
189
197
  Status SstFileDumper::VerifyChecksum() {
198
+ assert(read_options_.verify_checksums);
190
199
  // We could pass specific readahead setting into read options if needed.
191
200
  return table_reader_->VerifyChecksum(read_options_,
192
201
  TableReaderCaller::kSSTDumpTool);
@@ -9,6 +9,7 @@
9
9
 
10
10
  #include "db/db_impl/db_impl.h"
11
11
  #include "db/dbformat.h"
12
+ #include "db/wide/wide_column_serialization.h"
12
13
  #include "file/writable_file_writer.h"
13
14
  #include "rocksdb/file_system.h"
14
15
  #include "rocksdb/table.h"
@@ -81,7 +82,8 @@ struct SstFileWriter::Rep {
81
82
 
82
83
  assert(value_type == kTypeValue || value_type == kTypeMerge ||
83
84
  value_type == kTypeDeletion ||
84
- value_type == kTypeDeletionWithTimestamp);
85
+ value_type == kTypeDeletionWithTimestamp ||
86
+ value_type == kTypeWideColumnEntity);
85
87
 
86
88
  constexpr SequenceNumber sequence_number = 0;
87
89
 
@@ -130,6 +132,24 @@ struct SstFileWriter::Rep {
130
132
  return AddImpl(user_key_with_ts, value, value_type);
131
133
  }
132
134
 
135
+ Status AddEntity(const Slice& user_key, const WideColumns& columns) {
136
+ WideColumns sorted_columns(columns);
137
+ std::sort(sorted_columns.begin(), sorted_columns.end(),
138
+ [](const WideColumn& lhs, const WideColumn& rhs) {
139
+ return lhs.name().compare(rhs.name()) < 0;
140
+ });
141
+
142
+ std::string entity;
143
+ const Status s = WideColumnSerialization::Serialize(sorted_columns, entity);
144
+ if (!s.ok()) {
145
+ return s;
146
+ }
147
+ if (entity.size() > size_t{std::numeric_limits<uint32_t>::max()}) {
148
+ return Status::InvalidArgument("wide column entity is too large");
149
+ }
150
+ return Add(user_key, entity, kTypeWideColumnEntity);
151
+ }
152
+
133
153
  Status DeleteRangeImpl(const Slice& begin_key, const Slice& end_key) {
134
154
  if (!builder) {
135
155
  return Status::InvalidArgument("File is not opened");
@@ -371,6 +391,11 @@ Status SstFileWriter::Put(const Slice& user_key, const Slice& timestamp,
371
391
  return rep_->Add(user_key, timestamp, value, ValueType::kTypeValue);
372
392
  }
373
393
 
394
+ Status SstFileWriter::PutEntity(const Slice& user_key,
395
+ const WideColumns& columns) {
396
+ return rep_->AddEntity(user_key, columns);
397
+ }
398
+
374
399
  Status SstFileWriter::Merge(const Slice& user_key, const Slice& value) {
375
400
  return rep_->Add(user_key, value, ValueType::kTypeMerge);
376
401
  }
@@ -43,7 +43,7 @@ struct TableReaderOptions {
43
43
  size_t _max_file_size_for_l0_meta_pin = 0,
44
44
  const std::string& _cur_db_session_id = "", uint64_t _cur_file_num = 0,
45
45
  UniqueId64x2 _unique_id = {}, SequenceNumber _largest_seqno = 0,
46
- uint64_t _tail_size = 0)
46
+ uint64_t _tail_size = 0, bool _user_defined_timestamps_persisted = true)
47
47
  : ioptions(_ioptions),
48
48
  prefix_extractor(_prefix_extractor),
49
49
  env_options(_env_options),
@@ -59,7 +59,8 @@ struct TableReaderOptions {
59
59
  cur_file_num(_cur_file_num),
60
60
  unique_id(_unique_id),
61
61
  block_protection_bytes_per_key(_block_protection_bytes_per_key),
62
- tail_size(_tail_size) {}
62
+ tail_size(_tail_size),
63
+ user_defined_timestamps_persisted(_user_defined_timestamps_persisted) {}
63
64
 
64
65
  const ImmutableOptions& ioptions;
65
66
  const std::shared_ptr<const SliceTransform>& prefix_extractor;
@@ -93,6 +94,9 @@ struct TableReaderOptions {
93
94
  uint8_t block_protection_bytes_per_key;
94
95
 
95
96
  uint64_t tail_size;
97
+
98
+ // Whether the key in the table contains user-defined timestamps.
99
+ bool user_defined_timestamps_persisted;
96
100
  };
97
101
 
98
102
  struct TableBuilderOptions {
@@ -109,6 +109,10 @@ std::string TableProperties::ToString(const std::string& prop_delim,
109
109
  AppendProperty(result, "comparator name",
110
110
  comparator_name.empty() ? std::string("N/A") : comparator_name,
111
111
  prop_delim, kv_delim);
112
+ AppendProperty(result, "user defined timestamps persisted",
113
+ user_defined_timestamps_persisted ? std::string("true")
114
+ : std::string("false"),
115
+ prop_delim, kv_delim);
112
116
 
113
117
  AppendProperty(
114
118
  result, "merge operator name",
@@ -305,6 +309,8 @@ const std::string TablePropertiesNames::kSequenceNumberTimeMapping =
305
309
  "rocksdb.seqno.time.map";
306
310
  const std::string TablePropertiesNames::kTailStartOffset =
307
311
  "rocksdb.tail.start.offset";
312
+ const std::string TablePropertiesNames::kUserDefinedTimestampsPersisted =
313
+ "rocksdb.user.defined.timestamps.persisted";
308
314
 
309
315
  #ifndef NDEBUG
310
316
  // WARNING: TEST_SetRandomTableProperties assumes the following layout of
@@ -1330,7 +1330,7 @@ class FileChecksumTestHelper {
1330
1330
  uint64_t offset = 0;
1331
1331
  Status s;
1332
1332
  s = file_reader_->Read(IOOptions(), offset, 2048, &result, scratch.get(),
1333
- nullptr, Env::IO_TOTAL /* rate_limiter_priority */);
1333
+ nullptr);
1334
1334
  if (!s.ok()) {
1335
1335
  return s;
1336
1336
  }
@@ -1338,8 +1338,7 @@ class FileChecksumTestHelper {
1338
1338
  file_checksum_generator->Update(scratch.get(), result.size());
1339
1339
  offset += static_cast<uint64_t>(result.size());
1340
1340
  s = file_reader_->Read(IOOptions(), offset, 2048, &result, scratch.get(),
1341
- nullptr,
1342
- Env::IO_TOTAL /* rate_limiter_priority */);
1341
+ nullptr);
1343
1342
  if (!s.ok()) {
1344
1343
  return s;
1345
1344
  }
@@ -4472,11 +4471,12 @@ TEST(TableTest, FooterTests) {
4472
4471
  BlockHandle index(data_size + 5, index_size);
4473
4472
  BlockHandle meta_index(data_size + index_size + 2 * 5, metaindex_size);
4474
4473
  uint64_t footer_offset = data_size + metaindex_size + index_size + 3 * 5;
4474
+ uint32_t base_context_checksum = 123456789;
4475
4475
  {
4476
4476
  // legacy block based
4477
4477
  FooterBuilder footer;
4478
- footer.Build(kBlockBasedTableMagicNumber, /* format_version */ 0,
4479
- footer_offset, kCRC32c, meta_index, index);
4478
+ ASSERT_OK(footer.Build(kBlockBasedTableMagicNumber, /* format_version */ 0,
4479
+ footer_offset, kCRC32c, meta_index, index));
4480
4480
  Footer decoded_footer;
4481
4481
  ASSERT_OK(decoded_footer.DecodeFrom(footer.GetSlice(), footer_offset));
4482
4482
  ASSERT_EQ(decoded_footer.table_magic_number(), kBlockBasedTableMagicNumber);
@@ -4486,6 +4486,7 @@ TEST(TableTest, FooterTests) {
4486
4486
  ASSERT_EQ(decoded_footer.index_handle().offset(), index.offset());
4487
4487
  ASSERT_EQ(decoded_footer.index_handle().size(), index.size());
4488
4488
  ASSERT_EQ(decoded_footer.format_version(), 0U);
4489
+ ASSERT_EQ(decoded_footer.base_context_checksum(), 0U);
4489
4490
  ASSERT_EQ(decoded_footer.GetBlockTrailerSize(), 5U);
4490
4491
  // Ensure serialized with legacy magic
4491
4492
  ASSERT_EQ(
@@ -4495,9 +4496,11 @@ TEST(TableTest, FooterTests) {
4495
4496
  // block based, various checksums, various versions
4496
4497
  for (auto t : GetSupportedChecksums()) {
4497
4498
  for (uint32_t fv = 1; IsSupportedFormatVersion(fv); ++fv) {
4499
+ uint32_t maybe_bcc =
4500
+ FormatVersionUsesContextChecksum(fv) ? base_context_checksum : 0U;
4498
4501
  FooterBuilder footer;
4499
- footer.Build(kBlockBasedTableMagicNumber, fv, footer_offset, t,
4500
- meta_index, index);
4502
+ ASSERT_OK(footer.Build(kBlockBasedTableMagicNumber, fv, footer_offset, t,
4503
+ meta_index, index, maybe_bcc));
4501
4504
  Footer decoded_footer;
4502
4505
  ASSERT_OK(decoded_footer.DecodeFrom(footer.GetSlice(), footer_offset));
4503
4506
  ASSERT_EQ(decoded_footer.table_magic_number(),
@@ -4506,18 +4509,44 @@ TEST(TableTest, FooterTests) {
4506
4509
  ASSERT_EQ(decoded_footer.metaindex_handle().offset(),
4507
4510
  meta_index.offset());
4508
4511
  ASSERT_EQ(decoded_footer.metaindex_handle().size(), meta_index.size());
4509
- ASSERT_EQ(decoded_footer.index_handle().offset(), index.offset());
4510
- ASSERT_EQ(decoded_footer.index_handle().size(), index.size());
4512
+ if (FormatVersionUsesIndexHandleInFooter(fv)) {
4513
+ ASSERT_EQ(decoded_footer.index_handle().offset(), index.offset());
4514
+ ASSERT_EQ(decoded_footer.index_handle().size(), index.size());
4515
+ }
4511
4516
  ASSERT_EQ(decoded_footer.format_version(), fv);
4512
4517
  ASSERT_EQ(decoded_footer.GetBlockTrailerSize(), 5U);
4518
+
4519
+ if (FormatVersionUsesContextChecksum(fv)) {
4520
+ ASSERT_EQ(decoded_footer.base_context_checksum(),
4521
+ base_context_checksum);
4522
+
4523
+ // Bad offset should fail footer checksum
4524
+ decoded_footer = Footer();
4525
+ ASSERT_NOK(
4526
+ decoded_footer.DecodeFrom(footer.GetSlice(), footer_offset - 1));
4527
+ } else {
4528
+ ASSERT_EQ(decoded_footer.base_context_checksum(), 0U);
4529
+ }
4530
+
4531
+ // Too big metaindex size should also fail encoding only in new footer
4532
+ uint64_t big_metaindex_size = 0x100000007U;
4533
+ uint64_t big_footer_offset =
4534
+ data_size + big_metaindex_size + index_size + 3 * 5;
4535
+ BlockHandle big_metaindex =
4536
+ BlockHandle(data_size + index_size + 2 * 5, big_metaindex_size);
4537
+ ASSERT_NE(footer
4538
+ .Build(kBlockBasedTableMagicNumber, fv, big_footer_offset,
4539
+ t, big_metaindex, index, maybe_bcc)
4540
+ .ok(),
4541
+ FormatVersionUsesContextChecksum(fv));
4513
4542
  }
4514
4543
  }
4515
4544
 
4516
4545
  {
4517
4546
  // legacy plain table
4518
4547
  FooterBuilder footer;
4519
- footer.Build(kPlainTableMagicNumber, /* format_version */ 0, footer_offset,
4520
- kNoChecksum, meta_index);
4548
+ ASSERT_OK(footer.Build(kPlainTableMagicNumber, /* format_version */ 0,
4549
+ footer_offset, kNoChecksum, meta_index));
4521
4550
  Footer decoded_footer;
4522
4551
  ASSERT_OK(decoded_footer.DecodeFrom(footer.GetSlice(), footer_offset));
4523
4552
  ASSERT_EQ(decoded_footer.table_magic_number(), kPlainTableMagicNumber);
@@ -4536,8 +4565,8 @@ TEST(TableTest, FooterTests) {
4536
4565
  {
4537
4566
  // xxhash plain table (not currently used)
4538
4567
  FooterBuilder footer;
4539
- footer.Build(kPlainTableMagicNumber, /* format_version */ 1, footer_offset,
4540
- kxxHash, meta_index);
4568
+ ASSERT_OK(footer.Build(kPlainTableMagicNumber, /* format_version */ 1,
4569
+ footer_offset, kxxHash, meta_index));
4541
4570
  Footer decoded_footer;
4542
4571
  ASSERT_OK(decoded_footer.DecodeFrom(footer.GetSlice(), footer_offset));
4543
4572
  ASSERT_EQ(decoded_footer.table_magic_number(), kPlainTableMagicNumber);
@@ -5211,9 +5240,13 @@ TEST_P(BlockBasedTableTest, PropertiesMetaBlockLast) {
5211
5240
  }
5212
5241
  }
5213
5242
  ASSERT_EQ(kPropertiesBlockName, key_at_max_offset);
5214
- // index handle is stored in footer rather than metaindex block, so need
5215
- // separate logic to verify it comes before properties block.
5216
- ASSERT_GT(max_offset, footer.index_handle().offset());
5243
+ if (FormatVersionUsesIndexHandleInFooter(footer.format_version())) {
5244
+ // If index handle is stored in footer rather than metaindex block,
5245
+ // need separate logic to verify it comes before properties block.
5246
+ ASSERT_GT(max_offset, footer.index_handle().offset());
5247
+ } else {
5248
+ ASSERT_TRUE(footer.index_handle().IsNull());
5249
+ }
5217
5250
  c.ResetTableReader();
5218
5251
  }
5219
5252
 
@@ -5362,16 +5395,13 @@ TEST_F(BBTTailPrefetchTest, FilePrefetchBufferMinOffset) {
5362
5395
  IOOptions opts;
5363
5396
  buffer.TryReadFromCache(opts, nullptr /* reader */, 500 /* offset */,
5364
5397
  10 /* n */, nullptr /* result */,
5365
- nullptr /* status */,
5366
- Env::IO_TOTAL /* rate_limiter_priority */);
5398
+ nullptr /* status */);
5367
5399
  buffer.TryReadFromCache(opts, nullptr /* reader */, 480 /* offset */,
5368
5400
  10 /* n */, nullptr /* result */,
5369
- nullptr /* status */,
5370
- Env::IO_TOTAL /* rate_limiter_priority */);
5401
+ nullptr /* status */);
5371
5402
  buffer.TryReadFromCache(opts, nullptr /* reader */, 490 /* offset */,
5372
5403
  10 /* n */, nullptr /* result */,
5373
- nullptr /* status */,
5374
- Env::IO_TOTAL /* rate_limiter_priority */);
5404
+ nullptr /* status */);
5375
5405
  ASSERT_EQ(480, buffer.min_offset_read());
5376
5406
  }
5377
5407
 
@@ -42,12 +42,19 @@ class WithCacheType : public TestCreateContext {
42
42
  };
43
43
 
44
44
  static constexpr auto kLRU = "lru";
45
- static constexpr auto kHyperClock = "hyper_clock";
45
+ static constexpr auto kFixedHyperClock = "fixed_hyper_clock";
46
+ static constexpr auto kAutoHyperClock = "auto_hyper_clock";
46
47
 
47
48
  // For options other than capacity
48
49
  size_t estimated_value_size_ = 1;
49
50
 
50
- virtual const std::string& Type() = 0;
51
+ virtual const std::string& Type() const = 0;
52
+
53
+ static bool IsHyperClock(const std::string& type) {
54
+ return type == kFixedHyperClock || type == kAutoHyperClock;
55
+ }
56
+
57
+ bool IsHyperClock() const { return IsHyperClock(Type()); }
51
58
 
52
59
  std::shared_ptr<Cache> NewCache(
53
60
  size_t capacity,
@@ -62,8 +69,11 @@ class WithCacheType : public TestCreateContext {
62
69
  }
63
70
  return lru_opts.MakeSharedCache();
64
71
  }
65
- if (type == kHyperClock) {
66
- HyperClockCacheOptions hc_opts{capacity, estimated_value_size_};
72
+ if (IsHyperClock(type)) {
73
+ HyperClockCacheOptions hc_opts{
74
+ capacity, type == kFixedHyperClock ? estimated_value_size_ : 0};
75
+ hc_opts.min_avg_entry_charge =
76
+ std::max(size_t{1}, estimated_value_size_ / 2);
67
77
  hc_opts.hash_seed = 0; // deterministic tests
68
78
  if (modify_opts_fn) {
69
79
  modify_opts_fn(hc_opts);
@@ -105,14 +115,16 @@ class WithCacheType : public TestCreateContext {
105
115
 
106
116
  class WithCacheTypeParam : public WithCacheType,
107
117
  public testing::WithParamInterface<std::string> {
108
- const std::string& Type() override { return GetParam(); }
118
+ const std::string& Type() const override { return GetParam(); }
109
119
  };
110
120
 
111
121
  constexpr auto kLRU = WithCacheType::kLRU;
112
- constexpr auto kHyperClock = WithCacheType::kHyperClock;
122
+ constexpr auto kFixedHyperClock = WithCacheType::kFixedHyperClock;
123
+ constexpr auto kAutoHyperClock = WithCacheType::kAutoHyperClock;
113
124
 
114
125
  inline auto GetTestingCacheTypes() {
115
- return testing::Values(std::string(kLRU), std::string(kHyperClock));
126
+ return testing::Values(std::string(kLRU), std::string(kFixedHyperClock),
127
+ std::string(kAutoHyperClock));
116
128
  }
117
129
 
118
130
  } // namespace secondary_cache_test_util
@@ -85,7 +85,9 @@ class SyncPoint {
85
85
  };
86
86
 
87
87
  // call once at the beginning of a test to setup the dependency between
88
- // sync points
88
+ // sync points. Specifically, execution will not be allowed to proceed past
89
+ // each successor until execution has reached the corresponding predecessor,
90
+ // in any thread.
89
91
  void LoadDependency(const std::vector<SyncPointPair>& dependencies);
90
92
 
91
93
  // call once at the beginning of a test to setup the dependency between
@@ -39,7 +39,10 @@ namespace test {
39
39
 
40
40
  const uint32_t kDefaultFormatVersion = BlockBasedTableOptions().format_version;
41
41
  const std::set<uint32_t> kFooterFormatVersionsToTest{
42
+ // Non-legacy, before big footer changes
42
43
  5U,
44
+ // After big footer changes
45
+ 6U,
43
46
  // In case any interesting future changes
44
47
  kDefaultFormatVersion,
45
48
  kLatestFormatVersion,
@@ -72,6 +75,22 @@ std::string RandomKey(Random* rnd, int len, RandomKeyType type) {
72
75
  return result;
73
76
  }
74
77
 
78
+ const std::vector<UserDefinedTimestampTestMode>& GetUDTTestModes() {
79
+ static std::vector<UserDefinedTimestampTestMode> udt_test_modes = {
80
+ UserDefinedTimestampTestMode::kStripUserDefinedTimestamp,
81
+ UserDefinedTimestampTestMode::kNormal,
82
+ UserDefinedTimestampTestMode::kNone};
83
+ return udt_test_modes;
84
+ }
85
+
86
+ bool IsUDTEnabled(const UserDefinedTimestampTestMode& test_mode) {
87
+ return test_mode != UserDefinedTimestampTestMode::kNone;
88
+ }
89
+
90
+ bool ShouldPersistUDT(const UserDefinedTimestampTestMode& test_mode) {
91
+ return test_mode != UserDefinedTimestampTestMode::kStripUserDefinedTimestamp;
92
+ }
93
+
75
94
  extern Slice CompressibleString(Random* rnd, double compressed_fraction,
76
95
  int len, std::string* dst) {
77
96
  int raw = static_cast<int>(len * compressed_fraction);
@@ -134,6 +153,16 @@ const Comparator* BytewiseComparatorWithU64TsWrapper() {
134
153
  return user_comparator;
135
154
  }
136
155
 
156
+ const Comparator* ReverseBytewiseComparatorWithU64TsWrapper() {
157
+ ConfigOptions config_options;
158
+ const Comparator* user_comparator = nullptr;
159
+ Status s = Comparator::CreateFromString(
160
+ config_options, "rocksdb.ReverseBytewiseComparator.u64ts",
161
+ &user_comparator);
162
+ s.PermitUncheckedError();
163
+ return user_comparator;
164
+ }
165
+
137
166
  void CorruptKeyType(InternalKey* ikey) {
138
167
  std::string keystr = ikey->Encode().ToString();
139
168
  keystr[keystr.size() - 8] = kTypeLogData;
@@ -52,6 +52,22 @@ enum RandomKeyType : char { RANDOM, LARGEST, SMALLEST, MIDDLE };
52
52
  extern std::string RandomKey(Random* rnd, int len,
53
53
  RandomKeyType type = RandomKeyType::RANDOM);
54
54
 
55
+ enum class UserDefinedTimestampTestMode {
56
+ // Test does not enable user-defined timestamp feature.
57
+ kNone,
58
+ // Test enables user-defined timestamp feature. Write/read with min timestamps
59
+ kNormal,
60
+ // Test enables user-defined timestamp feature. Write/read with min timestamps
61
+ // Set `persist_user_defined_timestamps` to false.
62
+ kStripUserDefinedTimestamp,
63
+ };
64
+
65
+ extern const std::vector<UserDefinedTimestampTestMode>& GetUDTTestModes();
66
+
67
+ extern bool IsUDTEnabled(const UserDefinedTimestampTestMode& test_mode);
68
+
69
+ extern bool ShouldPersistUDT(const UserDefinedTimestampTestMode& test_mode);
70
+
55
71
  // Store in *dst a string of length "len" that will compress to
56
72
  // "N*compressed_fraction" bytes and return a Slice that references
57
73
  // the generated data.
@@ -116,6 +132,9 @@ extern const Comparator* Uint64Comparator();
116
132
  // A wrapper api for getting the ComparatorWithU64Ts<BytewiseComparator>
117
133
  extern const Comparator* BytewiseComparatorWithU64TsWrapper();
118
134
 
135
+ // A wrapper api for getting the ComparatorWithU64Ts<ReverseBytewiseComparator>
136
+ extern const Comparator* ReverseBytewiseComparatorWithU64TsWrapper();
137
+
119
138
  class StringSink : public FSWritableFile {
120
139
  public:
121
140
  std::string contents_;
@@ -602,6 +602,12 @@ DEFINE_uint32(
602
602
  "compress_format_version == 2 -- decompressed size is included"
603
603
  " in the block header in varint32 format.");
604
604
 
605
+ DEFINE_bool(use_tiered_volatile_cache, false,
606
+ "If use_compressed_secondary_cache is true and "
607
+ "use_tiered_volatile_cache is true, then allocate a tiered cache "
608
+ "that distributes cache reservations proportionally over both "
609
+ "the caches.");
610
+
605
611
  DEFINE_int64(simcache_size, -1,
606
612
  "Number of bytes to use as a simcache of "
607
613
  "uncompressed data. Nagative value disables simcache.");
@@ -2828,7 +2834,7 @@ class Benchmark {
2828
2834
  std::string input_str(len, 'y');
2829
2835
  std::string compressed;
2830
2836
  CompressionOptions opts;
2831
- CompressionContext context(FLAGS_compression_type_e);
2837
+ CompressionContext context(FLAGS_compression_type_e, opts);
2832
2838
  CompressionInfo info(opts, context, CompressionDict::GetEmptyDict(),
2833
2839
  FLAGS_compression_type_e,
2834
2840
  FLAGS_sample_for_compression);
@@ -3009,19 +3015,54 @@ class Benchmark {
3009
3015
  }
3010
3016
 
3011
3017
  static std::shared_ptr<Cache> NewCache(int64_t capacity) {
3018
+ CompressedSecondaryCacheOptions secondary_cache_opts;
3019
+ bool use_tiered_cache = false;
3012
3020
  if (capacity <= 0) {
3013
3021
  return nullptr;
3014
3022
  }
3023
+ if (FLAGS_use_compressed_secondary_cache) {
3024
+ secondary_cache_opts.capacity = FLAGS_compressed_secondary_cache_size;
3025
+ secondary_cache_opts.num_shard_bits =
3026
+ FLAGS_compressed_secondary_cache_numshardbits;
3027
+ secondary_cache_opts.high_pri_pool_ratio =
3028
+ FLAGS_compressed_secondary_cache_high_pri_pool_ratio;
3029
+ secondary_cache_opts.low_pri_pool_ratio =
3030
+ FLAGS_compressed_secondary_cache_low_pri_pool_ratio;
3031
+ secondary_cache_opts.compression_type =
3032
+ FLAGS_compressed_secondary_cache_compression_type_e;
3033
+ secondary_cache_opts.compress_format_version =
3034
+ FLAGS_compressed_secondary_cache_compress_format_version;
3035
+ if (FLAGS_use_tiered_volatile_cache) {
3036
+ use_tiered_cache = true;
3037
+ }
3038
+ }
3015
3039
  if (FLAGS_cache_type == "clock_cache") {
3016
3040
  fprintf(stderr, "Old clock cache implementation has been removed.\n");
3017
3041
  exit(1);
3018
- } else if (FLAGS_cache_type == "hyper_clock_cache") {
3019
- HyperClockCacheOptions hcco{
3020
- static_cast<size_t>(capacity),
3021
- static_cast<size_t>(FLAGS_block_size) /*estimated_entry_charge*/,
3022
- FLAGS_cache_numshardbits};
3023
- hcco.hash_seed = GetCacheHashSeed();
3024
- return hcco.MakeSharedCache();
3042
+ } else if (EndsWith(FLAGS_cache_type, "hyper_clock_cache")) {
3043
+ size_t estimated_entry_charge;
3044
+ if (FLAGS_cache_type == "fixed_hyper_clock_cache" ||
3045
+ FLAGS_cache_type == "hyper_clock_cache") {
3046
+ estimated_entry_charge = FLAGS_block_size;
3047
+ } else if (FLAGS_cache_type == "auto_hyper_clock_cache") {
3048
+ estimated_entry_charge = 0;
3049
+ } else {
3050
+ fprintf(stderr, "Cache type not supported.");
3051
+ exit(1);
3052
+ }
3053
+ HyperClockCacheOptions opts(FLAGS_cache_size, estimated_entry_charge,
3054
+ FLAGS_cache_numshardbits);
3055
+ opts.hash_seed = GetCacheHashSeed();
3056
+ if (use_tiered_cache) {
3057
+ TieredVolatileCacheOptions tiered_opts;
3058
+ opts.capacity += secondary_cache_opts.capacity;
3059
+ tiered_opts.cache_type = PrimaryCacheType::kCacheTypeHCC;
3060
+ tiered_opts.cache_opts = &opts;
3061
+ tiered_opts.comp_cache_opts = secondary_cache_opts;
3062
+ return NewTieredVolatileCache(tiered_opts);
3063
+ } else {
3064
+ return opts.MakeSharedCache();
3065
+ }
3025
3066
  } else if (FLAGS_cache_type == "lru_cache") {
3026
3067
  LRUCacheOptions opts(
3027
3068
  static_cast<size_t>(capacity), FLAGS_cache_numshardbits,
@@ -3040,26 +3081,21 @@ class Benchmark {
3040
3081
  exit(1);
3041
3082
  }
3042
3083
  opts.secondary_cache = secondary_cache;
3043
- }
3044
-
3045
- if (FLAGS_use_compressed_secondary_cache) {
3046
- CompressedSecondaryCacheOptions secondary_cache_opts;
3047
- secondary_cache_opts.capacity = FLAGS_compressed_secondary_cache_size;
3048
- secondary_cache_opts.num_shard_bits =
3049
- FLAGS_compressed_secondary_cache_numshardbits;
3050
- secondary_cache_opts.high_pri_pool_ratio =
3051
- FLAGS_compressed_secondary_cache_high_pri_pool_ratio;
3052
- secondary_cache_opts.low_pri_pool_ratio =
3053
- FLAGS_compressed_secondary_cache_low_pri_pool_ratio;
3054
- secondary_cache_opts.compression_type =
3055
- FLAGS_compressed_secondary_cache_compression_type_e;
3056
- secondary_cache_opts.compress_format_version =
3057
- FLAGS_compressed_secondary_cache_compress_format_version;
3084
+ } else if (FLAGS_use_compressed_secondary_cache && !use_tiered_cache) {
3058
3085
  opts.secondary_cache =
3059
3086
  NewCompressedSecondaryCache(secondary_cache_opts);
3060
3087
  }
3061
3088
 
3062
- return opts.MakeSharedCache();
3089
+ if (use_tiered_cache) {
3090
+ TieredVolatileCacheOptions tiered_opts;
3091
+ opts.capacity += secondary_cache_opts.capacity;
3092
+ tiered_opts.cache_type = PrimaryCacheType::kCacheTypeLRU;
3093
+ tiered_opts.cache_opts = &opts;
3094
+ tiered_opts.comp_cache_opts = secondary_cache_opts;
3095
+ return NewTieredVolatileCache(tiered_opts);
3096
+ } else {
3097
+ return opts.MakeSharedCache();
3098
+ }
3063
3099
  } else {
3064
3100
  fprintf(stderr, "Cache type not supported.");
3065
3101
  exit(1);
@@ -3966,7 +4002,8 @@ class Benchmark {
3966
4002
  bool ok = true;
3967
4003
  std::string compressed;
3968
4004
  CompressionOptions opts;
3969
- CompressionContext context(FLAGS_compression_type_e);
4005
+ opts.level = FLAGS_compression_level;
4006
+ CompressionContext context(FLAGS_compression_type_e, opts);
3970
4007
  CompressionInfo info(opts, context, CompressionDict::GetEmptyDict(),
3971
4008
  FLAGS_compression_type_e,
3972
4009
  FLAGS_sample_for_compression);
@@ -3995,8 +4032,10 @@ class Benchmark {
3995
4032
  Slice input = gen.Generate(FLAGS_block_size);
3996
4033
  std::string compressed;
3997
4034
 
3998
- CompressionContext compression_ctx(FLAGS_compression_type_e);
3999
4035
  CompressionOptions compression_opts;
4036
+ compression_opts.level = FLAGS_compression_level;
4037
+ CompressionContext compression_ctx(FLAGS_compression_type_e,
4038
+ compression_opts);
4000
4039
  CompressionInfo compression_info(
4001
4040
  compression_opts, compression_ctx, CompressionDict::GetEmptyDict(),
4002
4041
  FLAGS_compression_type_e, FLAGS_sample_for_compression);
@@ -1310,7 +1310,8 @@ void DBLoaderCommand::DoCommand() {
1310
1310
  namespace {
1311
1311
 
1312
1312
  void DumpManifestFile(Options options, std::string file, bool verbose, bool hex,
1313
- bool json) {
1313
+ bool json,
1314
+ const std::vector<ColumnFamilyDescriptor>& cf_descs) {
1314
1315
  EnvOptions sopt;
1315
1316
  std::string dbname("dummy");
1316
1317
  std::shared_ptr<Cache> tc(NewLRUCache(options.max_open_files - 10,
@@ -1326,7 +1327,7 @@ void DumpManifestFile(Options options, std::string file, bool verbose, bool hex,
1326
1327
  VersionSet versions(dbname, &immutable_db_options, sopt, tc.get(), &wb, &wc,
1327
1328
  /*block_cache_tracer=*/nullptr, /*io_tracer=*/nullptr,
1328
1329
  /*db_id*/ "", /*db_session_id*/ "");
1329
- Status s = versions.DumpManifest(options, file, verbose, hex, json);
1330
+ Status s = versions.DumpManifest(options, file, verbose, hex, json, cf_descs);
1330
1331
  if (!s.ok()) {
1331
1332
  fprintf(stderr, "Error in processing file %s %s\n", file.c_str(),
1332
1333
  s.ToString().c_str());
@@ -1438,7 +1439,8 @@ void ManifestDumpCommand::DoCommand() {
1438
1439
  fprintf(stdout, "Processing Manifest file %s\n", manifestfile.c_str());
1439
1440
  }
1440
1441
 
1441
- DumpManifestFile(options_, manifestfile, verbose_, is_key_hex_, json_);
1442
+ DumpManifestFile(options_, manifestfile, verbose_, is_key_hex_, json_,
1443
+ column_families_);
1442
1444
 
1443
1445
  if (verbose_) {
1444
1446
  fprintf(stdout, "Processing Manifest file %s done\n", manifestfile.c_str());
@@ -2046,7 +2048,7 @@ void DBDumperCommand::DoCommand() {
2046
2048
  break;
2047
2049
  case kDescriptorFile:
2048
2050
  DumpManifestFile(options_, path_, /* verbose_ */ false, is_key_hex_,
2049
- /* json_ */ false);
2051
+ /* json_ */ false, column_families_);
2050
2052
  break;
2051
2053
  case kBlobFile:
2052
2054
  DumpBlobFile(path_, is_key_hex_, is_value_hex_,
@@ -3706,7 +3708,8 @@ void DBFileDumperCommand::DoCommand() {
3706
3708
  manifest_filepath = NormalizePath(manifest_filepath);
3707
3709
 
3708
3710
  std::cout << manifest_filepath << std::endl;
3709
- DumpManifestFile(options_, manifest_filepath, false, false, false);
3711
+ DumpManifestFile(options_, manifest_filepath, false, false, false,
3712
+ column_families_);
3710
3713
  std::cout << std::endl;
3711
3714
 
3712
3715
  std::vector<ColumnFamilyMetaData> column_families;
@@ -93,6 +93,7 @@ void LDBCommandRunner::PrintHelp(const LDBOptions& ldb_options,
93
93
  BatchPutCommand::Help(ret);
94
94
  ScanCommand::Help(ret);
95
95
  DeleteCommand::Help(ret);
96
+ SingleDeleteCommand::Help(ret);
96
97
  DeleteRangeCommand::Help(ret);
97
98
  DBQuerierCommand::Help(ret);
98
99
  ApproxSizeCommand::Help(ret);