@nxtedition/rocksdb 7.1.20 → 7.1.21

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 (262) hide show
  1. package/deps/rocksdb/rocksdb/CMakeLists.txt +13 -6
  2. package/deps/rocksdb/rocksdb/Makefile +1 -1
  3. package/deps/rocksdb/rocksdb/TARGETS +2 -0
  4. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +1 -0
  5. package/deps/rocksdb/rocksdb/cache/cache_test.cc +4 -4
  6. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +139 -161
  7. package/deps/rocksdb/rocksdb/cache/clock_cache.h +92 -82
  8. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +16 -3
  9. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +9 -3
  10. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +73 -30
  11. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +25 -67
  12. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +41 -40
  13. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +109 -155
  14. package/deps/rocksdb/rocksdb/cache/lru_cache.h +127 -149
  15. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +75 -80
  16. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +22 -172
  17. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +272 -85
  18. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +12 -4
  19. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator_test.cc +1 -0
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +1 -0
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -0
  22. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +1 -0
  23. package/deps/rocksdb/rocksdb/db/blob/blob_file_garbage_test.cc +1 -0
  24. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -0
  25. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter_test.cc +1 -0
  26. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +13 -4
  27. package/deps/rocksdb/rocksdb/db/builder.cc +1 -1
  28. package/deps/rocksdb/rocksdb/db/column_family.cc +15 -1
  29. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +1 -0
  30. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator_test.cc +1 -0
  31. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +25 -7
  32. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +10 -0
  33. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +22 -8
  34. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +14 -5
  35. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +1 -0
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +38 -12
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +9 -6
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +408 -6
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +244 -54
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +27 -6
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +25 -30
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +87 -26
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +23 -4
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +61 -0
  45. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +294 -21
  46. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -0
  47. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
  48. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +28 -10
  49. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +4 -4
  50. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +272 -0
  51. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +38 -0
  52. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +69 -25
  53. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +7 -3
  54. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +29 -12
  55. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +0 -12
  56. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +10 -4
  57. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +35 -22
  58. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +5 -1
  59. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +40 -5
  60. package/deps/rocksdb/rocksdb/db/db_iter.cc +1 -0
  61. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +1 -0
  62. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +1 -0
  63. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +22 -0
  64. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +1 -0
  65. package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +1 -0
  66. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +72 -5
  67. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +60 -21
  68. package/deps/rocksdb/rocksdb/db/db_test.cc +170 -1
  69. package/deps/rocksdb/rocksdb/db/db_test2.cc +9 -3
  70. package/deps/rocksdb/rocksdb/db/db_test_util.cc +19 -0
  71. package/deps/rocksdb/rocksdb/db/db_test_util.h +32 -0
  72. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +444 -3
  73. package/deps/rocksdb/rocksdb/db/db_write_test.cc +8 -8
  74. package/deps/rocksdb/rocksdb/db/dbformat.cc +13 -0
  75. package/deps/rocksdb/rocksdb/db/dbformat.h +59 -4
  76. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +1 -0
  77. package/deps/rocksdb/rocksdb/db/experimental.cc +3 -1
  78. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +24 -3
  79. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -0
  80. package/deps/rocksdb/rocksdb/db/filename_test.cc +1 -0
  81. package/deps/rocksdb/rocksdb/db/flush_job.cc +4 -3
  82. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +1 -0
  83. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +85 -43
  84. package/deps/rocksdb/rocksdb/db/forward_iterator.h +3 -1
  85. package/deps/rocksdb/rocksdb/db/internal_stats.cc +33 -6
  86. package/deps/rocksdb/rocksdb/db/internal_stats.h +6 -0
  87. package/deps/rocksdb/rocksdb/db/listener_test.cc +1 -0
  88. package/deps/rocksdb/rocksdb/db/log_test.cc +1 -0
  89. package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
  90. package/deps/rocksdb/rocksdb/db/log_writer.h +1 -1
  91. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +1 -0
  92. package/deps/rocksdb/rocksdb/db/memtable.cc +158 -56
  93. package/deps/rocksdb/rocksdb/db/memtable.h +2 -0
  94. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +1 -0
  95. package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +1 -0
  96. package/deps/rocksdb/rocksdb/db/options_file_test.cc +1 -0
  97. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +1 -0
  98. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler_test.cc +1 -0
  99. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +1 -0
  100. package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -0
  101. package/deps/rocksdb/rocksdb/db/range_del_aggregator.cc +52 -9
  102. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +31 -2
  103. package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +1 -0
  104. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +81 -42
  105. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +78 -12
  106. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +1 -0
  107. package/deps/rocksdb/rocksdb/db/repair_test.cc +1 -0
  108. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +154 -27
  109. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +21 -4
  110. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +4 -1
  111. package/deps/rocksdb/rocksdb/db/table_cache.cc +18 -6
  112. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +1 -0
  113. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +1 -0
  114. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +1 -0
  115. package/deps/rocksdb/rocksdb/db/version_set.cc +15 -7
  116. package/deps/rocksdb/rocksdb/db/version_set.h +2 -1
  117. package/deps/rocksdb/rocksdb/db/version_set_test.cc +1 -0
  118. package/deps/rocksdb/rocksdb/db/version_util.h +3 -1
  119. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +1 -0
  120. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +28 -9
  121. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +21 -0
  122. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +30 -0
  123. package/deps/rocksdb/rocksdb/db/wide/wide_columns.cc +4 -0
  124. package/deps/rocksdb/rocksdb/db/write_batch.cc +30 -7
  125. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +24 -13
  126. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +5 -4
  127. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +1 -0
  128. package/deps/rocksdb/rocksdb/db/write_controller_test.cc +1 -0
  129. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +104 -60
  130. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +199 -108
  131. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +39 -0
  132. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +8 -0
  133. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +3 -1
  134. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +19 -0
  135. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +26 -0
  136. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +247 -118
  137. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +24 -4
  138. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +18 -0
  139. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +129 -1
  140. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +22 -0
  141. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +4 -0
  142. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +312 -117
  143. package/deps/rocksdb/rocksdb/env/env_basic_test.cc +1 -0
  144. package/deps/rocksdb/rocksdb/env/fs_posix.cc +10 -2
  145. package/deps/rocksdb/rocksdb/env/io_posix_test.cc +1 -0
  146. package/deps/rocksdb/rocksdb/env/mock_env_test.cc +1 -0
  147. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +5 -1
  148. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +1 -0
  149. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1 -0
  150. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +1 -1
  151. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +49 -1
  152. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +44 -18
  153. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +8 -7
  154. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +6 -1
  155. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +3 -0
  156. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +17 -4
  157. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +4 -0
  158. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +7 -0
  159. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +1 -1
  160. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +9 -0
  161. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -6
  162. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +1 -0
  163. package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +1 -0
  164. package/deps/rocksdb/rocksdb/logging/event_logger_test.cc +1 -0
  165. package/deps/rocksdb/rocksdb/memory/arena.cc +23 -88
  166. package/deps/rocksdb/rocksdb/memory/arena.h +25 -31
  167. package/deps/rocksdb/rocksdb/memory/arena_test.cc +61 -0
  168. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +1 -0
  169. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +1 -0
  170. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -0
  171. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +1 -0
  172. package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +1 -0
  173. package/deps/rocksdb/rocksdb/monitoring/iostats_context_test.cc +1 -0
  174. package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
  175. package/deps/rocksdb/rocksdb/options/cf_options.h +8 -0
  176. package/deps/rocksdb/rocksdb/options/configurable_test.cc +1 -0
  177. package/deps/rocksdb/rocksdb/options/options.cc +7 -0
  178. package/deps/rocksdb/rocksdb/options/options_helper.cc +6 -0
  179. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +6 -0
  180. package/deps/rocksdb/rocksdb/options/options_test.cc +63 -40
  181. package/deps/rocksdb/rocksdb/port/mmap.cc +98 -0
  182. package/deps/rocksdb/rocksdb/port/mmap.h +70 -0
  183. package/deps/rocksdb/rocksdb/port/stack_trace.cc +7 -0
  184. package/deps/rocksdb/rocksdb/port/stack_trace.h +4 -1
  185. package/deps/rocksdb/rocksdb/port/win/port_win.h +2 -7
  186. package/deps/rocksdb/rocksdb/src.mk +1 -0
  187. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +7 -7
  188. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +3 -3
  189. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +1 -0
  190. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +1 -0
  191. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +1 -0
  192. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +1 -0
  193. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -0
  194. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +1 -0
  195. package/deps/rocksdb/rocksdb/table/get_context.cc +19 -1
  196. package/deps/rocksdb/rocksdb/table/get_context.h +9 -0
  197. package/deps/rocksdb/rocksdb/table/merger_test.cc +1 -0
  198. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +10 -11
  199. package/deps/rocksdb/rocksdb/table/mock_table.cc +37 -19
  200. package/deps/rocksdb/rocksdb/table/mock_table.h +5 -1
  201. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +6 -0
  202. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +33 -0
  203. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +45 -6
  204. package/deps/rocksdb/rocksdb/test_util/testharness.h +2 -0
  205. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +1 -0
  206. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +5 -0
  207. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +1 -0
  208. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +1 -0
  209. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +36 -0
  210. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
  211. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +1 -0
  212. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +1 -0
  213. package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +1 -0
  214. package/deps/rocksdb/rocksdb/util/autovector_test.cc +1 -0
  215. package/deps/rocksdb/rocksdb/util/bloom_test.cc +1 -0
  216. package/deps/rocksdb/rocksdb/util/coding_test.cc +1 -0
  217. package/deps/rocksdb/rocksdb/util/crc32c_test.cc +1 -0
  218. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +1 -0
  219. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +1 -0
  220. package/deps/rocksdb/rocksdb/util/filelock_test.cc +1 -0
  221. package/deps/rocksdb/rocksdb/util/gflags_compat.h +12 -7
  222. package/deps/rocksdb/rocksdb/util/hash_test.cc +1 -0
  223. package/deps/rocksdb/rocksdb/util/heap_test.cc +4 -2
  224. package/deps/rocksdb/rocksdb/util/random_test.cc +1 -0
  225. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +1 -0
  226. package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +1 -0
  227. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +1 -0
  228. package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +1 -0
  229. package/deps/rocksdb/rocksdb/util/thread_list_test.cc +1 -0
  230. package/deps/rocksdb/rocksdb/util/thread_local_test.cc +1 -0
  231. package/deps/rocksdb/rocksdb/util/timer_test.cc +1 -0
  232. package/deps/rocksdb/rocksdb/util/work_queue_test.cc +4 -0
  233. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +1 -0
  234. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +13 -0
  235. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +9 -3
  236. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +1 -0
  237. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_format_test.cc +1 -0
  238. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +1 -0
  239. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_row_merge_test.cc +1 -0
  240. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_serialize_test.cc +1 -0
  241. package/deps/rocksdb/rocksdb/utilities/env_mirror_test.cc +1 -0
  242. package/deps/rocksdb/rocksdb/utilities/env_timed_test.cc +1 -0
  243. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +8 -0
  244. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -0
  245. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +1 -0
  246. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +1 -0
  247. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_test.cc +1 -0
  248. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -0
  249. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +1 -0
  250. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1 -0
  251. package/deps/rocksdb/rocksdb/utilities/transactions/timestamped_snapshot_test.cc +1 -0
  252. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +1 -0
  253. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +1 -0
  254. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +1 -0
  255. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -0
  256. package/deps/rocksdb/rocksdb/utilities/util_merge_operators_test.cc +1 -0
  257. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +7 -0
  258. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +20 -0
  259. package/index.js +12 -4
  260. package/package.json +1 -1
  261. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  262. package/prebuilds/linux-x64/node.napi.node +0 -0
