@nxtedition/rocksdb 9.0.0 → 9.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (304) hide show
  1. package/binding.cc +0 -21
  2. package/deps/rocksdb/rocksdb/CMakeLists.txt +13 -9
  3. package/deps/rocksdb/rocksdb/Makefile +15 -6
  4. package/deps/rocksdb/rocksdb/README.md +29 -0
  5. package/deps/rocksdb/rocksdb/TARGETS +17 -2
  6. package/deps/rocksdb/rocksdb/cache/cache.cc +35 -0
  7. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +74 -15
  8. package/deps/rocksdb/rocksdb/cache/cache_helpers.cc +2 -1
  9. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +4 -3
  10. package/deps/rocksdb/rocksdb/cache/cache_test.cc +16 -4
  11. package/deps/rocksdb/rocksdb/cache/charged_cache.cc +4 -2
  12. package/deps/rocksdb/rocksdb/cache/charged_cache.h +5 -3
  13. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +2024 -14
  14. package/deps/rocksdb/rocksdb/cache/clock_cache.h +349 -23
  15. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +126 -51
  16. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +9 -0
  17. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +182 -7
  18. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +31 -14
  19. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +0 -33
  20. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +293 -17
  21. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +21 -5
  22. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +10 -0
  23. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +8 -3
  24. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.cc +119 -0
  25. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.h +155 -0
  26. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +711 -0
  27. package/deps/rocksdb/rocksdb/cache/typed_cache.h +17 -11
  28. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +25 -11
  29. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +1 -0
  30. package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +2 -1
  31. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +2 -1
  32. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +8 -0
  33. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -3
  34. package/deps/rocksdb/rocksdb/db/builder.cc +3 -3
  35. package/deps/rocksdb/rocksdb/db/c.cc +64 -0
  36. package/deps/rocksdb/rocksdb/db/c_test.c +36 -0
  37. package/deps/rocksdb/rocksdb/db/column_family.cc +23 -15
  38. package/deps/rocksdb/rocksdb/db/column_family.h +9 -0
  39. package/deps/rocksdb/rocksdb/db/column_family_test.cc +101 -5
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +36 -23
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +24 -10
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +3 -5
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +42 -18
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +7 -3
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +4 -2
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +8 -6
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +1 -1
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +3 -0
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +61 -0
  50. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +146 -64
  51. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +13 -39
  52. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -0
  53. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +29 -7
  54. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +8 -3
  55. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +59 -0
  56. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +27 -3
  57. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +186 -2
  58. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1 -0
  59. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +17 -5
  60. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +519 -240
  61. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +104 -43
  62. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +169 -66
  63. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +2 -1
  64. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +12 -4
  65. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +50 -14
  66. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +85 -53
  67. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +3 -7
  68. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +99 -82
  69. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +4 -14
  70. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +24 -21
  71. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +6 -0
  72. package/deps/rocksdb/rocksdb/db/db_iter.cc +83 -55
  73. package/deps/rocksdb/rocksdb/db/db_iter.h +10 -2
  74. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +29 -0
  75. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +276 -21
  76. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +35 -0
  77. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +187 -1
  78. package/deps/rocksdb/rocksdb/db/db_options_test.cc +258 -0
  79. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +258 -0
  80. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +1 -0
  81. package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +52 -0
  82. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +74 -1
  83. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +22 -4
  84. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +3 -1
  85. package/deps/rocksdb/rocksdb/db/db_test.cc +134 -30
  86. package/deps/rocksdb/rocksdb/db/db_test2.cc +3 -0
  87. package/deps/rocksdb/rocksdb/db/db_test_util.cc +11 -6
  88. package/deps/rocksdb/rocksdb/db/db_test_util.h +5 -2
  89. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +1 -0
  90. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +12 -0
  91. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +337 -1
  92. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +2 -0
  93. package/deps/rocksdb/rocksdb/db/error_handler.cc +51 -34
  94. package/deps/rocksdb/rocksdb/db/error_handler.h +7 -6
  95. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +58 -0
  96. package/deps/rocksdb/rocksdb/db/flush_job.cc +17 -19
  97. package/deps/rocksdb/rocksdb/db/flush_job.h +3 -3
  98. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +2 -1
  99. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +2 -0
  100. package/deps/rocksdb/rocksdb/db/memtable.cc +18 -70
  101. package/deps/rocksdb/rocksdb/db/memtable_list.cc +1 -1
  102. package/deps/rocksdb/rocksdb/db/memtable_list.h +11 -1
  103. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +1 -1
  104. package/deps/rocksdb/rocksdb/db/merge_helper.cc +330 -115
  105. package/deps/rocksdb/rocksdb/db/merge_helper.h +100 -12
  106. package/deps/rocksdb/rocksdb/db/merge_operator.cc +82 -0
  107. package/deps/rocksdb/rocksdb/db/merge_test.cc +267 -0
  108. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +3 -0
  109. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +4 -4
  110. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +2 -0
  111. package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -0
  112. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +4 -0
  113. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +4 -0
  114. package/deps/rocksdb/rocksdb/db/repair.cc +4 -3
  115. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +454 -70
  116. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +105 -69
  117. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +83 -46
  118. package/deps/rocksdb/rocksdb/db/table_cache.cc +32 -19
  119. package/deps/rocksdb/rocksdb/db/table_cache.h +12 -6
  120. package/deps/rocksdb/rocksdb/db/version_edit.h +10 -4
  121. package/deps/rocksdb/rocksdb/db/version_set.cc +75 -73
  122. package/deps/rocksdb/rocksdb/db/version_set.h +8 -8
  123. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +2 -5
  124. package/deps/rocksdb/rocksdb/db/version_set_test.cc +22 -11
  125. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +525 -0
  126. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +6 -22
  127. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +0 -20
  128. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +0 -29
  129. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.cc +46 -0
  130. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.h +40 -0
  131. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper_test.cc +39 -0
  132. package/deps/rocksdb/rocksdb/db/write_batch.cc +44 -20
  133. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
  134. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +4 -4
  135. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +4 -7
  136. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +88 -10
  137. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +15 -10
  138. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +108 -58
  139. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +36 -14
  140. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +34 -0
  141. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +1 -1
  142. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +195 -130
  143. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +4 -2
  144. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +12 -12
  145. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.cc +51 -0
  146. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.h +27 -0
  147. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +3 -6
  148. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +14 -11
  149. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +44 -38
  150. package/deps/rocksdb/rocksdb/env/env.cc +5 -0
  151. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +1 -0
  152. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +50 -29
  153. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +32 -2
  154. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +513 -30
  155. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +8 -0
  156. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +38 -13
  157. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +14 -7
  158. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +42 -0
  159. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +65 -12
  160. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +11 -0
  161. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +26 -0
  162. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +37 -4
  163. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +2 -0
  164. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +1 -0
  165. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +8 -3
  166. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +10 -4
  167. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +4 -0
  168. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +1 -1
  169. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +55 -4
  170. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +45 -5
  171. package/deps/rocksdb/rocksdb/include/rocksdb/port_defs.h +4 -0
  172. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +9 -0
  173. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +79 -8
  174. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +16 -0
  175. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +35 -0
  176. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +15 -0
  177. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +14 -3
  178. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +2 -0
  179. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +7 -0
  180. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +6 -1
  181. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +2 -1
  182. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +9 -0
  183. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  184. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +53 -2
  185. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +0 -2
  186. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +2 -2
  187. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +1 -1
  188. package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
  189. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
  190. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +6 -0
  191. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +18 -7
  192. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +4 -0
  193. package/deps/rocksdb/rocksdb/options/customizable_test.cc +4 -0
  194. package/deps/rocksdb/rocksdb/options/db_options.cc +47 -2
  195. package/deps/rocksdb/rocksdb/options/db_options.h +3 -0
  196. package/deps/rocksdb/rocksdb/options/options_helper.cc +12 -0
  197. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +3 -1
  198. package/deps/rocksdb/rocksdb/options/options_test.cc +6 -1
  199. package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
  200. package/deps/rocksdb/rocksdb/port/README +10 -0
  201. package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
  202. package/deps/rocksdb/rocksdb/port/port_posix.cc +1 -1
  203. package/deps/rocksdb/rocksdb/port/port_posix.h +7 -4
  204. package/deps/rocksdb/rocksdb/port/stack_trace.cc +5 -0
  205. package/deps/rocksdb/rocksdb/port/win/port_win.h +5 -2
  206. package/deps/rocksdb/rocksdb/src.mk +7 -1
  207. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +1 -1
  208. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +3 -1
  209. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +275 -61
  210. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +96 -4
  211. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +179 -62
  212. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +35 -22
  213. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +12 -8
  214. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +14 -9
  215. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +3 -1
  216. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +26 -7
  217. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +15 -12
  218. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +10 -5
  219. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +39 -18
  220. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -6
  221. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +44 -26
  222. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +2 -1
  223. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +1 -1
  224. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +10 -8
  225. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +4 -2
  226. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +3 -2
  227. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +1 -1
  228. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +3 -2
  229. package/deps/rocksdb/rocksdb/table/block_fetcher.h +4 -0
  230. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +6 -2
  231. package/deps/rocksdb/rocksdb/table/get_context.cc +52 -89
  232. package/deps/rocksdb/rocksdb/table/get_context.h +12 -3
  233. package/deps/rocksdb/rocksdb/table/internal_iterator.h +11 -0
  234. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +29 -1
  235. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +12 -0
  236. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +33 -6
  237. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +1 -0
  238. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +2 -4
  239. package/deps/rocksdb/rocksdb/table/table_reader.h +6 -0
  240. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +31 -0
  241. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.cc +2 -1
  242. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim.py +3 -3
  243. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +26 -43
  244. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +213 -28
  245. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +36 -0
  246. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +0 -1
  247. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +33 -10
  248. package/deps/rocksdb/rocksdb/util/bloom_test.cc +32 -11
  249. package/deps/rocksdb/rocksdb/util/cast_util.h +10 -0
  250. package/deps/rocksdb/rocksdb/util/comparator.cc +26 -1
  251. package/deps/rocksdb/rocksdb/util/compression.h +9 -3
  252. package/deps/rocksdb/rocksdb/util/crc32c.cc +7 -1
  253. package/deps/rocksdb/rocksdb/util/distributed_mutex.h +1 -1
  254. package/deps/rocksdb/rocksdb/util/overload.h +23 -0
  255. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +53 -18
  256. package/deps/rocksdb/rocksdb/util/rate_limiter_impl.h +6 -1
  257. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +90 -19
  258. package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -0
  259. package/deps/rocksdb/rocksdb/util/status.cc +1 -0
  260. package/deps/rocksdb/rocksdb/util/string_util.cc +39 -0
  261. package/deps/rocksdb/rocksdb/util/string_util.h +10 -0
  262. package/deps/rocksdb/rocksdb/util/thread_operation.h +2 -0
  263. package/deps/rocksdb/rocksdb/util/udt_util.cc +42 -0
  264. package/deps/rocksdb/rocksdb/util/udt_util.h +19 -0
  265. package/deps/rocksdb/rocksdb/util/udt_util_test.cc +14 -0
  266. package/deps/rocksdb/rocksdb/util/xxhash.h +0 -3
  267. package/deps/rocksdb/rocksdb/util/xxph3.h +0 -4
  268. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +2 -1
  269. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +1 -0
  270. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +19 -15
  271. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +11 -7
  272. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +5 -0
  273. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +3 -0
  274. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +9 -0
  275. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +7 -4
  276. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +13 -0
  277. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +41 -0
  278. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +15 -9
  279. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +4 -0
  280. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +155 -0
  281. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +6 -0
  282. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +81 -1
  283. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +2 -6
  284. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +7 -5
  285. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +2 -1
  286. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +3 -2
  287. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +57 -27
  288. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +127 -120
  289. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +129 -59
  290. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +105 -8
  291. package/deps/rocksdb/rocksdb.gyp +4 -2
  292. package/index.js +0 -8
  293. package/package.json +1 -1
  294. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  295. package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +0 -7
  296. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +0 -29
  297. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +0 -29
  298. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +0 -29
  299. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +0 -33
  300. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +0 -29
  301. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +0 -29
  302. package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +0 -26
  303. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +0 -29
  304. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +0 -10
