@nxtedition/rocksdb 13.5.8 → 13.5.9

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 (508) hide show
  1. package/binding.cc +209 -2
  2. package/deps/rocksdb/rocksdb/BUCK +12 -0
  3. package/deps/rocksdb/rocksdb/CMakeLists.txt +7 -0
  4. package/deps/rocksdb/rocksdb/Makefile +28 -23
  5. package/deps/rocksdb/rocksdb/cache/cache.cc +0 -1
  6. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +1 -2
  7. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +43 -39
  8. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +2 -0
  9. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +0 -1
  10. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +2 -3
  11. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +2 -2
  12. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +1 -3
  13. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +11 -1
  14. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +13 -5
  15. package/deps/rocksdb/rocksdb/crash_test.mk +61 -15
  16. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +136 -45
  17. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +34 -16
  18. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +10 -7
  19. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -2
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +1 -0
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +12 -9
  22. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +3 -4
  23. package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +2 -2
  24. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +3 -4
  25. package/deps/rocksdb/rocksdb/db/builder.cc +22 -8
  26. package/deps/rocksdb/rocksdb/db/builder.h +5 -4
  27. package/deps/rocksdb/rocksdb/db/c.cc +556 -15
  28. package/deps/rocksdb/rocksdb/db/c_test.c +133 -12
  29. package/deps/rocksdb/rocksdb/db/column_family.cc +114 -50
  30. package/deps/rocksdb/rocksdb/db/column_family.h +53 -36
  31. package/deps/rocksdb/rocksdb/db/column_family_test.cc +6 -6
  32. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +0 -1
  33. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +95 -70
  34. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +71 -51
  35. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +7 -86
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +26 -68
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +0 -122
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +453 -258
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +117 -92
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +0 -1
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +38 -38
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +24 -17
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +34 -45
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +32 -31
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +12 -3
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +1 -1
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +2 -1
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +10 -10
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +2 -1
  50. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +82 -34
  51. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +267 -179
  52. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +4 -1
  53. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +273 -89
  54. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +300 -14
  55. package/deps/rocksdb/rocksdb/db/compaction/compaction_state.cc +4 -4
  56. package/deps/rocksdb/rocksdb/db/compaction/compaction_state.h +2 -2
  57. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +28 -23
  58. package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +69 -51
  59. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +522 -245
  60. package/deps/rocksdb/rocksdb/db/convenience.cc +15 -4
  61. package/deps/rocksdb/rocksdb/db/corruption_test.cc +1 -3
  62. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +0 -2
  63. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +196 -17
  64. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +74 -62
  65. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +48 -0
  66. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +682 -250
  67. package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +0 -1
  68. package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +3 -4
  69. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +11 -16
  70. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +57 -0
  71. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +2 -2
  72. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +1 -1
  73. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +540 -490
  74. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +347 -188
  75. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +584 -217
  76. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +13 -9
  77. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +5 -7
  78. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +40 -36
  79. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +1 -3
  80. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +751 -372
  81. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +35 -32
  82. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +24 -2
  83. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +125 -63
  84. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +2 -2
  85. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +311 -196
  86. package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +15 -5
  87. package/deps/rocksdb/rocksdb/db/db_iter.cc +42 -29
  88. package/deps/rocksdb/rocksdb/db/db_iter.h +96 -31
  89. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +3 -4
  90. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +168 -228
  91. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +454 -0
  92. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +8 -8
  93. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +0 -1
  94. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +90 -0
  95. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +60 -2
  96. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +7 -3
  97. package/deps/rocksdb/rocksdb/db/db_options_test.cc +85 -27
  98. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +3 -1
  99. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +0 -2
  100. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +114 -2
  101. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +0 -1
  102. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +0 -1
  103. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +51 -3
  104. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +0 -1
  105. package/deps/rocksdb/rocksdb/db/db_test.cc +325 -18
  106. package/deps/rocksdb/rocksdb/db/db_test2.cc +644 -20
  107. package/deps/rocksdb/rocksdb/db/db_test_util.cc +14 -6
  108. package/deps/rocksdb/rocksdb/db/db_test_util.h +9 -0
  109. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +64 -45
  110. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +203 -14
  111. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +259 -30
  112. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +0 -1
  113. package/deps/rocksdb/rocksdb/db/db_write_test.cc +75 -1
  114. package/deps/rocksdb/rocksdb/db/dbformat.h +70 -6
  115. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +0 -190
  116. package/deps/rocksdb/rocksdb/db/error_handler.cc +22 -7
  117. package/deps/rocksdb/rocksdb/db/error_handler.h +16 -1
  118. package/deps/rocksdb/rocksdb/db/event_helpers.cc +41 -26
  119. package/deps/rocksdb/rocksdb/db/experimental.cc +4 -3
  120. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +464 -78
  121. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +166 -69
  122. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +54 -25
  123. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +1 -3
  124. package/deps/rocksdb/rocksdb/db/flush_job.cc +98 -81
  125. package/deps/rocksdb/rocksdb/db/flush_job.h +4 -9
  126. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +80 -84
  127. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +1 -1
  128. package/deps/rocksdb/rocksdb/db/forward_iterator.h +2 -2
  129. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +12 -19
  130. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +0 -2
  131. package/deps/rocksdb/rocksdb/db/internal_stats.cc +41 -15
  132. package/deps/rocksdb/rocksdb/db/internal_stats.h +63 -52
  133. package/deps/rocksdb/rocksdb/db/job_context.h +59 -24
  134. package/deps/rocksdb/rocksdb/db/listener_test.cc +69 -10
  135. package/deps/rocksdb/rocksdb/db/log_format.h +11 -2
  136. package/deps/rocksdb/rocksdb/db/log_reader.cc +147 -34
  137. package/deps/rocksdb/rocksdb/db/log_reader.h +40 -11
  138. package/deps/rocksdb/rocksdb/db/log_test.cc +16 -3
  139. package/deps/rocksdb/rocksdb/db/log_writer.cc +102 -55
  140. package/deps/rocksdb/rocksdb/db/log_writer.h +21 -2
  141. package/deps/rocksdb/rocksdb/db/malloc_stats.h +0 -2
  142. package/deps/rocksdb/rocksdb/db/memtable.cc +16 -47
  143. package/deps/rocksdb/rocksdb/db/memtable.h +76 -12
  144. package/deps/rocksdb/rocksdb/db/memtable_list.cc +23 -20
  145. package/deps/rocksdb/rocksdb/db/memtable_list.h +9 -11
  146. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +18 -37
  147. package/deps/rocksdb/rocksdb/db/merge_context.h +2 -1
  148. package/deps/rocksdb/rocksdb/db/merge_test.cc +8 -0
  149. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +3 -5
  150. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.cc +15 -7
  151. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +6 -3
  152. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +22 -4
  153. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +41 -1
  154. package/deps/rocksdb/rocksdb/db/prefix_test.cc +0 -1
  155. package/deps/rocksdb/rocksdb/db/repair.cc +29 -34
  156. package/deps/rocksdb/rocksdb/db/repair_test.cc +0 -1
  157. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +14 -15
  158. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +1 -3
  159. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +47 -1
  160. package/deps/rocksdb/rocksdb/db/table_cache.cc +3 -3
  161. package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +1 -3
  162. package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +2 -1
  163. package/deps/rocksdb/rocksdb/db/version_builder.cc +2 -2
  164. package/deps/rocksdb/rocksdb/db/version_edit.cc +8 -37
  165. package/deps/rocksdb/rocksdb/db/version_edit.h +32 -1
  166. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +26 -18
  167. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +7 -5
  168. package/deps/rocksdb/rocksdb/db/version_set.cc +282 -197
  169. package/deps/rocksdb/rocksdb/db/version_set.h +54 -57
  170. package/deps/rocksdb/rocksdb/db/version_set_test.cc +28 -35
  171. package/deps/rocksdb/rocksdb/db/version_util.h +2 -3
  172. package/deps/rocksdb/rocksdb/db/wal_manager.cc +3 -2
  173. package/deps/rocksdb/rocksdb/db/wal_manager.h +0 -1
  174. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +0 -1
  175. package/deps/rocksdb/rocksdb/db/wide/wide_columns.cc +1 -0
  176. package/deps/rocksdb/rocksdb/db/write_batch.cc +22 -8
  177. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +5 -4
  178. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +7 -6
  179. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +3 -4
  180. package/deps/rocksdb/rocksdb/db/write_thread.h +3 -3
  181. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +13 -5
  182. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +9 -2
  183. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_service.h +39 -0
  184. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compression_manager.h +65 -0
  185. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +45 -22
  186. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +7 -4
  187. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +22 -5
  188. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +28 -3
  189. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +143 -38
  190. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +4 -3
  191. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +80 -32
  192. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +51 -2
  193. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +23 -1
  194. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +305 -15
  195. package/deps/rocksdb/rocksdb/env/env.cc +32 -2
  196. package/deps/rocksdb/rocksdb/env/env_encryption.cc +0 -2
  197. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +2 -4
  198. package/deps/rocksdb/rocksdb/env/env_posix.cc +4 -2
  199. package/deps/rocksdb/rocksdb/env/env_test.cc +0 -1
  200. package/deps/rocksdb/rocksdb/env/fs_posix.cc +20 -11
  201. package/deps/rocksdb/rocksdb/env/fs_readonly.h +0 -2
  202. package/deps/rocksdb/rocksdb/env/fs_remap.cc +0 -2
  203. package/deps/rocksdb/rocksdb/env/fs_remap.h +0 -2
  204. package/deps/rocksdb/rocksdb/env/io_posix.cc +6 -4
  205. package/deps/rocksdb/rocksdb/env/io_posix.h +3 -2
  206. package/deps/rocksdb/rocksdb/env/mock_env.cc +0 -1
  207. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +2 -2
  208. package/deps/rocksdb/rocksdb/file/delete_scheduler.h +0 -2
  209. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +0 -2
  210. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +30 -21
  211. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +16 -0
  212. package/deps/rocksdb/rocksdb/file/file_util.cc +32 -14
  213. package/deps/rocksdb/rocksdb/file/file_util.h +22 -5
  214. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +229 -76
  215. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +21 -12
  216. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +10 -7
  217. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +12 -8
  218. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +1 -2
  219. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +0 -2
  220. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +3 -3
  221. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_compression.h +598 -0
  222. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_iterator.h +36 -0
  223. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +70 -11
  224. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +232 -11
  225. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +1 -1
  226. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -1
  227. package/deps/rocksdb/rocksdb/include/rocksdb/compression_type.h +149 -15
  228. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +17 -2
  229. package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +132 -34
  230. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +158 -79
  231. package/deps/rocksdb/rocksdb/include/rocksdb/db_bench_tool.h +2 -1
  232. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +4 -5
  233. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +1 -3
  234. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +5 -0
  235. package/deps/rocksdb/rocksdb/include/rocksdb/external_table.h +275 -0
  236. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +2 -1
  237. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +50 -5
  238. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +10 -0
  239. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +13 -0
  240. package/deps/rocksdb/rocksdb/include/rocksdb/ldb_tool.h +0 -1
  241. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +5 -2
  242. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +13 -0
  243. package/deps/rocksdb/rocksdb/include/rocksdb/multi_scan.h +237 -0
  244. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +230 -39
  245. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +15 -0
  246. package/deps/rocksdb/rocksdb/include/rocksdb/perf_level.h +31 -11
  247. package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +41 -0
  248. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +1 -1
  249. package/deps/rocksdb/rocksdb/include/rocksdb/sst_dump_tool.h +0 -1
  250. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +5 -1
  251. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +0 -1
  252. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +18 -3
  253. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +2 -0
  254. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +20 -8
  255. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +19 -2
  256. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -1
  257. package/deps/rocksdb/rocksdb/include/rocksdb/tool_hooks.h +124 -0
  258. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +1 -0
  259. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +26 -1
  260. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +55 -6
  261. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/debug.h +3 -5
  262. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_mirror.h +0 -2
  263. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +1 -2
  264. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/memory_util.h +0 -1
  265. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +1 -2
  266. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +0 -1
  267. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/secondary_index.h +96 -8
  268. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/secondary_index_faiss.h +117 -0
  269. package/deps/rocksdb/rocksdb/{utilities/secondary_index/faiss_ivf_index.h → include/rocksdb/utilities/secondary_index_simple.h} +11 -14
  270. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +26 -11
  271. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +16 -3
  272. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +0 -2
  273. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +63 -7
  274. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +0 -1
  275. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +28 -12
  276. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +3 -3
  277. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +0 -2
  278. package/deps/rocksdb/rocksdb/logging/event_logger_test.cc +1 -2
  279. package/deps/rocksdb/rocksdb/memory/memory_allocator_impl.h +1 -1
  280. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +0 -1
  281. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +0 -1
  282. package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +3 -1
  283. package/deps/rocksdb/rocksdb/memtable/skiplist.h +2 -2
  284. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +2 -4
  285. package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +69 -8
  286. package/deps/rocksdb/rocksdb/memtable/wbwi_memtable.cc +32 -9
  287. package/deps/rocksdb/rocksdb/memtable/wbwi_memtable.h +58 -45
  288. package/deps/rocksdb/rocksdb/monitoring/histogram.h +1 -1
  289. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +5 -3
  290. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +5 -0
  291. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +1 -1
  292. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +3 -2
  293. package/deps/rocksdb/rocksdb/options/cf_options.cc +44 -13
  294. package/deps/rocksdb/rocksdb/options/cf_options.h +21 -7
  295. package/deps/rocksdb/rocksdb/options/configurable.cc +5 -5
  296. package/deps/rocksdb/rocksdb/options/configurable_test.h +1 -2
  297. package/deps/rocksdb/rocksdb/options/customizable.cc +0 -1
  298. package/deps/rocksdb/rocksdb/options/customizable_test.cc +4 -11
  299. package/deps/rocksdb/rocksdb/options/db_options.cc +18 -15
  300. package/deps/rocksdb/rocksdb/options/db_options.h +2 -2
  301. package/deps/rocksdb/rocksdb/options/options.cc +296 -305
  302. package/deps/rocksdb/rocksdb/options/options_helper.cc +188 -62
  303. package/deps/rocksdb/rocksdb/options/options_helper.h +3 -3
  304. package/deps/rocksdb/rocksdb/options/options_parser.cc +2 -4
  305. package/deps/rocksdb/rocksdb/options/options_parser.h +0 -1
  306. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +17 -4
  307. package/deps/rocksdb/rocksdb/options/options_test.cc +101 -76
  308. package/deps/rocksdb/rocksdb/port/lang.h +2 -1
  309. package/deps/rocksdb/rocksdb/port/port_posix.cc +2 -1
  310. package/deps/rocksdb/rocksdb/port/stack_trace.cc +5 -4
  311. package/deps/rocksdb/rocksdb/port/win/env_win.cc +3 -2
  312. package/deps/rocksdb/rocksdb/port/win/xpress_win.cc +99 -1
  313. package/deps/rocksdb/rocksdb/port/win/xpress_win.h +6 -0
  314. package/deps/rocksdb/rocksdb/src.mk +17 -11
  315. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +0 -1
  316. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +1094 -929
  317. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +6 -19
  318. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +76 -22
  319. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +2 -0
  320. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +221 -131
  321. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +12 -9
  322. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +23 -24
  323. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +38 -38
  324. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +7 -4
  325. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +5 -5
  326. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +10 -12
  327. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +6 -4
  328. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +35 -43
  329. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +2 -1
  330. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +1 -1
  331. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +1 -2
  332. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +0 -4
  333. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +0 -1
  334. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +3 -3
  335. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +3 -3
  336. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +4 -4
  337. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +1 -1
  338. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +4 -5
  339. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +4 -4
  340. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +37 -35
  341. package/deps/rocksdb/rocksdb/table/block_fetcher.h +11 -7
  342. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +4 -3
  343. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +31 -5
  344. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.h +2 -1
  345. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +0 -1
  346. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +0 -1
  347. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +0 -1
  348. package/deps/rocksdb/rocksdb/table/external_table.cc +483 -0
  349. package/deps/rocksdb/rocksdb/table/format.cc +62 -44
  350. package/deps/rocksdb/rocksdb/table/format.h +35 -12
  351. package/deps/rocksdb/rocksdb/table/internal_iterator.h +3 -13
  352. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -0
  353. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +6 -0
  354. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +150 -141
  355. package/deps/rocksdb/rocksdb/table/meta_blocks.h +5 -0
  356. package/deps/rocksdb/rocksdb/table/multiget_context.h +3 -2
  357. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +8 -0
  358. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +0 -1
  359. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +0 -2
  360. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +0 -2
  361. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +0 -1
  362. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +6 -6
  363. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +0 -1
  364. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +86 -7
  365. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +88 -2
  366. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +0 -1
  367. package/deps/rocksdb/rocksdb/table/table_builder.h +10 -1
  368. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +3 -2
  369. package/deps/rocksdb/rocksdb/table/table_test.cc +899 -22
  370. package/deps/rocksdb/rocksdb/test_util/testutil.cc +3 -4
  371. package/deps/rocksdb/rocksdb/test_util/testutil.h +132 -1
  372. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +0 -1
  373. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.h +0 -2
  374. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +163 -77
  375. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +0 -2
  376. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +0 -1
  377. package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +0 -1
  378. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +120 -52
  379. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +1 -0
  380. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -1
  381. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +0 -2
  382. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +2 -2
  383. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.h +0 -2
  384. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +2 -1
  385. package/deps/rocksdb/rocksdb/tools/tool_hooks.cc +94 -0
  386. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +0 -1
  387. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +0 -1
  388. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +1 -1
  389. package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +2 -1
  390. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +3 -5
  391. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +1 -1
  392. package/deps/rocksdb/rocksdb/util/async_file_reader.h +15 -8
  393. package/deps/rocksdb/rocksdb/util/auto_skip_compressor.cc +131 -0
  394. package/deps/rocksdb/rocksdb/util/auto_skip_compressor.h +90 -0
  395. package/deps/rocksdb/rocksdb/util/autovector.h +1 -1
  396. package/deps/rocksdb/rocksdb/util/autovector_test.cc +2 -2
  397. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +0 -2
  398. package/deps/rocksdb/rocksdb/util/compression.cc +936 -4
  399. package/deps/rocksdb/rocksdb/util/compression.h +348 -232
  400. package/deps/rocksdb/rocksdb/util/compression_test.cc +229 -0
  401. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +10 -10
  402. package/deps/rocksdb/rocksdb/util/crc32c_ppc.c +1 -0
  403. package/deps/rocksdb/rocksdb/util/data_structure.cc +2 -0
  404. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +1 -3
  405. package/deps/rocksdb/rocksdb/util/ppc-opcode.h +5 -5
  406. package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.cc +108 -0
  407. package/deps/rocksdb/rocksdb/util/simple_mixed_compressor.h +67 -0
  408. package/deps/rocksdb/rocksdb/util/slice_test.cc +83 -0
  409. package/deps/rocksdb/rocksdb/util/string_util.cc +0 -2
  410. package/deps/rocksdb/rocksdb/util/string_util.h +10 -0
  411. package/deps/rocksdb/rocksdb/util/thread_operation.h +2 -1
  412. package/deps/rocksdb/rocksdb/util/udt_util.cc +18 -5
  413. package/deps/rocksdb/rocksdb/util/udt_util.h +10 -7
  414. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +650 -154
  415. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +438 -144
  416. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +0 -1
  417. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +0 -1
  418. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +0 -1
  419. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +16 -17
  420. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +2 -1
  421. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +0 -1
  422. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +0 -1
  423. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +7 -8
  424. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +4 -3
  425. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.h +0 -1
  426. package/deps/rocksdb/rocksdb/utilities/cache_dump_load.cc +0 -1
  427. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +2 -2
  428. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +1 -1
  429. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +0 -48
  430. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +0 -1
  431. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +0 -1
  432. package/deps/rocksdb/rocksdb/utilities/debug.cc +7 -14
  433. package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +0 -1
  434. package/deps/rocksdb/rocksdb/utilities/env_mirror_test.cc +0 -2
  435. package/deps/rocksdb/rocksdb/utilities/env_timed.cc +0 -1
  436. package/deps/rocksdb/rocksdb/utilities/env_timed_test.cc +0 -2
  437. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +5 -3
  438. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +10 -9
  439. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +0 -1
  440. package/deps/rocksdb/rocksdb/utilities/memory/memory_util.cc +0 -1
  441. package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +1 -0
  442. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +0 -2
  443. package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +0 -1
  444. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +0 -1
  445. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +0 -1
  446. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +0 -2
  447. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +0 -2
  448. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.cc +0 -1
  449. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +0 -2
  450. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table.h +0 -2
  451. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +0 -2
  452. package/deps/rocksdb/rocksdb/utilities/persistent_cache/lrulist.h +0 -2
  453. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.h +0 -2
  454. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.cc +0 -1
  455. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +0 -2
  456. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.cc +0 -1
  457. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +0 -2
  458. package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index.cc +183 -32
  459. package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index_test.cc +258 -12
  460. package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_helper.h +33 -0
  461. package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_iterator.cc +99 -0
  462. package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_mixin.h +280 -120
  463. package/deps/rocksdb/rocksdb/utilities/secondary_index/simple_secondary_index.cc +79 -0
  464. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +52 -16
  465. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.h +10 -6
  466. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector_test.cc +55 -0
  467. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +0 -1
  468. package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_manager.cc +0 -2
  469. package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_manager.h +0 -1
  470. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +37 -12
  471. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +2 -0
  472. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +0 -2
  473. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.cc +0 -2
  474. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +1 -1
  475. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/db.h +1 -1
  476. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +1 -1
  477. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/dbt.cc +2 -1
  478. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +2 -2
  479. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +0 -1
  480. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.h +0 -2
  481. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +1 -3
  482. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +36 -10
  483. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +5 -7
  484. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +4 -5
  485. package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +1 -4
  486. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +1 -2
  487. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.cc +0 -2
  488. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.h +0 -1
  489. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +1118 -37
  490. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +4 -7
  491. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +0 -2
  492. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +0 -2
  493. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +3 -3
  494. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +0 -1
  495. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +0 -2
  496. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +1 -2
  497. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +1 -2
  498. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +0 -1
  499. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +0 -3
  500. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +125 -127
  501. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +45 -23
  502. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +54 -22
  503. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +477 -58
  504. package/deps/rocksdb/rocksdb.gyp +5 -0
  505. package/index.js +47 -2
  506. package/package.json +8 -1
  507. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  508. package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