@@ -18,15 +18,22 @@
18
18
 
19
19
  namespace ROCKSDB_NAMESPACE {
20
20
 
21
- class DBTestTailingIterator : public DBTestBase {
21
+ class DBTestTailingIterator : public DBTestBase,
22
+ public ::testing::WithParamInterface<bool> {
22
23
  public:
23
24
  DBTestTailingIterator()
24
25
  : DBTestBase("db_tailing_iterator_test", /*env_do_fsync=*/true) {}
25
26
  };
26
27
 
27
- TEST_F(DBTestTailingIterator, TailingIteratorSingle) {
28
+ INSTANTIATE_TEST_CASE_P(DBTestTailingIterator, DBTestTailingIterator,
29
+ ::testing::Bool());
30
+
31
+ TEST_P(DBTestTailingIterator, TailingIteratorSingle) {
28
32
  ReadOptions read_options;
29
33
  read_options.tailing = true;
34
+ if (GetParam()) {
35
+ read_options.async_io = true;
36
+ }
30
37
 
31
38
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options));
32
39
  iter->SeekToFirst();
@@ -43,11 +50,13 @@ TEST_F(DBTestTailingIterator, TailingIteratorSingle) {
43
50
  ASSERT_TRUE(!iter->Valid());
44
51
  }
45
52
 
46
- TEST_F(DBTestTailingIterator, TailingIteratorKeepAdding) {
53
+ TEST_P(DBTestTailingIterator, TailingIteratorKeepAdding) {
47
54
  CreateAndReopenWithCF({"pikachu"}, CurrentOptions());
48
55
  ReadOptions read_options;
49
56
  read_options.tailing = true;
50
-
57
+ if (GetParam()) {
58
+ read_options.async_io = true;
59
+ }
51
60
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options, handles_[1]));
52
61
  ASSERT_OK(iter->status());
53
62
  std::string value(1024, 'a');
@@ -66,11 +75,13 @@ TEST_F(DBTestTailingIterator, TailingIteratorKeepAdding) {
66
75
  }
67
76
  }
68
77
 
69
- TEST_F(DBTestTailingIterator, TailingIteratorSeekToNext) {
78
+ TEST_P(DBTestTailingIterator, TailingIteratorSeekToNext) {
70
79
  CreateAndReopenWithCF({"pikachu"}, CurrentOptions());
71
80
  ReadOptions read_options;
72
81
  read_options.tailing = true;
73
-
82
+ if (GetParam()) {
83
+ read_options.async_io = true;
84
+ }
74
85
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options, handles_[1]));
75
86
  ASSERT_OK(iter->status());
76
87
  std::unique_ptr<Iterator> itern(db_->NewIterator(read_options, handles_[1]));
@@ -125,7 +136,7 @@ TEST_F(DBTestTailingIterator, TailingIteratorSeekToNext) {
125
136
  }
126
137
  }