@@ -107,7 +107,10 @@ class DBIteratorTest : public DBIteratorBaseTest,
107
107
  read_callbacks_.push_back(
108
108
  std::unique_ptr<DummyReadCallback>(read_callback));
109
109
  }
110
- return dbfull()->NewIteratorImpl(read_options, cfd, seq, read_callback);
110
+ DBImpl* db_impl = dbfull();
111
+ SuperVersion* super_version = cfd->GetReferencedSuperVersion(db_impl);
112
+ return db_impl->NewIteratorImpl(read_options, cfd, super_version, seq,
113
+ read_callback);
111
114
  }
112
115
 
113
116
  private:
@@ -180,6 +183,7 @@ TEST_P(DBIteratorTest, NonBlockingIteration) {
180
183
  ASSERT_OK(iter->status());
181
184
  count++;
182
185
  }
186
+ ASSERT_OK(iter->status());
183
187
  ASSERT_EQ(count, 1);
184
188
  delete iter;
185
189
 
@@ -214,6 +218,7 @@ TEST_P(DBIteratorTest, NonBlockingIteration) {
214
218
  ASSERT_OK(iter->status());
215
219
  count++;
216
220
  }
221
+ ASSERT_OK(iter->status());
217
222
  ASSERT_EQ(count, 1);