@@ -2544,6 +2544,145 @@ TEST_P(DBIteratorTest, RefreshWithSnapshot) {
2544
2544
  ASSERT_OK(db_->Close());
2545
2545
  }
2546
2546
 
2547
+ TEST_P(DBIteratorTest, AutoRefreshIterator) {
2548
+ constexpr int kNumKeys = 1000;
2549
+ Options options = CurrentOptions();
2550
+ options.disable_auto_compactions = true;
2551
+ for (const DBIter::Direction direction :
2552
+ {DBIter::kForward, DBIter::kReverse}) {
2553
+ for (const bool auto_refresh_enabled : {false, true}) {
2554
+ for (const bool explicit_snapshot : {false, true}) {
2555
+ DestroyAndReopen(options);
2556
+ // Multi dimensional iterator:
2557
+ //
2558
+ // L0 (level iterator): [key000000]
2559
+ // L1 (table iterator): [key000001]
2560
+ // Memtable : [key000000, key000999]
2561
+ for (int i = 0; i < kNumKeys + 2; i++) {
2562
+ ASSERT_OK(Put(Key(i % kNumKeys), "val" + std::to_string(i)));
2563
+ if (i <= 1) {
2564
+ ASSERT_OK(Flush());
2565
+ }
2566
+ if (i == 0) {
2567
+ MoveFilesToLevel(1);
2568
+ }
2569
+ }
2570
+
2571
+ ReadOptions read_options;
2572
+ std::unique_ptr<ManagedSnapshot> snapshot = nullptr;
2573
+ if (explicit_snapshot) {
2574
+ snapshot = std::make_unique<ManagedSnapshot>(db_);
2575
+ }
2576
+ read_options.snapshot =
2577
+ explicit_snapshot ? snapshot->snapshot() : nullptr;
2578
+ read_options.auto_refresh_iterator_with_snapshot = auto_refresh_enabled;
2579
+ std::unique_ptr<Iterator> iter(NewIterator(read_options));
2580
+
2581
+ int trigger_compact_on_it = kNumKeys / 2;
2582
+
2583
+ // This update should NOT be visible from the iterator.
2584
+ ASSERT_OK(Put(Key(trigger_compact_on_it + 1), "new val"));
2585
+
2586
+ ASSERT_EQ(1, NumTableFilesAtLevel(1));
2587
+ ASSERT_EQ(1, NumTableFilesAtLevel(0));
2588
+
2589
+ uint64_t all_memtables_size_before_refresh;
2590
+ uint64_t all_memtables_size_after_refresh;
2591
+
2592
+ std::string prop_value;
2593
+ ASSERT_OK(iter->GetProperty("rocksdb.iterator.super-version-number",
2594
+ &prop_value));
2595
+ int superversion_number = std::stoi(prop_value);
2596
+
2597
+ std::vector<LiveFileMetaData> old_files;
2598
+ db_->GetLiveFilesMetaData(&old_files);
2599
+
2600
+ int expected_next_key_int;
2601
+ if (direction == DBIter::kForward) {
2602
+ expected_next_key_int = 0;
2603
+ iter->SeekToFirst();
2604
+ } else { // DBIter::kReverse
2605
+ expected_next_key_int = kNumKeys - 1;
2606
+ iter->SeekToLast();
2607
+ }
2608
+
2609
+ int it_num = 0;
2610
+ std::unordered_map<std::string, std::string> kvs;
2611
+ while (iter->Valid()) {
2612
+ ASSERT_OK(iter->status());
2613
+ it_num++;
2614
+ if (it_num == trigger_compact_on_it) {
2615
+ // Bump the superversion by manually scheduling flush + compaction.
2616
+ ASSERT_OK(Flush());
2617
+ ASSERT_OK(dbfull()->CompactRange(CompactRangeOptions(), nullptr,
2618
+ nullptr));
2619
+ ASSERT_OK(dbfull()->TEST_WaitForBackgroundWork());
2620
+
2621
+ // For accuracy, capture the memtables size right before consecutive
2622
+ // iterator call to Next() will update its' stale superversion ref.
2623
+ dbfull()->GetIntProperty("rocksdb.size-all-mem-tables",
2624
+ &all_memtables_size_before_refresh);
2625
+ }
2626
+
2627
+ if (it_num == trigger_compact_on_it + 1) {
2628
+ dbfull()->GetIntProperty("rocksdb.size-all-mem-tables",
2629
+ &all_memtables_size_after_refresh);
2630
+ ASSERT_OK(iter->GetProperty("rocksdb.iterator.super-version-number",
2631
+ &prop_value));
2632
+ uint64_t new_superversion_number = std::stoi(prop_value);
2633
+ Status expected_status_for_preexisting_files;
2634
+ if (auto_refresh_enabled && explicit_snapshot) {
2635
+ // Iterator is expected to detect its' superversion staleness.
2636
+ ASSERT_LT(superversion_number, new_superversion_number);
2637
+ // ... and since our iterator was the only reference to that very
2638
+ // superversion, we expect most of the active memory to be
2639
+ // returned upon automatical iterator refresh.
2640
+ ASSERT_GT(all_memtables_size_before_refresh,
2641
+ all_memtables_size_after_refresh);
2642
+ expected_status_for_preexisting_files = Status::NotFound();
2643
+ } else {
2644
+ ASSERT_EQ(superversion_number, new_superversion_number);
2645
+ ASSERT_EQ(all_memtables_size_after_refresh,
2646
+ all_memtables_size_before_refresh);
2647
+ expected_status_for_preexisting_files = Status::OK();
2648
+ }
2649
+
2650
+ for (const auto& file : old_files) {
2651
+ ASSERT_EQ(env_->FileExists(file.db_path + "/" + file.name),
2652
+ expected_status_for_preexisting_files);
2653
+ }
2654
+ }
2655
+
2656
+ // Ensure we're visiting the keys in desired order and at most once!
2657
+ ASSERT_EQ(IdFromKey(iter->key().ToString()), expected_next_key_int);
2658
+ kvs[iter->key().ToString()] = iter->value().ToString();
2659
+
2660
+ if (direction == DBIter::kForward) {
2661
+ iter->Next();
2662
+ expected_next_key_int++;
2663
+ } else {
2664
+ iter->Prev();
2665
+ expected_next_key_int--;
2666
+ }
2667
+ }
2668
+ ASSERT_OK(iter->status());
2669
+
2670
+ // Data validation.
2671
+ ASSERT_EQ(kvs.size(), kNumKeys);
2672
+ for (int i = 0; i < kNumKeys; i++) {
2673
+ auto kv = kvs.find(Key(i));
2674
+ ASSERT_TRUE(kv != kvs.end());
2675
+ int val = i;
2676
+ if (i <= 1) {
2677
+ val += kNumKeys;
2678
+ }
2679
+ ASSERT_EQ(kv->second, "val" + std::to_string(val));
2680
+ }
2681
+ }
2682
+ }
2683
+ }
2684
+ }
2685
+
2547
2686
  TEST_P(DBIteratorTest, CreationFailure) {
2548
2687
  SyncPoint::GetInstance()->SetCallBack(
2549
2688
  "DBImpl::NewInternalIterator:StatusCallback", [](void* arg) {
@@ -3685,6 +3824,321 @@ TEST_F(DBIteratorTest, IteratorsConsistentViewExplicitSnapshot) {
3685
3824
  }
3686
3825
  }
3687
3826
 
3827
+ TEST_P(DBIteratorTest, MemtableOpsScanFlushTriggerWithSeek) {
3828
+ // Tests that option memtable_op_scan_flush_trigger works when the limit
3829
+ // is reached during a Seek() operation.
3830
+ const int kTrigger = 10;
3831
+ Random* r = Random::GetTLSInstance();
3832
+
3833
+ for (int trigger : {kTrigger, kTrigger + 1}) {
3834
+ for (bool delete_only : {false, true}) {
3835
+ Options options;
3836
+ options.create_if_missing = true;
3837
+ options.memtable_op_scan_flush_trigger = trigger;
3838
+ options.level_compaction_dynamic_level_bytes = true;
3839
+ DestroyAndReopen(options);
3840
+
3841
+ // Base data that will be covered by a consecutive sequence of tombstones.
3842
+ int kNumKeys = delete_only ? kTrigger : kTrigger / 2;
3843
+ for (int i = 0; i < kNumKeys; ++i) {
3844
+ ASSERT_OK(Put(Key(i), r->RandomString(100)));
3845
+ }
3846
+ ASSERT_OK(Flush());
3847
+ ASSERT_OK(db_->CompactRange({}, nullptr, nullptr));
3848
+ ASSERT_EQ(1, NumTableFilesAtLevel(6));
3849
+
3850
+ if (delete_only) {
3851
+ for (int i = 0; i < kNumKeys; ++i) {
3852
+ ASSERT_OK(SingleDelete(Key(i)));
3853
+ }
3854
+ } else {
3855
+ for (int i = 0; i < kNumKeys; ++i) {
3856
+ ASSERT_OK(Put(Key(i), r->RandomString(100)));
3857
+ }
3858
+ for (int i = 0; i < kNumKeys; ++i) {
3859
+ ASSERT_OK(Delete(Key(i)));
3860
+ }
3861
+ }
3862
+
3863
+ SetPerfLevel(PerfLevel::kEnableCount);
3864
+ get_perf_context()->Reset();
3865
+ ReadOptions ro;
3866
+ std::unique_ptr<Iterator> iter(db_->NewIterator(ro));
3867
+
3868
+ // Seek to the first key, this will scan through all the tombstones and
3869
+ // hidden puts
3870
+ iter->Seek(Key(0));
3871
+ ASSERT_FALSE(
3872
+ iter->Valid()); // All keys are deleted, so iterator is not valid
3873
+ ASSERT_OK(iter->status());
3874
+ ASSERT_EQ(get_perf_context()->next_on_memtable_count, kTrigger);
3875
+
3876
+ // Skipping kNumTrigger memtable entries in a single iterator operation
3877
+ // should mark the memtable for flush.
3878
+ //
3879
+ // At the end of a write, we check and update memtable to request a flush
3880
+ ASSERT_OK(Put(Key(11), "val"));
3881
+ // Before a write, we schedule memtables for flush if requested.
3882
+ ASSERT_OK(Put(Key(12), "val"));
3883
+ ASSERT_OK(db_->WaitForCompact({}));
3884
+
3885
+ if (trigger <= kTrigger) {
3886
+ // Check if memtable was flushed due to scan trigger
3887
+ ASSERT_EQ(1, NumTableFilesAtLevel(0));
3888
+ uint64_t val = 0;
3889
+ ASSERT_TRUE(
3890
+ db_->GetIntProperty("rocksdb.num-deletes-active-mem-table", &val));
3891
+ ASSERT_EQ(0, val);
3892
+ } else {
3893
+ ASSERT_EQ(0, NumTableFilesAtLevel(0));
3894
+ uint64_t val = 0;
3895
+ ASSERT_TRUE(
3896
+ db_->GetIntProperty("rocksdb.num-deletes-active-mem-table", &val));
3897
+ ASSERT_EQ(kNumKeys, val);
3898
+ }
3899
+ }
3900
+ }
3901
+ }
3902
+
3903
+ TEST_P(DBIteratorTest, MemtableOpsScanFlushTriggerWithNext) {
3904
+ // Tests that option memtable_op_scan_flush_trigger works when the limit
3905
+ // is reached during a Next() operation, and not trigger a flush when
3906
+ // the limit is reached across multiple Next() operations.
3907
+ const int kTrigger = 10;
3908
+ Random* r = Random::GetTLSInstance();
3909
+
3910
+ for (int trigger : {kTrigger, kTrigger + 1}) {
3911
+ for (bool delete_only : {false, true}) {
3912
+ Options options;
3913
+ options.create_if_missing = true;
3914
+ options.memtable_op_scan_flush_trigger = trigger;
3915
+ options.level_compaction_dynamic_level_bytes = true;
3916
+ DestroyAndReopen(options);
3917
+
3918
+ // Base data that will be covered by a consecutive sequence of tombstones.
3919
+ int kNumKeys = delete_only ? kTrigger : kTrigger / 2;
3920
+ for (int i = 0; i <= kNumKeys; ++i) {
3921
+ ASSERT_OK(Put(Key(i), r->RandomString(100)));
3922
+ }
3923
+ ASSERT_OK(Flush());
3924
+ ASSERT_OK(db_->CompactRange({}, nullptr, nullptr));
3925
+ ASSERT_EQ(1, NumTableFilesAtLevel(6));
3926
+
3927
+ ASSERT_OK(Put(Key(0), "val"));
3928
+ if (delete_only) {
3929
+ for (int i = 1; i <= kNumKeys; ++i) {
3930
+ ASSERT_OK(SingleDelete(Key(i)));
3931
+ }
3932
+ } else {
3933
+ for (int i = 1; i <= kNumKeys; ++i) {
3934
+ ASSERT_OK(Put(Key(i), r->RandomString(100)));
3935
+ }
3936
+ for (int i = 1; i <= kNumKeys; ++i) {
3937
+ ASSERT_OK(Delete(Key(i)));
3938
+ }
3939
+ }
3940
+
3941
+ // Total number of tombstones and hidden puts scanned across multiple
3942
+ // Next() operations below will be kTrigger, and it should not trigger a
3943
+ // flush when the limit is kTrigger + 1.
3944
+ ASSERT_OK(Put(Key(kNumKeys + 1), "v1"));
3945
+ ASSERT_OK(Delete(Key(kNumKeys + 2)));
3946
+ ASSERT_OK(Put(Key(kNumKeys + 3), "v3"));
3947
+
3948
+ SetPerfLevel(PerfLevel::kEnableCount);
3949
+ get_perf_context()->Reset();
3950
+ ReadOptions ro;
3951
+ std::unique_ptr<Iterator> iter(db_->NewIterator(ro));
3952
+ iter->Seek(Key(0));
3953
+ ASSERT_TRUE(iter->Valid());
3954
+ ASSERT_EQ(iter->value(), "val");
3955
+ ASSERT_OK(iter->status());
3956
+ ASSERT_EQ(get_perf_context()->next_on_memtable_count, 0);
3957
+ iter->Next();
3958
+ // kTrigger tombstones and invisible puts and 1 for the visible put
3959
+ ASSERT_EQ(get_perf_context()->next_on_memtable_count, kTrigger + 1);
3960
+ iter->Next();
3961
+ ASSERT_EQ(get_perf_context()->next_on_memtable_count, kTrigger + 3);
3962
+
3963
+ // Skipping kNumTrigger memtable entries in a single iterator operation
3964
+ // should mark the memtable for flush.
3965
+ //
3966
+ // At the end of a write, we check and update memtable to request a flush
3967
+ ASSERT_OK(Put(Key(11), "val"));
3968
+ // Before a write, we schedule memtables for flush if requested.
3969
+ ASSERT_OK(Put(Key(12), "val"));
3970
+ ASSERT_OK(db_->WaitForCompact({}));
3971
+
3972
+ if (trigger <= kTrigger) {
3973
+ // Check if memtable was flushed due to scan trigger
3974
+ ASSERT_EQ(1, NumTableFilesAtLevel(0));
3975
+ uint64_t val = 0;
3976
+ ASSERT_TRUE(
3977
+ db_->GetIntProperty("rocksdb.num-deletes-active-mem-table", &val));
3978
+ ASSERT_EQ(0, val);
3979
+ } else {
3980
+ uint64_t val = 0;
3981
+ ASSERT_TRUE(
3982
+ db_->GetIntProperty("rocksdb.num-deletes-active-mem-table", &val));
3983
+ ASSERT_EQ(kNumKeys + 1, val);
3984
+ }
3985
+ }
3986
+ }
3987
+ }
3988
+
3989
+ TEST_P(DBIteratorTest, AverageMemtableOpsScanFlushTrigger) {
3990
+ // Tests option memtable_avg_op_scan_flush_trigger with
3991
+ // long tombstone sequences.
3992
+ Random* r = Random::GetTLSInstance();
3993
+
3994
+ const int kAvgTrigger = 10;
3995
+ const int kMaxTrigger = 500;
3996
+ Options options;
3997
+ options.create_if_missing = true;
3998
+ options.memtable_op_scan_flush_trigger = kMaxTrigger;
3999
+ options.memtable_avg_op_scan_flush_trigger = kAvgTrigger;
4000
+ options.level_compaction_dynamic_level_bytes = true;
4001
+ DestroyAndReopen(options);
4002
+
4003
+ const int kNumKeys = 1000;
4004
+ // Base data that will be covered by a consecutive sequence of tombstones.
4005
+ for (int i = 0; i < kNumKeys; ++i) {
4006
+ ASSERT_OK(Put(Key(i), r->RandomString(50)));
4007
+ }
4008
+ ASSERT_OK(Flush());
4009
+ ASSERT_OK(db_->CompactRange({}, nullptr, nullptr));
4010
+ ASSERT_EQ(1, NumTableFilesAtLevel(6));
4011
+
4012
+ for (int i = 0; i < kNumKeys; ++i) {
4013
+ // We issue slightly more deletions than kAvgTrigger between visible keys
4014
+ // to ensure avg skipped entries exceed kAvgTrigger.
4015
+ if (i % (kAvgTrigger + 2) != 0) {
4016
+ ASSERT_OK(SingleDelete(Key(i)));
4017
+ }
4018
+ }
4019
+
4020
+ // Each operation, except the first Seek, is expected to see kAvgTrigger + 1
4021
+ // tombstones (from the active memtable) before it finds the next visible key.
4022
+ SetPerfLevel(PerfLevel::kEnableCount);
4023
+ get_perf_context()->Reset();
4024
+ std::unique_ptr<Iterator> iter(db_->NewIterator(ReadOptions()));
4025
+ iter->Seek(Key(1));
4026
+ ASSERT_EQ(get_perf_context()->next_on_memtable_count, kAvgTrigger + 1);
4027
+ iter.reset();
4028
+ // Should not flush since total entries skipped is below
4029
+ // memtable_op_scan_flush_trigger
4030
+ ASSERT_OK(Put(Key(0), "dummy write"));
4031
+ ASSERT_OK(Put(Key(0), "dummy write"));
4032
+ ASSERT_OK(db_->WaitForCompact({}));
4033
+ ASSERT_EQ(0, NumTableFilesAtLevel(0));
4034
+
4035
+ get_perf_context()->Reset();
4036
+ iter.reset(db_->NewIterator(ReadOptions()));
4037
+ int num_ops = 1;
4038
+ uint64_t num_skipped = 0;
4039
+ iter->Seek(Key(0));
4040
+ ASSERT_EQ(iter->key(), Key(0));
4041
+ uint64_t last_memtable_next_count =
4042
+ get_perf_context()->next_on_memtable_count;
4043
+ iter->Next();
4044
+ num_ops++;
4045
+ while (iter->Valid()) {
4046
+ ASSERT_OK(iter->status());
4047
+ uint64_t num_skipped_in_op =
4048
+ get_perf_context()->next_on_memtable_count - last_memtable_next_count;
4049
+ ASSERT_GE(num_skipped_in_op, kAvgTrigger + 1);
4050
+ last_memtable_next_count = get_perf_context()->next_on_memtable_count;
4051
+ num_skipped += num_skipped_in_op;
4052
+ iter->Next();
4053
+ num_ops++;
4054
+ }
4055
+ // During iterator destruction we mark memtable for flush
4056
+ iter.reset();
4057
+
4058
+ // avg trigger
4059
+ ASSERT_GE(num_skipped, kAvgTrigger * num_ops);
4060
+ // memtable_op_scan_flush_trigger
4061
+ ASSERT_GE(num_skipped, kMaxTrigger);
4062
+ // Average hidden entries scanned from memtable per operation is more than
4063
+ // kAvgTrigger and the total skipped is more than
4064
+ // memtable_op_scan_flush_trigger, the current memtable should be marked for
4065
+ // flush. The following two writes will trigger the flush.
4066
+ ASSERT_OK(Put(Key(0), "dummy write"));
4067
+ // Before a write, we schedule memtables for flush if requested.
4068
+ ASSERT_OK(Put(Key(0), "dummy write"));
4069
+ ASSERT_OK(db_->WaitForCompact({}));
4070
+ ASSERT_EQ(1, NumTableFilesAtLevel(0));
4071
+ }
4072
+
4073
+ TEST_P(DBIteratorTest, AverageMemtableOpsScanFlushTriggerByOverwrites) {
4074
+ // Tests option memtable_avg_op_scan_flush_trigger with overwrites to keys.
4075
+ Random* r = Random::GetTLSInstance();
4076
+
4077
+ const int kAvgTrigger = 25;
4078
+ Options options;
4079
+ options.create_if_missing = true;
4080
+ options.memtable_op_scan_flush_trigger = 250;
4081
+ options.memtable_avg_op_scan_flush_trigger = kAvgTrigger;
4082
+ options.level_compaction_dynamic_level_bytes = true;
4083
+ DestroyAndReopen(options);
4084
+
4085
+ const int kNumKeys = 100;
4086
+ // Base data that will be covered by a consecutive sequence of tombstones.
4087
+ for (int i = 0; i < kNumKeys; ++i) {
4088
+ ASSERT_OK(Put(Key(i), r->RandomString(50)));
4089
+ }
4090
+ ASSERT_OK(Flush());
4091
+ ASSERT_OK(db_->CompactRange({}, nullptr, nullptr));
4092
+ ASSERT_EQ(1, NumTableFilesAtLevel(6));
4093
+
4094
+ // One visible key every 10 keys.
4095
+ // Each non-visible user key has 3 non-visible entries in the active memtable.
4096
+ for (int i = 0; i < kNumKeys; ++i) {
4097
+ if (i % 10 != 0) {
4098
+ ASSERT_OK(Put(Key(i), r->RandomString(50)));
4099
+ ASSERT_OK(Put(Key(i), r->RandomString(50)));
4100
+ ASSERT_OK(Delete(Key(i)));
4101
+ }
4102
+ }
4103
+
4104
+ SetPerfLevel(PerfLevel::kEnableCount);
4105
+ get_perf_context()->Reset();
4106
+ ReadOptions ro;
4107
+ std::unique_ptr<Iterator> iter(db_->NewIterator(ro));
4108
+ iter->Seek(Key(1));
4109
+ ASSERT_GT(get_perf_context()->next_on_memtable_count, kAvgTrigger);
4110
+ // Re-seek to trigger check for flush trigger
4111
+ iter->Seek(Key(1));
4112
+ // Should not flush since total entries skipped is below
4113
+ // memtable_op_scan_flush_trigger
4114
+ ASSERT_FALSE(static_cast<ColumnFamilyHandleImpl*>(db_->DefaultColumnFamily())
4115
+ ->cfd()
4116
+ ->mem()
4117
+ ->IsMarkedForFlush());
4118
+ ASSERT_OK(Put(Key(0), "dummy write"));
4119
+ ASSERT_OK(Put(Key(0), "dummy write"));
4120
+ ASSERT_OK(db_->WaitForCompact({}));
4121
+ ASSERT_EQ(0, NumTableFilesAtLevel(0));
4122
+ get_perf_context()->Reset();
4123
+
4124
+ int num_ops = 1;
4125
+ iter->Seek(Key(1));
4126
+ while (iter->Valid()) {
4127
+ num_ops++;
4128
+ iter->Next();
4129
+ }
4130
+ ASSERT_GT(get_perf_context()->next_on_memtable_count, num_ops * kAvgTrigger);
4131
+
4132
+ // Re-seek should check conditions for marking memtable for flush
4133
+ iter->Seek(Key(80));
4134
+
4135
+ // Average hidden entries scanned from memtable per operation is 2.
4136
+ ASSERT_OK(Put(Key(0), "dummy write"));
4137
+ // Before a write, we schedule memtables for flush if requested.
4138
+ ASSERT_OK(Put(Key(0), "dummy write"));
4139
+ ASSERT_OK(db_->WaitForCompact({}));
4140
+ ASSERT_EQ(1, NumTableFilesAtLevel(0));
4141
+ }
3688
4142
  } // namespace ROCKSDB_NAMESPACE
3689
4143
 
3690
4144
  int main(int argc, char** argv) {
@@ -312,12 +312,12 @@ TEST_P(DbKvChecksumTest, WriteToWALCorrupted) {
312
312
  // Corrupted write batch leads to read-only mode, so we have to
313
313
  // reopen for every attempt.
314
314
  Reopen(options);
315
- auto log_size_pre_write = dbfull()->TEST_total_log_size();
315
+ auto log_size_pre_write = dbfull()->TEST_wals_total_size();
316
316
 
317
317
  SyncPoint::GetInstance()->EnableProcessing();
318
318
  ASSERT_TRUE(ExecuteWrite(nullptr /* cf_handle */).IsCorruption());
319
319
  // Confirm that nothing was written to WAL
320
- ASSERT_EQ(log_size_pre_write, dbfull()->TEST_total_log_size());
320
+ ASSERT_EQ(log_size_pre_write, dbfull()->TEST_wals_total_size());
321
321
  ASSERT_TRUE(dbfull()->TEST_GetBGError().IsCorruption());
322
322
  SyncPoint::GetInstance()->DisableProcessing();
323
323
 
@@ -350,12 +350,12 @@ TEST_P(DbKvChecksumTest, WriteToWALWithColumnFamilyCorrupted) {
350
350
  // Corrupted write batch leads to read-only mode, so we have to
351
351
  // reopen for every attempt.
352
352
  ReopenWithColumnFamilies({kDefaultColumnFamilyName, "pikachu"}, options);
353
- auto log_size_pre_write = dbfull()->TEST_total_log_size();
353
+ auto log_size_pre_write = dbfull()->TEST_wals_total_size();
354
354
 
355
355
  SyncPoint::GetInstance()->EnableProcessing();
356
356
  ASSERT_TRUE(ExecuteWrite(nullptr /* cf_handle */).IsCorruption());
357
357
  // Confirm that nothing was written to WAL
358
- ASSERT_EQ(log_size_pre_write, dbfull()->TEST_total_log_size());
358
+ ASSERT_EQ(log_size_pre_write, dbfull()->TEST_wals_total_size());
359
359
  ASSERT_TRUE(dbfull()->TEST_GetBGError().IsCorruption());
360
360
  SyncPoint::GetInstance()->DisableProcessing();
361
361
 
@@ -487,7 +487,7 @@ TEST_P(DbKvChecksumTestMergedBatch, WriteToWALCorrupted) {
487
487
  // Reopen DB since it failed WAL write which lead to read-only mode
488
488
  Reopen(options);
489
489
  SyncPoint::GetInstance()->EnableProcessing();
490
- auto log_size_pre_write = dbfull()->TEST_total_log_size();
490
+ auto log_size_pre_write = dbfull()->TEST_wals_total_size();
491
491
  leader_batch_and_status =
492
492
  GetWriteBatch(GetCFHandleToUse(nullptr, op_type1_),
493
493
  8 /* protection_bytes_per_key */, op_type1_);
@@ -499,7 +499,7 @@ TEST_P(DbKvChecksumTestMergedBatch, WriteToWALCorrupted) {
499
499
  SyncPoint::GetInstance()->ClearCallBack("WriteThread::JoinBatchGroup:Wait");
500
500
  ASSERT_EQ(1, leader_count);
501
501
  // Nothing should have been written to WAL
502
- ASSERT_EQ(log_size_pre_write, dbfull()->TEST_total_log_size());
502
+ ASSERT_EQ(log_size_pre_write, dbfull()->TEST_wals_total_size());
503
503
  ASSERT_TRUE(dbfull()->TEST_GetBGError().IsCorruption());
504
504
 
505
505
  corrupt_byte_offset++;
@@ -599,7 +599,7 @@ TEST_P(DbKvChecksumTestMergedBatch, WriteToWALWithColumnFamilyCorrupted) {
599
599
  // Reopen DB since it failed WAL write which lead to read-only mode
600
600
  ReopenWithColumnFamilies({kDefaultColumnFamilyName, "ramen"}, options);
601
601
  SyncPoint::GetInstance()->EnableProcessing();
602
- auto log_size_pre_write = dbfull()->TEST_total_log_size();
602
+ auto log_size_pre_write = dbfull()->TEST_wals_total_size();
603
603
  leader_batch_and_status =
604
604
  GetWriteBatch(GetCFHandleToUse(handles_[1], op_type1_),
605
605
  8 /* protection_bytes_per_key */, op_type1_);
@@ -612,7 +612,7 @@ TEST_P(DbKvChecksumTestMergedBatch, WriteToWALWithColumnFamilyCorrupted) {
612
612
 
613
613
  ASSERT_EQ(1, leader_count);
614
614
  // Nothing should have been written to WAL
615
- ASSERT_EQ(log_size_pre_write, dbfull()->TEST_total_log_size());
615
+ ASSERT_EQ(log_size_pre_write, dbfull()->TEST_wals_total_size());
616
616
  ASSERT_TRUE(dbfull()->TEST_GetBGError().IsCorruption());
617
617
 
618
618
  corrupt_byte_offset++;
@@ -332,7 +332,6 @@ TEST_F(DBTestXactLogIterator, TransactionLogIteratorBlobs) {
332
332
  }
333
333
  } // namespace ROCKSDB_NAMESPACE
334
334
 
335
-
336
335
  int main(int argc, char** argv) {
337
336
  ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
338
337
  ::testing::InitGoogleTest(&argc, argv);
@@ -424,6 +424,96 @@ TEST_F(DBMemTableTest, IntegrityChecks) {
424
424
  ASSERT_FALSE(iter->Valid());
425
425
  }
426
426
  }
427
+
428
+ TEST_F(DBMemTableTest, VectorConcurrentInsert) {
429
+ Options options;
430
+ options.create_if_missing = true;
431
+ options.create_missing_column_families = true;
432
+ options.allow_concurrent_memtable_write = true;
433
+ options.memtable_factory.reset(new VectorRepFactory());
434
+ DestroyAndReopen(options);
435
+ CreateAndReopenWithCF({"cf1"}, options);
436
+
437
+ // Multi-threaded writes
438
+ {
439
+ WriteOptions write_options;
440
+ std::vector<port::Thread> threads;
441
+ for (int i = 0; i < 10; ++i) {
442
+ threads.emplace_back([&, i]() {
443
+ int start = i * 100;
444
+ int end = start + 100;
445
+ WriteBatch batch;
446
+ for (int j = start; j < end; ++j) {
447
+ ASSERT_OK(
448
+ batch.Put(handles_[0], Key(j), "value" + std::to_string(j)));
449
+ }
450
+ ASSERT_OK(db_->Write(write_options, &batch));
451
+ });
452
+ }
453
+ for (auto& t : threads) {
454
+ t.join();
455
+ }
456
+
457
+ std::unique_ptr<Iterator> iter(
458
+ db_->NewIterator(ReadOptions(), handles_[0]));
459
+ iter->SeekToFirst();
460
+ for (int i = 0; i < 1000; ++i) {
461
+ ASSERT_TRUE(iter->Valid());
462
+ ASSERT_EQ(iter->key().ToString(), Key(i));
463
+ ASSERT_EQ(iter->value().ToString(), "value" + std::to_string(i));
464
+ iter->Next();
465
+ }
466
+ ASSERT_FALSE(iter->Valid());
467
+ ASSERT_OK(iter->status());
468
+ }
469
+
470
+ // Multi-threaded writes, multi CF
471
+ {
472
+ WriteOptions write_options;
473
+ std::vector<port::Thread> threads;
474
+ for (int i = 0; i < 10; ++i) {
475
+ threads.emplace_back([&, i]() {
476
+ int start = i * 100;
477
+ int end = start + 100;
478
+ WriteBatch batch;
479
+ for (int j = start; j < end; ++j) {
480
+ ASSERT_OK(batch.Put(handles_[0], Key(j), "CF0" + std::to_string(j)));
481
+ ASSERT_OK(batch.Put(handles_[1], Key(j), "CF1" + std::to_string(j)));
482
+ }
483
+ ASSERT_OK(db_->Write(write_options, &batch));
484
+ });
485
+ }
486
+
487
+ for (auto& t : threads) {
488
+ t.join();
489
+ }
490
+
491
+ std::unique_ptr<Iterator> iter0(
492
+ db_->NewIterator(ReadOptions(), handles_[0]));
493
+ std::unique_ptr<Iterator> iter1(
494
+ db_->NewIterator(ReadOptions(), handles_[1]));
495
+ iter0->SeekToFirst();
496
+ iter1->SeekToFirst();
497
+ for (int i = 0; i < 1000; ++i) {
498
+ ASSERT_TRUE(iter0->Valid());
499
+ ASSERT_EQ(iter0->key().ToString(), Key(i));
500
+ ASSERT_EQ(iter0->value().ToString(), "CF0" + std::to_string(i));
501
+ iter0->Next();
502
+
503
+ ASSERT_TRUE(iter1->Valid());
504
+ ASSERT_EQ(iter1->key().ToString(), Key(i));
505
+ ASSERT_EQ(iter1->value().ToString(), "CF1" + std::to_string(i));
506
+ iter1->Next();
507
+ }
508
+ ASSERT_FALSE(iter0->Valid());
509
+ ASSERT_OK(iter0->status());
510
+ ASSERT_FALSE(iter1->Valid());
511
+ ASSERT_OK(iter1->status());
512
+ }
513
+
514
+ ASSERT_OK(Flush(0));
515
+ ASSERT_OK(Flush(1));
516
+ }
427
517
  } // namespace ROCKSDB_NAMESPACE
428
518
 
429
519
  int main(int argc, char** argv) {