127
138
 
128
- TEST_F(DBTestTailingIterator, TailingIteratorTrimSeekToNext) {
139
+ TEST_P(DBTestTailingIterator, TailingIteratorTrimSeekToNext) {
129
140
  const uint64_t k150KB = 150 * 1024;
130
141
  Options options;
131
142
  options.write_buffer_size = k150KB;
@@ -135,6 +146,9 @@ TEST_F(DBTestTailingIterator, TailingIteratorTrimSeekToNext) {
135
146
  CreateAndReopenWithCF({"pikachu"}, options);
136
147
  ReadOptions read_options;
137
148
  read_options.tailing = true;
149
+ if (GetParam()) {
150
+ read_options.async_io = true;
151
+ }
138
152
  int num_iters, deleted_iters;
139
153
 
140
154
  char bufe[32];
@@ -265,10 +279,13 @@ TEST_F(DBTestTailingIterator, TailingIteratorTrimSeekToNext) {
265
279
  }
266
280
  }
267
281
 
268
- TEST_F(DBTestTailingIterator, TailingIteratorDeletes) {
282
+ TEST_P(DBTestTailingIterator, TailingIteratorDeletes) {
269
283
  CreateAndReopenWithCF({"pikachu"}, CurrentOptions());
270
284
  ReadOptions read_options;
271
285
  read_options.tailing = true;
286
+ if (GetParam()) {
287
+ read_options.async_io = true;
288
+ }
272
289
 
273
290
  std::unique_ptr<Iterator> iter(db_->NewIterator(read_options, handles_[1]));
274
291
  ASSERT_OK(iter->status());
@@ -300,15 +317,18 @@ TEST_F(DBTestTailingIterator, TailingIteratorDeletes) {
300
317
 
301
318
  // make sure we can read all new records using the existing iterator
302
319
  int count = 0;
303
- for (; iter->Valid(); iter->Next(), ++count) ;
320
+ for (; iter->Valid(); iter->Next(), ++count)
321
+ ;
304
322
 
305
323
  ASSERT_EQ(count, num_records);
306
324
  }
307
325
 
308
- TEST_F(DBTestTailingIterator, TailingIteratorPrefixSeek) {
326
+ TEST_P(DBTestTailingIterator, TailingIteratorPrefixSeek) {
309
327
  ReadOptions read_options;
310
328
  read_options.tailing = true;
311
-
329
+ if (GetParam()) {
330
+ read_options.async_io = true;
331
+ }
312
332
  Options options = CurrentOptions();
313
333
  options.create_if_missing = true;
314
334
  options.disable_auto_compactions = true;
@@ -338,10 +358,13 @@ TEST_F(DBTestTailingIterator, TailingIteratorPrefixSeek) {
338
358
  ASSERT_TRUE(!iter->Valid());
339
359
  }
340
360
 
341
- TEST_F(DBTestTailingIterator, TailingIteratorIncomplete) {
361
+ TEST_P(DBTestTailingIterator, TailingIteratorIncomplete) {
342
362
  CreateAndReopenWithCF({"pikachu"}, CurrentOptions());
343
363
  ReadOptions read_options;
344
364
  read_options.tailing = true;
365
+ if (GetParam()) {
366
+ read_options.async_io = true;
367
+ }
345
368
  read_options.read_tier = kBlockCacheTier;
346
369
 
347
370
  std::string key("key");
@@ -361,7 +384,7 @@ TEST_F(DBTestTailingIterator, TailingIteratorIncomplete) {
361
384
  ASSERT_TRUE(iter->Valid() || iter->status().IsIncomplete());
362
385
  }
363
386
 
364
- TEST_F(DBTestTailingIterator, TailingIteratorSeekToSame) {
387
+ TEST_P(DBTestTailingIterator, TailingIteratorSeekToSame) {
365
388
  Options options = CurrentOptions();
366
389
  options.compaction_style = kCompactionStyleUniversal;
367
390
  options.write_buffer_size = 1000;
@@ -369,7 +392,9 @@ TEST_F(DBTestTailingIterator, TailingIteratorSeekToSame) {
369
392
 
370
393
  ReadOptions read_options;
371
394
  read_options.tailing = true;
372
-
395
+ if (GetParam()) {
396
+ read_options.async_io = true;
397
+ }
373
398
  const int NROWS = 10000;
374
399
  // Write rows with keys 00000, 00002, 00004 etc.
375
400
  for (int i = 0; i < NROWS; ++i) {
@@ -400,14 +425,16 @@ TEST_F(DBTestTailingIterator, TailingIteratorSeekToSame) {
400
425
  // Sets iterate_upper_bound and verifies that ForwardIterator doesn't call
401
426
  // Seek() on immutable iterators when target key is >= prev_key and all
402
427
  // iterators, including the memtable iterator, are over the upper bound.
403
- TEST_F(DBTestTailingIterator, TailingIteratorUpperBound) {
428
+ TEST_P(DBTestTailingIterator, TailingIteratorUpperBound) {
404
429
  CreateAndReopenWithCF({"pikachu"}, CurrentOptions());
405
430
 
406
431
  const Slice upper_bound("20", 3);
407
432
  ReadOptions read_options;
408
433
  read_options.tailing = true;
409
434
  read_options.iterate_upper_bound = &upper_bound;
410
-
435
+ if (GetParam()) {
436
+ read_options.async_io = true;
437
+ }
411
438
  ASSERT_OK(Put(1, "11", "11"));
412
439
  ASSERT_OK(Put(1, "12", "12"));
413
440
  ASSERT_OK(Put(1, "22", "22"));
@@ -439,10 +466,14 @@ TEST_F(DBTestTailingIterator, TailingIteratorUpperBound) {
439
466
 
440
467
  ASSERT_FALSE(it->Valid());
441
468
  ASSERT_OK(it->status());
442
- ASSERT_EQ(0, immutable_seeks);
469
+ if (GetParam()) {
470
+ ASSERT_EQ(1, immutable_seeks);
471
+ } else {
472
+ ASSERT_EQ(0, immutable_seeks);
473
+ }
443
474
  }
444
475
 
445
- TEST_F(DBTestTailingIterator, TailingIteratorGap) {
476
+ TEST_P(DBTestTailingIterator, TailingIteratorGap) {
446
477
  // level 1: [20, 25] [35, 40]
447
478
  // level 2: [10 - 15] [45 - 50]
448
479
  // level 3: [20, 30, 40]
@@ -455,7 +486,9 @@ TEST_F(DBTestTailingIterator, TailingIteratorGap) {
455
486
 
456
487
  ReadOptions read_options;
457
488
  read_options.tailing = true;
458
-
489
+ if (GetParam()) {
490
+ read_options.async_io = true;
491
+ }
459
492
  ASSERT_OK(Put(1, "20", "20"));
460
493
  ASSERT_OK(Put(1, "30", "30"));
461
494
  ASSERT_OK(Put(1, "40", "40"));
@@ -497,9 +530,12 @@ TEST_F(DBTestTailingIterator, TailingIteratorGap) {
497
530
  ASSERT_OK(it->status());
498
531
  }
499
532
 
500
- TEST_F(DBTestTailingIterator, SeekWithUpperBoundBug) {
533
+ TEST_P(DBTestTailingIterator, SeekWithUpperBoundBug) {
501
534
  ReadOptions read_options;
502
535
  read_options.tailing = true;
536
+ if (GetParam()) {
537
+ read_options.async_io = true;
538
+ }
503
539
  const Slice upper_bound("cc", 3);
504
540
  read_options.iterate_upper_bound = &upper_bound;
505
541
 
@@ -520,9 +556,12 @@ TEST_F(DBTestTailingIterator, SeekWithUpperBoundBug) {
520
556
  ASSERT_EQ(iter->key().ToString(), "aa");
521
557
  }
522
558
 
523
- TEST_F(DBTestTailingIterator, SeekToFirstWithUpperBoundBug) {
559
+ TEST_P(DBTestTailingIterator, SeekToFirstWithUpperBoundBug) {
524
560
  ReadOptions read_options;
525
561
  read_options.tailing = true;
562
+ if (GetParam()) {
563
+ read_options.async_io = true;
564
+ }
526
565
  const Slice upper_bound("cc", 3);
527
566
  read_options.iterate_upper_bound = &upper_bound;
528
567
 
@@ -483,6 +483,135 @@ TEST_F(DBTest, LevelLimitReopen) {
483
483
  }
484
484
  #endif // ROCKSDB_LITE
485
485
 
486
+ #ifndef ROCKSDB_LITE
487
+ TEST_F(DBTest, LevelReopenWithFIFO) {
488
+ const int kLevelCount = 4;
489
+ const int kKeyCount = 5;
490
+ const int kTotalSstFileCount = kLevelCount * kKeyCount;
491
+ const int kCF = 1;
492
+
493
+ Options options = CurrentOptions();
494
+ // Config level0_file_num_compaction_trigger to prevent L0 files being
495
+ // automatically compacted while we are constructing a LSM tree structure
496
+ // to test multi-level FIFO compaction.
497
+ options.level0_file_num_compaction_trigger = kKeyCount + 1;
498
+ CreateAndReopenWithCF({"pikachu"}, options);
499
+
500
+ // The expected number of files per level after each file creation.
501
+ const std::string expected_files_per_level[kLevelCount][kKeyCount] = {
502
+ {"0,0,0,1", "0,0,0,2", "0,0,0,3", "0,0,0,4", "0,0,0,5"},
503
+ {"0,0,1,5", "0,0,2,5", "0,0,3,5", "0,0,4,5", "0,0,5,5"},
504
+ {"0,1,5,5", "0,2,5,5", "0,3,5,5", "0,4,5,5", "0,5,5,5"},
505
+ {"1,5,5,5", "2,5,5,5", "3,5,5,5", "4,5,5,5", "5,5,5,5"},
506
+ };
507
+
508
+ const std::string expected_entries[kKeyCount][kLevelCount + 1] = {
509
+ {"[ ]", "[ a3 ]", "[ a2, a3 ]", "[ a1, a2, a3 ]", "[ a0, a1, a2, a3 ]"},
510
+ {"[ ]", "[ b3 ]", "[ b2, b3 ]", "[ b1, b2, b3 ]", "[ b0, b1, b2, b3 ]"},
511
+ {"[ ]", "[ c3 ]", "[ c2, c3 ]", "[ c1, c2, c3 ]", "[ c0, c1, c2, c3 ]"},
512
+ {"[ ]", "[ d3 ]", "[ d2, d3 ]", "[ d1, d2, d3 ]", "[ d0, d1, d2, d3 ]"},
513
+ {"[ ]", "[ e3 ]", "[ e2, e3 ]", "[ e1, e2, e3 ]", "[ e0, e1, e2, e3 ]"},
514
+ };
515
+
516
+ // The loop below creates the following LSM tree where each (k, v) pair
517
+ // represents a file that contains that entry. When a file is created,
518
+ // the db is reopend with FIFO compaction and verified the LSM tree
519
+ // structure is still the same.
520
+ //
521
+ // The resulting LSM tree will contain 5 different keys. Each key as
522
+ // 4 different versions, located in different level.
523
+ //
524
+ // L0: (e, e0) (d, d0) (c, c0) (b, b0) (a, a0)
525
+ // L1: (a, a1) (b, b1) (c, c1) (d, d1) (e, e1)
526
+ // L2: (a, a2) (b, b2) (c, c2) (d, d2) (e, e2)
527
+ // L3: (a, a3) (b, b3) (c, c3) (d, d3) (e, e3)
528
+ for (int l = 0; l < kLevelCount; ++l) {
529
+ int level = kLevelCount - 1 - l;
530
+ for (int p = 0; p < kKeyCount; ++p) {
531
+ std::string put_key = std::string(1, char('a' + p));
532
+ ASSERT_OK(Put(kCF, put_key, put_key + std::to_string(level)));
533
+ ASSERT_OK(Flush(kCF));
534
+ ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
535
+ for (int g = 0; g < kKeyCount; ++g) {
536
+ int entry_count = (p >= g) ? l + 1 : l;
537
+ std::string get_key = std::string(1, char('a' + g));
538
+ CheckAllEntriesWithFifoReopen(expected_entries[g][entry_count], get_key,
539
+ kCF, {"pikachu"}, options);
540
+ }
541
+ if (level != 0) {
542
+ MoveFilesToLevel(level, kCF);
543
+ for (int g = 0; g < kKeyCount; ++g) {
544
+ int entry_count = (p >= g) ? l + 1 : l;
545
+ std::string get_key = std::string(1, char('a' + g));
546
+ CheckAllEntriesWithFifoReopen(expected_entries[g][entry_count],
547
+ get_key, kCF, {"pikachu"}, options);
548
+ }
549
+ }
550
+ ASSERT_EQ(expected_files_per_level[l][p], FilesPerLevel(kCF));
551
+ }
552
+ }
553
+
554
+ // The expected number of sst files in each level after each FIFO compaction
555
+ // that deletes the oldest sst file.
556
+ const std::string expected_files_per_level_after_fifo[] = {
557
+ "5,5,5,4", "5,5,5,3", "5,5,5,2", "5,5,5,1", "5,5,5", "5,5,4", "5,5,3",
558
+ "5,5,2", "5,5,1", "5,5", "5,4", "5,3", "5,2", "5,1",
559
+ "5", "4", "3", "2", "1", "",
560
+ };
561
+
562
+ // The expected value entries of each key after each FIFO compaction.
563
+ // This verifies whether FIFO removes the file with the smallest key in non-L0
564
+ // files first then the oldest files in L0.
565
+ const std::string expected_entries_after_fifo[kKeyCount][kLevelCount + 1] = {
566
+ {"[ a0, a1, a2, a3 ]", "[ a0, a1, a2 ]", "[ a0, a1 ]", "[ a0 ]", "[ ]"},
567
+ {"[ b0, b1, b2, b3 ]", "[ b0, b1, b2 ]", "[ b0, b1 ]", "[ b0 ]", "[ ]"},
568
+ {"[ c0, c1, c2, c3 ]", "[ c0, c1, c2 ]", "[ c0, c1 ]", "[ c0 ]", "[ ]"},
569
+ {"[ d0, d1, d2, d3 ]", "[ d0, d1, d2 ]", "[ d0, d1 ]", "[ d0 ]", "[ ]"},
570
+ {"[ e0, e1, e2, e3 ]", "[ e0, e1, e2 ]", "[ e0, e1 ]", "[ e0 ]", "[ ]"},
571
+ };
572
+
573
+ // In the 2nd phase, we reopen the DB with FIFO compaction. In each reopen,
574
+ // we config max_table_files_size so that FIFO will remove exactly one file
575
+ // at a time upon compaction, and we will use it to verify whether the sst
576
+ // files are deleted in the correct order.
577
+ for (int i = 0; i < kTotalSstFileCount; ++i) {
578
+ uint64_t total_sst_files_size = 0;
579
+ ASSERT_TRUE(dbfull()->GetIntProperty(
580
+ handles_[1], "rocksdb.total-sst-files-size", &total_sst_files_size));
581
+ ASSERT_TRUE(total_sst_files_size > 0);
582
+
583
+ Options fifo_options(options);
584
+ fifo_options.compaction_style = kCompactionStyleFIFO;
585
+ options.create_if_missing = false;
586
+ fifo_options.max_open_files = -1;
587
+ fifo_options.disable_auto_compactions = false;
588
+ // Config max_table_files_size to be total_sst_files_size - 1 so that
589
+ // FIFO will delete one file.
590
+ fifo_options.compaction_options_fifo.max_table_files_size =
591
+ total_sst_files_size - 1;
592
+ ASSERT_OK(
593
+ TryReopenWithColumnFamilies({"default", "pikachu"}, fifo_options));
594
+ // For FIFO to pick a compaction
595
+ ASSERT_OK(dbfull()->TEST_CompactRange(0, nullptr, nullptr, handles_[1]));
596
+ ASSERT_OK(dbfull()->TEST_WaitForCompact(false));
597
+ for (int g = 0; g < kKeyCount; ++g) {
598
+ std::string get_key = std::string(1, char('a' + g));
599
+ int status_index = i / kKeyCount;
600
+ if ((i % kKeyCount) >= g) {
601
+ // If true, then it means the sst file containing the get_key in the
602
+ // current level has already been deleted, so we need to move the
603
+ // status_index for checking the expected value.
604
+ status_index++;
605
+ }
606
+ CheckAllEntriesWithFifoReopen(
607
+ expected_entries_after_fifo[g][status_index], get_key, kCF,
608
+ {"pikachu"}, options);
609
+ }
610
+ ASSERT_EQ(expected_files_per_level_after_fifo[i], FilesPerLevel(kCF));
611
+ }
612
+ }
613
+ #endif // !ROCKSDB_LITE
614
+
486
615
  TEST_F(DBTest, PutSingleDeleteGet) {
487
616
  do {
488
617
  CreateAndReopenWithCF({"pikachu"}, CurrentOptions());
@@ -668,7 +797,7 @@ TEST_F(DBTest, SingleDeletePutFlush) {
668
797
  ASSERT_OK(Flush(1));
669
798
 
670
799
  ASSERT_EQ("[ ]", AllEntriesFor("a", 1));
671
- // Skip FIFO and universal compaction beccaus they do not apply to the test
800
+ // Skip FIFO and universal compaction because they do not apply to the test
672
801
  // case. Skip MergePut because single delete does not get removed when it
673
802
  // encounters a merge.
674
803
  } while (ChangeOptions(kSkipFIFOCompaction | kSkipUniversalCompaction |
@@ -7211,6 +7340,46 @@ TEST_F(DBTest, MemoryUsageWithMaxWriteBufferSizeToMaintain) {
7211
7340
  }
7212
7341
  }
7213
7342
 
7343
+ TEST_F(DBTest, ShuttingDownNotBlockStalledWrites) {
7344
+ Options options = CurrentOptions();
7345
+ options.disable_auto_compactions = true;
7346
+ Reopen(options);
7347
+ Random rnd(403);
7348
+
7349
+ for (int i = 0; i < 20; i++) {
7350
+ ASSERT_OK(Put("key_" + std::to_string(i), rnd.RandomString(10)));
7351
+ ASSERT_OK(Flush());
7352
+ }
7353
+ ASSERT_EQ(GetSstFileCount(dbname_), 20);
7354
+
7355
+ // We need !disable_auto_compactions for writes to stall but also want to
7356
+ // delay compaction so stalled writes unblocked due to kShutdownInProgress. BG
7357
+ // compaction will first wait for the sync point
7358
+ // DBTest::ShuttingDownNotBlockStalledWrites. Then it waits extra 2 sec to
7359
+ // allow CancelAllBackgroundWork() to set shutting_down_.
7360
+ SyncPoint::GetInstance()->SetCallBack(
7361
+ "BackgroundCallCompaction:0",
7362
+ [&](void* /* arg */) { env_->SleepForMicroseconds(2 * 1000 * 1000); });
7363
+ SyncPoint::GetInstance()->LoadDependency(
7364
+ {{"DBImpl::DelayWrite:Wait", "DBTest::ShuttingDownNotBlockStalledWrites"},
7365
+ {"DBTest::ShuttingDownNotBlockStalledWrites",
7366
+ "BackgroundCallCompaction:0"}});
7367
+ SyncPoint::GetInstance()->EnableProcessing();
7368
+
7369
+ options.level0_stop_writes_trigger = 20;
7370
+ options.disable_auto_compactions = false;
7371
+ Reopen(options);
7372
+
7373
+ std::thread thd([&]() {
7374
+ Status s = Put("key_" + std::to_string(101), "101");
7375
+ ASSERT_EQ(s.code(), Status::kShutdownInProgress);
7376
+ });
7377
+
7378
+ TEST_SYNC_POINT("DBTest::ShuttingDownNotBlockStalledWrites");
7379
+ CancelAllBackgroundWork(db_, true);
7380
+
7381
+ thd.join();
7382
+ }
7214
7383
  #endif
7215
7384
 
7216
7385
  } // namespace ROCKSDB_NAMESPACE
@@ -2379,9 +2379,15 @@ TEST_F(DBTest2, MaxCompactionBytesTest) {
2379
2379
  }
2380
2380
  ASSERT_OK(dbfull()->TEST_WaitForCompact());
2381
2381
 
2382
- // Output files to L1 are cut to three pieces, according to
2383
- // options.max_compaction_bytes
2384
- ASSERT_EQ("0,3,8", FilesPerLevel(0));
2382
+ // Output files to L1 are cut to 4 pieces, according to
2383
+ // options.max_compaction_bytes (300K)
2384
+ // There are 8 files on L2 (grandparents level), each one is 100K. The first
2385
+ // file overlaps with a, b which max_compaction_bytes is less than 300K, the
2386
+ // second one overlaps with d, e, which is also less than 300K. Including any
2387
+ // extra grandparent file will make the future compaction larger than 300K.
2388
+ // L1: [ 1 ] [ 2 ] [ 3 ] [ 4 ]
2389
+ // L2: [a] [b] [c] [d] [e] [f] [g] [h]
2390
+ ASSERT_EQ("0,4,8", FilesPerLevel(0));
2385
2391
  }
2386
2392
 
2387
2393
  static void UniqueIdCallback(void* arg) {
@@ -963,6 +963,25 @@ std::string DBTestBase::Contents(int cf) {
963
963
  return result;
964
964
  }
965
965
 
966
+ void DBTestBase::CheckAllEntriesWithFifoReopen(
967
+ const std::string& expected_value, const Slice& user_key, int cf,
968
+ const std::vector<std::string>& cfs, const Options& options) {
969
+ ASSERT_EQ(AllEntriesFor(user_key, cf), expected_value);
970
+
971
+ std::vector<std::string> cfs_plus_default = cfs;
972
+ cfs_plus_default.insert(cfs_plus_default.begin(), kDefaultColumnFamilyName);
973
+
974
+ Options fifo_options(options);
975
+ fifo_options.compaction_style = kCompactionStyleFIFO;
976
+ fifo_options.max_open_files = -1;
977
+ fifo_options.disable_auto_compactions = true;
978
+ ASSERT_OK(TryReopenWithColumnFamilies(cfs_plus_default, fifo_options));
979
+ ASSERT_EQ(AllEntriesFor(user_key, cf), expected_value);
980
+
981
+ ASSERT_OK(TryReopenWithColumnFamilies(cfs_plus_default, options));
982
+ ASSERT_EQ(AllEntriesFor(user_key, cf), expected_value);
983
+ }
984
+
966
985
  std::string DBTestBase::AllEntriesFor(const Slice& user_key, int cf) {
967
986
  Arena arena;
968
987
  auto options = CurrentOptions();
@@ -49,6 +49,9 @@
49
49
  #include "util/string_util.h"
50
50
  #include "utilities/merge_operators.h"
51
51
 
52
+ // In case defined by Windows headers
53
+ #undef small
54
+
52
55
  namespace ROCKSDB_NAMESPACE {
53
56
  class MockEnv;
54
57
 
@@ -714,6 +717,16 @@ class FileTemperatureTestFS : public FileSystemWrapper {
714
717
  MutexLock lock(&mu_);
715
718
  requested_sst_file_temperatures_.emplace_back(number, opts.temperature);
716
719
  if (s.ok()) {
720
+ if (opts.temperature != Temperature::kUnknown) {
721
+ // Be extra picky and don't open if a wrong non-unknown temperature is
722
+ // provided
723
+ auto e = current_sst_file_temperatures_.find(number);
724
+ if (e != current_sst_file_temperatures_.end() &&
725
+ e->second != opts.temperature) {
726
+ result->reset();
727
+ return IOStatus::PathNotFound("Temperature mismatch on " + fname);
728
+ }
729
+ }
717
730
  *result = WrapWithTemperature<FSSequentialFileOwnerWrapper>(
718
731
  number, std::move(*result));
719
732
  }
@@ -733,6 +746,16 @@ class FileTemperatureTestFS : public FileSystemWrapper {
733
746
  MutexLock lock(&mu_);
734
747
  requested_sst_file_temperatures_.emplace_back(number, opts.temperature);
735
748
  if (s.ok()) {
749
+ if (opts.temperature != Temperature::kUnknown) {
750
+ // Be extra picky and don't open if a wrong non-unknown temperature is
751
+ // provided
752
+ auto e = current_sst_file_temperatures_.find(number);
753
+ if (e != current_sst_file_temperatures_.end() &&
754
+ e->second != opts.temperature) {
755
+ result->reset();
756
+ return IOStatus::PathNotFound("Temperature mismatch on " + fname);
757
+ }
758
+ }
736
759
  *result = WrapWithTemperature<FSRandomAccessFileOwnerWrapper>(
737
760
  number, std::move(*result));
738
761
  }
@@ -1219,6 +1242,15 @@ class DBTestBase : public testing::Test {
1219
1242
 
1220
1243
  std::string AllEntriesFor(const Slice& user_key, int cf = 0);
1221
1244
 
1245
+ // Similar to AllEntriesFor but this function also covers reopen with fifo.
1246
+ // Note that test cases with snapshots or entries in memtable should simply
1247
+ // use AllEntriesFor instead as snapshots and entries in memtable will
1248
+ // survive after db reopen.
1249
+ void CheckAllEntriesWithFifoReopen(const std::string& expected_value,
1250
+ const Slice& user_key, int cf,
1251
+ const std::vector<std::string>& cfs,
1252
+ const Options& options);
1253
+
1222
1254
  #ifndef ROCKSDB_LITE
1223
1255
  int NumSortedRuns(int cf = 0);
1224
1256