218
223
  ASSERT_EQ(numopen, TestGetTickerCount(options, NO_FILE_OPENS));
219
224
  ASSERT_EQ(cache_added, TestGetTickerCount(options, BLOCK_CACHE_ADD));
@@ -867,6 +872,7 @@ TEST_P(DBIteratorTest, IterWithSnapshot) {
867
872
  }
868
873
  }
869
874
  db_->ReleaseSnapshot(snapshot);
875
+ ASSERT_OK(iter->status());
870
876
  delete iter;
871
877
  } while (ChangeOptions());
872
878
  }
@@ -1211,6 +1217,7 @@ TEST_P(DBIteratorTest, DBIteratorBoundOptimizationTest) {
1211
1217
 
1212
1218
  iter->Next();
1213
1219
  ASSERT_FALSE(iter->Valid());
1220
+ ASSERT_OK(iter->status());
1214
1221
  ASSERT_EQ(upper_bound_hits, 1);
1215
1222
  }
1216
1223
  }
@@ -1335,6 +1342,7 @@ TEST_P(DBIteratorTest, IndexWithFirstKey) {
1335
1342
 
1336
1343
  iter->Next();
1337
1344
  ASSERT_FALSE(iter->Valid());
1345
+ ASSERT_OK(iter->status());
1338
1346
  EXPECT_EQ(3, stats->getTickerCount(BLOCK_CACHE_DATA_HIT));
1339
1347
  EXPECT_EQ(7, stats->getTickerCount(BLOCK_CACHE_DATA_MISS));
1340
1348
  }
@@ -1576,6 +1584,7 @@ class DBIteratorTestForPinnedData : public DBIteratorTest {
1576
1584
  ASSERT_EQ("1", prop_value);
1577
1585
  all_keys.push_back(iter->key());
1578
1586
  }
1587
+ ASSERT_OK(iter->status());
1579
1588
  ASSERT_EQ(all_keys.size(), true_data.size());
1580
1589
 
1581
1590
  // Verify that all keys slices are valid (backward)
@@ -1679,7 +1688,7 @@ TEST_P(DBIteratorTest, PinnedDataIteratorMultipleFiles) {
1679
1688
  ASSERT_EQ(kv.first, data_iter->first);
1680
1689
  ASSERT_EQ(kv.second, data_iter->second);
1681
1690
  }
1682
-
1691
+ ASSERT_OK(iter->status());
1683
1692
  delete iter;
1684
1693
  }
1685
1694
 
@@ -1725,6 +1734,7 @@ TEST_P(DBIteratorTest, PinnedDataIteratorMergeOperator) {
1725
1734
  ASSERT_EQ("1", prop_value);
1726
1735
  results.emplace_back(iter->key(), iter->value().ToString());
1727
1736
  }
1737
+ ASSERT_OK(iter->status());
1728
1738
 
1729
1739
  ASSERT_EQ(results.size(), 1000);
1730
1740
  for (size_t i = 0; i < results.size(); i++) {
@@ -1782,6 +1792,7 @@ TEST_P(DBIteratorTest, PinnedDataIteratorReadAfterUpdate) {
1782
1792
  ASSERT_EQ("1", prop_value);
1783
1793
  results.emplace_back(iter->key(), iter->value().ToString());
1784
1794
  }
1795
+ ASSERT_OK(iter->status());
1785
1796
 
1786
1797
  auto data_iter = true_data.begin();
1787
1798
  for (size_t i = 0; i < results.size(); i++, data_iter++) {
@@ -2076,6 +2087,7 @@ TEST_P(DBIteratorTest, IterPrevKeyCrossingBlocksRandomized) {
2076
2087
  ASSERT_EQ(iter->value().ToString(), data_iter->second);
2077
2088
  data_iter++;
2078
2089
  }
2090
+ ASSERT_OK(iter->status());
2079
2091
  ASSERT_EQ(data_iter, true_data.rend());
2080
2092
 
2081
2093
  delete iter;
@@ -2133,6 +2145,7 @@ TEST_P(DBIteratorTest, IterPrevKeyCrossingBlocksRandomized) {
2133
2145
  entries_right++;
2134
2146
  data_iter++;
2135
2147
  }
2148
+ ASSERT_OK(iter->status());
2136
2149
  ASSERT_EQ(data_iter, true_data.rend());
2137
2150
 
2138
2151
  delete iter;
@@ -2172,6 +2185,7 @@ TEST_P(DBIteratorTest, IteratorWithLocalStatistics) {
2172
2185
  total_next++;
2173
2186
 
2174
2187
  if (!iter->Valid()) {
2188
+ EXPECT_OK(iter->status());
2175
2189
  break;
2176
2190
  }
2177
2191
  total_next_found++;
@@ -2199,6 +2213,7 @@ TEST_P(DBIteratorTest, IteratorWithLocalStatistics) {
2199
2213
  total_prev++;
2200
2214
 
2201
2215
  if (!iter->Valid()) {
2216
+ EXPECT_OK(iter->status());
2202
2217
  break;
2203
2218
  }
2204
2219
  total_prev_found++;
@@ -2413,37 +2428,98 @@ TEST_P(DBIteratorTest, Refresh) {
2413
2428
  ASSERT_EQ(iter->key().compare(Slice("x")), 0);
2414
2429
  iter->Next();
2415
2430
  ASSERT_FALSE(iter->Valid());
2431
+ ASSERT_OK(iter->status());
2416
2432
 
2417
2433
  iter.reset();
2418
2434
  }
2419
2435
 
2420
2436
  TEST_P(DBIteratorTest, RefreshWithSnapshot) {
2421
- ASSERT_OK(Put("x", "y"));
2437
+ // L1 file, uses LevelIterator internally
2438
+ ASSERT_OK(Put(Key(0), "val0"));
2439
+ ASSERT_OK(Put(Key(5), "val5"));
2440
+ ASSERT_OK(Flush());
2441
+ MoveFilesToLevel(1);
2442
+
2443
+ // L0 file, uses table iterator internally
2444
+ ASSERT_OK(Put(Key(1), "val1"));
2445
+ ASSERT_OK(Put(Key(4), "val4"));
2446
+ ASSERT_OK(Flush());
2447
+
2448
+ // Memtable
2449
+ ASSERT_OK(Put(Key(2), "val2"));
2450
+ ASSERT_OK(Put(Key(3), "val3"));
2422
2451
  const Snapshot* snapshot = db_->GetSnapshot();
2452
+ ASSERT_OK(Put(Key(2), "new val"));
2453
+ ASSERT_OK(db_->DeleteRange(WriteOptions(), db_->DefaultColumnFamily(), Key(4),
2454
+ Key(7)));
2455
+ const Snapshot* snapshot2 = db_->GetSnapshot();
2456
+
2457
+ ASSERT_EQ(1, NumTableFilesAtLevel(1));
2458
+ ASSERT_EQ(1, NumTableFilesAtLevel(0));
2459
+
2423
2460
  ReadOptions options;
2424
2461
  options.snapshot = snapshot;
2425
2462
  Iterator* iter = NewIterator(options);
2463
+ ASSERT_OK(Put(Key(6), "val6"));
2426
2464
  ASSERT_OK(iter->status());
2427
2465
 
2428
- iter->Seek(Slice("a"));
2429
- ASSERT_TRUE(iter->Valid());
2430
- ASSERT_EQ(iter->key().compare(Slice("x")), 0);
2431
- iter->Next();
2432
- ASSERT_FALSE(iter->Valid());
2466
+ auto verify_iter = [&](int start, int end, bool new_key2 = false) {
2467
+ for (int i = start; i < end; ++i) {
2468
+ ASSERT_OK(iter->status());
2469
+ ASSERT_TRUE(iter->Valid());
2470
+ ASSERT_EQ(iter->key(), Key(i));
2471
+ if (i == 2 && new_key2) {
2472
+ ASSERT_EQ(iter->value(), "new val");
2473
+ } else {
2474
+ ASSERT_EQ(iter->value(), "val" + std::to_string(i));
2475
+ }
2476
+ iter->Next();
2477
+ }
2478
+ };
2433
2479
 
2434
- ASSERT_OK(Put("c", "d"));
2480
+ for (int j = 0; j < 2; j++) {
2481
+ iter->Seek(Key(1));
2482
+ verify_iter(1, 3);
2483
+ // Refresh to same snapshot
2484
+ ASSERT_OK(iter->Refresh(snapshot));
2485
+ ASSERT_TRUE(!iter->Valid() && iter->status().ok());
2486
+ iter->Seek(Key(3));
2487
+ verify_iter(3, 6);
2488
+ ASSERT_TRUE(!iter->Valid() && iter->status().ok());
2489
+
2490
+ // Refresh to a newer snapshot
2491
+ ASSERT_OK(iter->Refresh(snapshot2));
2492
+ ASSERT_TRUE(!iter->Valid() && iter->status().ok());
2493
+ iter->SeekToFirst();
2494
+ verify_iter(0, 4, /*new_key2=*/true);
2495
+ ASSERT_TRUE(!iter->Valid() && iter->status().ok());
2496
+
2497
+ // Refresh to an older snapshot
2498
+ ASSERT_OK(iter->Refresh(snapshot));
2499
+ ASSERT_TRUE(!iter->Valid() && iter->status().ok());
2500
+ iter->Seek(Key(3));
2501
+ verify_iter(3, 6);
2502
+ ASSERT_TRUE(!iter->Valid() && iter->status().ok());
2503
+
2504
+ // Refresh to no snapshot
2505
+ ASSERT_OK(iter->Refresh());
2506
+ ASSERT_TRUE(!iter->Valid() && iter->status().ok());
2507
+ iter->Seek(Key(2));
2508
+ verify_iter(2, 4, /*new_key2=*/true);
2509
+ verify_iter(6, 7);
2510
+ ASSERT_TRUE(!iter->Valid() && iter->status().ok());
2511
+
2512
+ // Change LSM shape, new SuperVersion is created.
2513
+ ASSERT_OK(Flush());
2435
2514
 
2436
- iter->Seek(Slice("a"));
2437
- ASSERT_TRUE(iter->Valid());
2438
- ASSERT_EQ(iter->key().compare(Slice("x")), 0);
2439
- iter->Next();
2440
- ASSERT_FALSE(iter->Valid());
2515
+ // Refresh back to original snapshot
2516
+ ASSERT_OK(iter->Refresh(snapshot));
2517
+ }
2441
2518
 
2442
- ASSERT_OK(iter->status());
2443
- Status s = iter->Refresh();
2444
- ASSERT_TRUE(s.IsNotSupported());
2445
- db_->ReleaseSnapshot(snapshot);
2446
2519
  delete iter;
2520
+ db_->ReleaseSnapshot(snapshot);
2521
+ db_->ReleaseSnapshot(snapshot2);
2522
+ ASSERT_OK(db_->Close());
2447
2523
  }
2448
2524
 
2449
2525
  TEST_P(DBIteratorTest, CreationFailure) {
@@ -2536,6 +2612,7 @@ TEST_P(DBIteratorTest, TableFilter) {
2536
2612
  ASSERT_EQ(IterStatus(iter), "f->6");
2537
2613
  iter->Next();
2538
2614
  ASSERT_FALSE(iter->Valid());
2615
+ ASSERT_OK(iter->status());
2539
2616
  ASSERT_TRUE(unseen.empty());
2540
2617
  delete iter;
2541
2618
  }
@@ -2558,6 +2635,7 @@ TEST_P(DBIteratorTest, TableFilter) {
2558
2635
  ASSERT_EQ(IterStatus(iter), "f->6");
2559
2636
  iter->Next();
2560
2637
  ASSERT_FALSE(iter->Valid());
2638
+ ASSERT_OK(iter->status());
2561
2639
  delete iter;
2562
2640
  }
2563
2641
  }
@@ -2642,6 +2720,7 @@ TEST_P(DBIteratorTest, SkipStatistics) {
2642
2720
  ASSERT_OK(iter->status());
2643
2721
  count++;
2644
2722
  }
2723
+ ASSERT_OK(iter->status());
2645
2724
  ASSERT_EQ(count, 3);
2646
2725
  delete iter;
2647
2726
  skip_count += 8; // Same as above, but in reverse order
@@ -2677,6 +2756,7 @@ TEST_P(DBIteratorTest, SkipStatistics) {
2677
2756
  ASSERT_OK(iter->status());
2678
2757
  count++;
2679
2758
  }
2759
+ ASSERT_OK(iter->status());
2680
2760
  ASSERT_EQ(count, 2);
2681
2761
  delete iter;
2682
2762
  // 3 deletes + 3 original keys + lower sequence of "a"
@@ -3130,8 +3210,10 @@ TEST_F(DBIteratorWithReadCallbackTest, ReadCallback) {
3130
3210
  static_cast_with_check<ColumnFamilyHandleImpl>(db_->DefaultColumnFamily())
3131
3211
  ->cfd();
3132
3212
  // The iterator are suppose to see data before seq1.
3133
- Iterator* iter =
3134
- dbfull()->NewIteratorImpl(ReadOptions(), cfd, seq2, &callback1);
3213
+ DBImpl* db_impl = dbfull();
3214
+ SuperVersion* super_version = cfd->GetReferencedSuperVersion(db_impl);
3215
+ Iterator* iter = db_impl->NewIteratorImpl(ReadOptions(), cfd, super_version,
3216
+ seq2, &callback1);
3135
3217
 
3136
3218
  // Seek
3137
3219
  // The latest value of "foo" before seq1 is "v3"
@@ -3209,7 +3291,9 @@ TEST_F(DBIteratorWithReadCallbackTest, ReadCallback) {
3209
3291
  SequenceNumber seq4 = db_->GetLatestSequenceNumber();
3210
3292
 
3211
3293
  // The iterator is suppose to see data before seq3.
3212
- iter = dbfull()->NewIteratorImpl(ReadOptions(), cfd, seq4, &callback2);
3294
+ super_version = cfd->GetReferencedSuperVersion(db_impl);
3295
+ iter = db_impl->NewIteratorImpl(ReadOptions(), cfd, super_version, seq4,
3296
+ &callback2);
3213
3297
  // Seek to "z", which is visible.
3214
3298
  iter->Seek("z");
3215
3299
  ASSERT_TRUE(iter->Valid());
@@ -3255,6 +3339,7 @@ TEST_F(DBIteratorTest, BackwardIterationOnInplaceUpdateMemtable) {
3255
3339
  for (iter->SeekToLast(); iter->Valid(); iter->Prev()) {
3256
3340
  ++count;
3257
3341
  }
3342
+ ASSERT_OK(iter->status());
3258
3343
  ASSERT_EQ(kNumKeys, count);
3259
3344
  }
3260
3345
 
@@ -3295,6 +3380,176 @@ TEST_F(DBIteratorTest, IteratorRefreshReturnSV) {
3295
3380
  Close();
3296
3381
  }
3297
3382
 
3383
+ TEST_F(DBIteratorTest, ErrorWhenReadFile) {
3384
+ // This is to test a bug that is fixed in
3385
+ // https://github.com/facebook/rocksdb/pull/11782.
3386
+ //
3387
+ // Ingest error when reading from a file, and
3388
+ // see if Iterator handles it correctly.
3389
+ Options opts = CurrentOptions();
3390
+ opts.num_levels = 7;
3391
+ opts.compression = kNoCompression;
3392
+ BlockBasedTableOptions bbto;
3393
+ // Always do I/O
3394
+ bbto.no_block_cache = true;
3395
+ opts.table_factory.reset(NewBlockBasedTableFactory(bbto));
3396
+ DestroyAndReopen(opts);
3397
+
3398
+ // Set up LSM
3399
+ // L5: F1 [key0, key99], F2 [key100, key199]
3400
+ // L6: F3 [key50, key149]
3401
+ Random rnd(301);
3402
+ const int kValLen = 100;
3403
+ for (int i = 50; i < 150; ++i) {
3404
+ ASSERT_OK(Put(Key(i), rnd.RandomString(kValLen)));
3405
+ }
3406
+ ASSERT_OK(Flush());
3407
+ MoveFilesToLevel(6);
3408
+
3409
+ std::vector<std::string> values;
3410
+ for (int i = 0; i < 100; ++i) {
3411
+ values.emplace_back(rnd.RandomString(kValLen));
3412
+ ASSERT_OK(Put(Key(i), values.back()));
3413
+ }
3414
+ ASSERT_OK(Flush());
3415
+ MoveFilesToLevel(5);
3416
+
3417
+ for (int i = 100; i < 200; ++i) {
3418
+ values.emplace_back(rnd.RandomString(kValLen));
3419
+ ASSERT_OK(Put(Key(i), values.back()));
3420
+ }
3421
+ ASSERT_OK(Flush());
3422
+ MoveFilesToLevel(5);
3423
+
3424
+ ASSERT_EQ(2, NumTableFilesAtLevel(5));
3425
+ ASSERT_EQ(1, NumTableFilesAtLevel(6));
3426
+
3427
+ std::vector<LiveFileMetaData> files;
3428
+ db_->GetLiveFilesMetaData(&files);
3429
+ // Get file names for F1, F2 and F3.
3430
+ // These are file names, not full paths.
3431
+ std::string f1, f2, f3;
3432
+ for (auto& file_meta : files) {
3433
+ if (file_meta.level == 6) {
3434
+ f3 = file_meta.name;
3435
+ } else {
3436
+ if (file_meta.smallestkey == Key(0)) {
3437
+ f1 = file_meta.name;
3438
+ } else {
3439
+ f2 = file_meta.name;
3440
+ }
3441
+ }
3442
+ }
3443
+ ASSERT_TRUE(!f1.empty());
3444
+ ASSERT_TRUE(!f2.empty());
3445
+ ASSERT_TRUE(!f3.empty());
3446
+
3447
+ std::string error_file;
3448
+ SyncPoint::GetInstance()->SetCallBack(
3449
+ "RandomAccessFileReader::Read::BeforeReturn",
3450
+ [&error_file](void* io_s_ptr) {
3451
+ auto p =
3452
+ reinterpret_cast<std::pair<std::string*, IOStatus*>*>(io_s_ptr);
3453
+ if (p->first->find(error_file) != std::string::npos) {
3454
+ *p->second = IOStatus::IOError();
3455
+ p->second->SetRetryable(true);
3456
+ }
3457
+ });
3458
+ SyncPoint::GetInstance()->EnableProcessing();
3459
+ // Error reading F1
3460
+ error_file = f1;
3461
+ std::unique_ptr<Iterator> iter{db_->NewIterator(ReadOptions())};
3462
+ iter->SeekToFirst();
3463
+ ASSERT_NOK(iter->status());
3464
+ ASSERT_TRUE(iter->status().IsIOError());
3465
+ // This does not require reading the first block.
3466
+ iter->Seek(Key(90));
3467
+ ASSERT_OK(iter->status());
3468
+ ASSERT_TRUE(iter->Valid());
3469
+ ASSERT_EQ(iter->value(), values[90]);
3470
+ // iter has ok status before this Seek.
3471
+ iter->Seek(Key(1));
3472
+ ASSERT_NOK(iter->status());
3473
+ ASSERT_TRUE(iter->status().IsIOError());
3474
+
3475
+ // Error reading F2
3476
+ error_file = f2;
3477
+ iter.reset(db_->NewIterator(ReadOptions()));
3478
+ iter->Seek(Key(99));
3479
+ ASSERT_OK(iter->status());
3480
+ ASSERT_TRUE(iter->Valid());
3481
+ ASSERT_EQ(iter->value(), values[99]);
3482
+ // Need to read from F2.
3483
+ iter->Next();
3484
+ ASSERT_NOK(iter->status());
3485
+ ASSERT_TRUE(iter->status().IsIOError());
3486
+ iter->Seek(Key(190));
3487
+ ASSERT_OK(iter->status());
3488
+ ASSERT_TRUE(iter->Valid());
3489
+ ASSERT_EQ(iter->value(), values[190]);
3490
+ // Seek for first key of F2.
3491
+ iter->Seek(Key(100));
3492
+ ASSERT_NOK(iter->status());
3493
+ ASSERT_TRUE(iter->status().IsIOError());
3494
+ iter->SeekToLast();
3495
+ ASSERT_OK(iter->status());
3496
+ ASSERT_TRUE(iter->Valid());
3497
+ ASSERT_EQ(iter->value(), values[199]);
3498
+ // SeekForPrev for first key of F2.
3499
+ iter->SeekForPrev(Key(100));
3500
+ ASSERT_NOK(iter->status());
3501
+ ASSERT_TRUE(iter->status().IsIOError());
3502
+ // Does not read first block (offset 0).
3503
+ iter->SeekForPrev(Key(98));
3504
+ ASSERT_OK(iter->status());
3505
+ ASSERT_TRUE(iter->Valid());
3506
+ ASSERT_EQ(iter->value(), values[98]);
3507
+
3508
+ // Error reading F3
3509
+ error_file = f3;
3510
+ iter.reset(db_->NewIterator(ReadOptions()));
3511
+ iter->SeekToFirst();
3512
+ ASSERT_NOK(iter->status());
3513
+ ASSERT_TRUE(iter->status().IsIOError());
3514
+ iter->Seek(Key(50));
3515
+ ASSERT_NOK(iter->status());
3516
+ ASSERT_TRUE(iter->status().IsIOError());
3517
+ iter->SeekForPrev(Key(50));
3518
+ ASSERT_NOK(iter->status());
3519
+ ASSERT_TRUE(iter->status().IsIOError());
3520
+ // Does not read file 3
3521
+ iter->Seek(Key(150));
3522
+ ASSERT_OK(iter->status());
3523
+ ASSERT_TRUE(iter->Valid());
3524
+ ASSERT_EQ(iter->value(), values[150]);
3525
+
3526
+ // Test when file read error occurs during Prev().
3527
+ // This requires returning an error when reading near the end of a file
3528
+ // instead of offset 0.
3529
+ SyncPoint::GetInstance()->ClearAllCallBacks();
3530
+ SyncPoint::GetInstance()->SetCallBack(
3531
+ "RandomAccessFileReader::Read::AnyOffset", [&f1](void* pair_ptr) {
3532
+ auto p =
3533
+ reinterpret_cast<std::pair<std::string*, IOStatus*>*>(pair_ptr);
3534
+ if (p->first->find(f1) != std::string::npos) {
3535
+ *p->second = IOStatus::IOError();
3536
+ p->second->SetRetryable(true);
3537
+ }
3538
+ });
3539
+ iter->SeekForPrev(Key(101));
3540
+ ASSERT_OK(iter->status());
3541
+ ASSERT_TRUE(iter->Valid());
3542
+ ASSERT_EQ(iter->value(), values[101]);
3543
+ // DBIter will not stop at Key(100) since it needs
3544
+ // to make sure the key it returns has the max sequence number for Key(100).
3545
+ // So it will call MergingIterator::Prev() which will read F1.
3546
+ iter->Prev();
3547
+ ASSERT_NOK(iter->status());
3548
+ ASSERT_TRUE(iter->status().IsIOError());
3549
+ SyncPoint::GetInstance()->DisableProcessing();
3550
+ iter->Reset();
3551
+ }
3552
+
3298
3553
  } // namespace ROCKSDB_NAMESPACE
3299
3554
 
3300
3555
  int main(int argc, char** argv) {
@@ -145,6 +145,41 @@ TEST_F(DBTestXactLogIterator, TransactionLogIteratorRace) {
145
145
  } while (ChangeCompactOptions());
146
146
  }
147
147
  }
148
+
149
+ TEST_F(DBTestXactLogIterator, TransactionLogIteratorCheckWhenArchive) {
150
+ do {
151
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->ClearTrace();
152
+ Options options = OptionsForLogIterTest();
153
+ DestroyAndReopen(options);
154
+ ColumnFamilyHandle* cf;
155
+ auto s = dbfull()->CreateColumnFamily(ColumnFamilyOptions(), "CF", &cf);
156
+ ASSERT_TRUE(s.ok());
157
+
158
+ ASSERT_OK(dbfull()->Put(WriteOptions(), cf, "key1", DummyString(1024)));
159
+
160
+ ASSERT_OK(dbfull()->Put(WriteOptions(), "key2", DummyString(1024)));
161
+
162
+ ASSERT_OK(dbfull()->Flush(FlushOptions()));
163
+
164
+ ASSERT_OK(dbfull()->Put(WriteOptions(), "key3", DummyString(1024)));
165
+
166
+ ASSERT_OK(dbfull()->Flush(FlushOptions()));
167
+
168
+ ASSERT_OK(dbfull()->Put(WriteOptions(), "key4", DummyString(1024)));
169
+ ASSERT_OK(dbfull()->Flush(FlushOptions()));
170
+
171
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->SetCallBack(
172
+ "WalManager::PurgeObsoleteFiles:1", [&](void*) {
173
+ auto iter = OpenTransactionLogIter(0);
174
+ ExpectRecords(4, iter);
175
+ });
176
+
177
+ ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
178
+ ASSERT_OK(dbfull()->Flush(FlushOptions(), cf));
179
+
180
+ delete cf;
181
+ } while (ChangeCompactOptions());
182
+ }
148
183
  #endif
149
184
 
150
185
  TEST_F(DBTestXactLogIterator, TransactionLogIteratorStallAtLastRecord) {