@nxtedition/rocksdb 8.2.8 → 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 (483) hide show
  1. package/binding.cc +0 -21
  2. package/deps/rocksdb/rocksdb/CMakeLists.txt +20 -10
  3. package/deps/rocksdb/rocksdb/Makefile +37 -25
  4. package/deps/rocksdb/rocksdb/README.md +29 -0
  5. package/deps/rocksdb/rocksdb/TARGETS +25 -2
  6. package/deps/rocksdb/rocksdb/cache/cache.cc +35 -0
  7. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +229 -74
  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 +58 -95
  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 +2683 -496
  14. package/deps/rocksdb/rocksdb/cache/clock_cache.h +580 -159
  15. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +145 -42
  16. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +20 -1
  17. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +391 -17
  18. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +7 -5
  19. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +309 -212
  20. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +0 -32
  21. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +439 -12
  22. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +44 -2
  23. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +11 -1
  24. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +16 -3
  25. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.cc +119 -0
  26. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.h +155 -0
  27. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +711 -0
  28. package/deps/rocksdb/rocksdb/cache/typed_cache.h +17 -11
  29. package/deps/rocksdb/rocksdb/crash_test.mk +14 -0
  30. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +28 -12
  31. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +1 -0
  32. package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +2 -1
  33. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -1
  34. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -1
  35. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
  36. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +1 -1
  37. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +20 -22
  38. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +1 -2
  39. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -1
  40. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +2 -3
  41. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +1 -1
  42. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +8 -0
  43. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -3
  44. package/deps/rocksdb/rocksdb/db/builder.cc +35 -10
  45. package/deps/rocksdb/rocksdb/db/c.cc +233 -6
  46. package/deps/rocksdb/rocksdb/db/c_test.c +140 -6
  47. package/deps/rocksdb/rocksdb/db/column_family.cc +110 -51
  48. package/deps/rocksdb/rocksdb/db/column_family.h +34 -2
  49. package/deps/rocksdb/rocksdb/db/column_family_test.cc +314 -7
  50. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -1
  51. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +106 -23
  52. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +47 -9
  53. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +10 -11
  54. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -6
  55. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +2 -2
  56. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +148 -60
  57. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +22 -7
  58. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -0
  59. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +8 -4
  60. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +33 -23
  61. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +14 -5
  62. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -11
  63. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +3 -0
  64. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +90 -4
  65. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +170 -95
  66. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +3 -1
  67. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +32 -58
  68. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +3 -1
  69. package/deps/rocksdb/rocksdb/db/convenience.cc +20 -3
  70. package/deps/rocksdb/rocksdb/db/convenience_impl.h +15 -0
  71. package/deps/rocksdb/rocksdb/db/corruption_test.cc +17 -0
  72. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
  73. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +46 -10
  74. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +13 -3
  75. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +74 -15
  76. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +27 -3
  77. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +850 -44
  78. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +2 -29
  79. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +275 -1
  80. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +52 -19
  81. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +6 -5
  82. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +733 -320
  83. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +155 -66
  84. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +516 -155
  85. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +8 -4
  86. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +2 -1
  87. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +17 -4
  88. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +100 -35
  89. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +95 -50
  90. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +13 -9
  91. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +136 -79
  92. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +6 -95
  93. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +31 -22
  94. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +6 -0
  95. package/deps/rocksdb/rocksdb/db/db_iter.cc +85 -57
  96. package/deps/rocksdb/rocksdb/db/db_iter.h +11 -2
  97. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +29 -0
  98. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +276 -21
  99. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +35 -0
  100. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +4 -11
  101. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +193 -7
  102. package/deps/rocksdb/rocksdb/db/db_options_test.cc +294 -26
  103. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +26 -36
  104. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +364 -0
  105. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +13 -3
  106. package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +52 -0
  107. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +74 -1
  108. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +22 -4
  109. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +1 -1
  110. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +1 -0
  111. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +282 -167
  112. package/deps/rocksdb/rocksdb/db/db_test.cc +180 -49
  113. package/deps/rocksdb/rocksdb/db/db_test2.cc +84 -12
  114. package/deps/rocksdb/rocksdb/db/db_test_util.cc +25 -12
  115. package/deps/rocksdb/rocksdb/db/db_test_util.h +45 -2
  116. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +14 -1
  117. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +245 -0
  118. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +480 -1
  119. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +6 -6
  120. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -2
  121. package/deps/rocksdb/rocksdb/db/dbformat.cc +36 -0
  122. package/deps/rocksdb/rocksdb/db/dbformat.h +169 -20
  123. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +129 -0
  124. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +2 -0
  125. package/deps/rocksdb/rocksdb/db/error_handler.cc +67 -34
  126. package/deps/rocksdb/rocksdb/db/error_handler.h +13 -9
  127. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
  128. package/deps/rocksdb/rocksdb/db/event_helpers.cc +4 -0
  129. package/deps/rocksdb/rocksdb/db/experimental.cc +2 -1
  130. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +4 -4
  131. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +17 -8
  132. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +144 -4
  133. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -1
  134. package/deps/rocksdb/rocksdb/db/file_indexer.cc +2 -4
  135. package/deps/rocksdb/rocksdb/db/flush_job.cc +105 -17
  136. package/deps/rocksdb/rocksdb/db/flush_job.h +27 -4
  137. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +90 -12
  138. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +2 -3
  139. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +159 -91
  140. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +19 -10
  141. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +143 -0
  142. package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -1
  143. package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
  144. package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -1
  145. package/deps/rocksdb/rocksdb/db/log_reader.h +3 -2
  146. package/deps/rocksdb/rocksdb/db/log_test.cc +17 -21
  147. package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
  148. package/deps/rocksdb/rocksdb/db/log_writer.h +3 -2
  149. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +6 -3
  150. package/deps/rocksdb/rocksdb/db/memtable.cc +70 -83
  151. package/deps/rocksdb/rocksdb/db/memtable.h +45 -1
  152. package/deps/rocksdb/rocksdb/db/memtable_list.cc +45 -11
  153. package/deps/rocksdb/rocksdb/db/memtable_list.h +43 -2
  154. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +91 -5
  155. package/deps/rocksdb/rocksdb/db/merge_helper.cc +330 -115
  156. package/deps/rocksdb/rocksdb/db/merge_helper.h +100 -12
  157. package/deps/rocksdb/rocksdb/db/merge_operator.cc +82 -0
  158. package/deps/rocksdb/rocksdb/db/merge_test.cc +267 -0
  159. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +5 -2
  160. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +4 -4
  161. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +3 -0
  162. package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -0
  163. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +4 -0
  164. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +4 -0
  165. package/deps/rocksdb/rocksdb/db/repair.cc +25 -7
  166. package/deps/rocksdb/rocksdb/db/repair_test.cc +143 -2
  167. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +459 -74
  168. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +105 -69
  169. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +83 -46
  170. package/deps/rocksdb/rocksdb/db/table_cache.cc +76 -54
  171. package/deps/rocksdb/rocksdb/db/table_cache.h +18 -12
  172. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
  173. package/deps/rocksdb/rocksdb/db/version_builder.cc +0 -1
  174. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +236 -204
  175. package/deps/rocksdb/rocksdb/db/version_edit.cc +66 -4
  176. package/deps/rocksdb/rocksdb/db/version_edit.h +58 -10
  177. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +80 -8
  178. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +12 -0
  179. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +86 -17
  180. package/deps/rocksdb/rocksdb/db/version_set.cc +207 -110
  181. package/deps/rocksdb/rocksdb/db/version_set.h +36 -15
  182. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +2 -5
  183. package/deps/rocksdb/rocksdb/db/version_set_test.cc +47 -26
  184. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +525 -0
  185. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +6 -22
  186. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +0 -20
  187. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +0 -29
  188. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.cc +46 -0
  189. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.h +40 -0
  190. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper_test.cc +39 -0
  191. package/deps/rocksdb/rocksdb/db/write_batch.cc +55 -20
  192. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +3 -0
  193. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +16 -0
  194. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
  195. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +4 -4
  196. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +4 -7
  197. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +88 -10
  198. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +37 -13
  199. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +110 -58
  200. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +42 -0
  201. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +68 -17
  202. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +34 -0
  203. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +8 -1
  204. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +429 -237
  205. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +13 -6
  206. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +21 -14
  207. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.cc +51 -0
  208. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.h +27 -0
  209. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +3 -6
  210. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +2 -0
  211. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +29 -38
  212. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +302 -101
  213. package/deps/rocksdb/rocksdb/env/env.cc +6 -2
  214. package/deps/rocksdb/rocksdb/env/env_encryption.cc +11 -165
  215. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +0 -17
  216. package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -2
  217. package/deps/rocksdb/rocksdb/env/env_test.cc +86 -2
  218. package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
  219. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +79 -0
  220. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +34 -0
  221. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -0
  222. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +15 -4
  223. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +100 -70
  224. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +64 -18
  225. package/deps/rocksdb/rocksdb/file/file_util.cc +10 -5
  226. package/deps/rocksdb/rocksdb/file/file_util.h +13 -1
  227. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1225 -97
  228. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +72 -33
  229. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -16
  230. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +23 -12
  231. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +3 -0
  232. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +40 -14
  233. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +163 -91
  234. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +112 -2
  235. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +108 -16
  236. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +11 -0
  237. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -0
  238. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +42 -2
  239. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +1 -1
  240. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +92 -12
  241. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +34 -4
  242. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +9 -109
  243. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +91 -13
  244. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +8 -3
  245. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +10 -4
  246. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +7 -0
  247. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +1 -1
  248. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +55 -4
  249. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +130 -22
  250. package/deps/rocksdb/rocksdb/include/rocksdb/port_defs.h +4 -0
  251. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +9 -0
  252. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +92 -9
  253. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +2 -1
  254. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +5 -1
  255. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +37 -2
  256. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +35 -0
  257. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +15 -0
  258. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +7 -1
  259. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +20 -3
  260. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +7 -0
  261. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +7 -0
  262. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +6 -1
  263. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +33 -2
  264. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +2 -1
  265. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +14 -0
  266. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +42 -2
  267. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +0 -3
  268. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  269. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +53 -2
  270. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -2
  271. package/deps/rocksdb/rocksdb/memory/arena_test.cc +18 -11
  272. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +4 -3
  273. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +1 -1
  274. package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
  275. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +69 -34
  276. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
  277. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +22 -1
  278. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +18 -7
  279. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +14 -0
  280. package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
  281. package/deps/rocksdb/rocksdb/options/cf_options.h +10 -2
  282. package/deps/rocksdb/rocksdb/options/customizable_test.cc +6 -1
  283. package/deps/rocksdb/rocksdb/options/db_options.cc +54 -2
  284. package/deps/rocksdb/rocksdb/options/db_options.h +4 -0
  285. package/deps/rocksdb/rocksdb/options/options.cc +15 -1
  286. package/deps/rocksdb/rocksdb/options/options_helper.cc +18 -0
  287. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +14 -4
  288. package/deps/rocksdb/rocksdb/options/options_test.cc +14 -1
  289. package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
  290. package/deps/rocksdb/rocksdb/port/README +10 -0
  291. package/deps/rocksdb/rocksdb/port/mmap.h +20 -0
  292. package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
  293. package/deps/rocksdb/rocksdb/port/port_posix.cc +1 -1
  294. package/deps/rocksdb/rocksdb/port/port_posix.h +7 -4
  295. package/deps/rocksdb/rocksdb/port/stack_trace.cc +32 -12
  296. package/deps/rocksdb/rocksdb/port/win/env_win.h +1 -1
  297. package/deps/rocksdb/rocksdb/port/win/port_win.h +5 -2
  298. package/deps/rocksdb/rocksdb/src.mk +10 -1
  299. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  300. package/deps/rocksdb/rocksdb/table/block_based/block.cc +48 -22
  301. package/deps/rocksdb/rocksdb/table/block_based/block.h +60 -12
  302. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +116 -43
  303. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +9 -6
  304. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +321 -49
  305. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +98 -4
  306. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +233 -98
  307. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +58 -23
  308. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +12 -8
  309. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +52 -24
  310. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +219 -51
  311. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +41 -8
  312. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -1
  313. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +3 -1
  314. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +26 -7
  315. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +50 -18
  316. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +20 -8
  317. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +232 -71
  318. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -6
  319. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +44 -26
  320. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +2 -1
  321. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  322. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +31 -16
  323. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +97 -58
  324. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -2
  325. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +6 -0
  326. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +36 -19
  327. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +3 -1
  328. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +114 -70
  329. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +4 -3
  330. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +11 -7
  331. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +15 -3
  332. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +6 -3
  333. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +1 -1
  334. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +14 -13
  335. package/deps/rocksdb/rocksdb/table/block_fetcher.h +4 -0
  336. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +9 -2
  337. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +1 -0
  338. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +6 -2
  339. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -2
  340. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +2 -3
  341. package/deps/rocksdb/rocksdb/table/format.cc +175 -33
  342. package/deps/rocksdb/rocksdb/table/format.h +63 -10
  343. package/deps/rocksdb/rocksdb/table/get_context.cc +52 -89
  344. package/deps/rocksdb/rocksdb/table/get_context.h +12 -3
  345. package/deps/rocksdb/rocksdb/table/internal_iterator.h +11 -0
  346. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +29 -1
  347. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +22 -2
  348. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +12 -4
  349. package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -0
  350. package/deps/rocksdb/rocksdb/table/mock_table.cc +8 -3
  351. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +10 -5
  352. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +10 -1
  353. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +1 -2
  354. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +3 -3
  355. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +45 -9
  356. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +1 -0
  357. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +24 -1
  358. package/deps/rocksdb/rocksdb/table/table_builder.h +6 -2
  359. package/deps/rocksdb/rocksdb/table/table_properties.cc +6 -0
  360. package/deps/rocksdb/rocksdb/table/table_reader.h +6 -0
  361. package/deps/rocksdb/rocksdb/table/table_test.cc +52 -22
  362. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +31 -0
  363. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.cc +2 -1
  364. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +19 -7
  365. package/deps/rocksdb/rocksdb/test_util/sync_point.h +3 -1
  366. package/deps/rocksdb/rocksdb/test_util/testutil.cc +29 -0
  367. package/deps/rocksdb/rocksdb/test_util/testutil.h +19 -0
  368. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim.py +3 -3
  369. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +87 -65
  370. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +221 -33
  371. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +36 -0
  372. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -1
  373. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
  374. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +33 -11
  375. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +4 -0
  376. package/deps/rocksdb/rocksdb/unreleased_history/README.txt +73 -0
  377. package/deps/rocksdb/rocksdb/unreleased_history/add.sh +27 -0
  378. package/deps/rocksdb/rocksdb/unreleased_history/behavior_changes/.gitkeep +0 -0
  379. package/deps/rocksdb/rocksdb/unreleased_history/bug_fixes/.gitkeep +0 -0
  380. package/deps/rocksdb/rocksdb/unreleased_history/new_features/.gitkeep +0 -0
  381. package/deps/rocksdb/rocksdb/unreleased_history/performance_improvements/.gitkeep +0 -0
  382. package/deps/rocksdb/rocksdb/unreleased_history/public_api_changes/.gitkeep +0 -0
  383. package/deps/rocksdb/rocksdb/unreleased_history/release.sh +104 -0
  384. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +5 -0
  385. package/deps/rocksdb/rocksdb/util/bloom_impl.h +3 -3
  386. package/deps/rocksdb/rocksdb/util/bloom_test.cc +32 -11
  387. package/deps/rocksdb/rocksdb/util/cast_util.h +24 -0
  388. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +2 -0
  389. package/deps/rocksdb/rocksdb/util/comparator.cc +55 -8
  390. package/deps/rocksdb/rocksdb/util/compression.cc +4 -4
  391. package/deps/rocksdb/rocksdb/util/compression.h +119 -35
  392. package/deps/rocksdb/rocksdb/util/core_local.h +2 -1
  393. package/deps/rocksdb/rocksdb/util/crc32c.cc +7 -1
  394. package/deps/rocksdb/rocksdb/util/distributed_mutex.h +1 -1
  395. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +4 -4
  396. package/deps/rocksdb/rocksdb/util/filelock_test.cc +3 -0
  397. package/deps/rocksdb/rocksdb/util/hash.h +7 -3
  398. package/deps/rocksdb/rocksdb/util/hash_test.cc +44 -0
  399. package/deps/rocksdb/rocksdb/util/math.h +58 -6
  400. package/deps/rocksdb/rocksdb/util/math128.h +29 -7
  401. package/deps/rocksdb/rocksdb/util/mutexlock.h +35 -27
  402. package/deps/rocksdb/rocksdb/util/overload.h +23 -0
  403. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +53 -18
  404. package/deps/rocksdb/rocksdb/util/rate_limiter_impl.h +6 -1
  405. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +90 -19
  406. package/deps/rocksdb/rocksdb/util/single_thread_executor.h +1 -0
  407. package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -0
  408. package/deps/rocksdb/rocksdb/util/status.cc +1 -0
  409. package/deps/rocksdb/rocksdb/util/stop_watch.h +1 -1
  410. package/deps/rocksdb/rocksdb/util/string_util.cc +39 -0
  411. package/deps/rocksdb/rocksdb/util/string_util.h +10 -0
  412. package/deps/rocksdb/rocksdb/util/thread_operation.h +10 -1
  413. package/deps/rocksdb/rocksdb/util/udt_util.cc +385 -0
  414. package/deps/rocksdb/rocksdb/util/udt_util.h +192 -1
  415. package/deps/rocksdb/rocksdb/util/udt_util_test.cc +461 -0
  416. package/deps/rocksdb/rocksdb/util/write_batch_util.cc +25 -0
  417. package/deps/rocksdb/rocksdb/util/write_batch_util.h +80 -0
  418. package/deps/rocksdb/rocksdb/util/xxhash.h +0 -3
  419. package/deps/rocksdb/rocksdb/util/xxph3.h +0 -4
  420. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +4 -4
  421. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +71 -26
  422. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +7 -6
  423. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +1 -1
  424. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -3
  425. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +6 -11
  426. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +1 -2
  427. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +4 -5
  428. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +1 -0
  429. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +20 -16
  430. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +11 -7
  431. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +2 -2
  432. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +7 -1
  433. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +3 -0
  434. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +12 -3
  435. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
  436. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +7 -4
  437. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +2 -3
  438. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +2 -2
  439. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  440. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +13 -0
  441. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +23 -8
  442. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +9 -6
  443. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +37 -12
  444. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +272 -33
  445. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +15 -9
  446. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +4 -1
  447. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +76 -20
  448. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +18 -9
  449. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +195 -23
  450. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +19 -12
  451. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +88 -1
  452. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -1
  453. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +43 -17
  454. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +6 -3
  455. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +73 -24
  456. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +19 -4
  457. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +60 -107
  458. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +41 -12
  459. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +6 -3
  460. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +15 -8
  461. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +1 -1
  462. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +10 -5
  463. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
  464. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -1
  465. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +59 -28
  466. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +127 -120
  467. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +129 -59
  468. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +111 -14
  469. package/deps/rocksdb/rocksdb.gyp +6 -2
  470. package/index.js +0 -8
  471. package/package.json +1 -1
  472. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  473. package/prebuilds/linux-x64/node.napi.node +0 -0
  474. package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +0 -7
  475. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +0 -29
  476. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +0 -29
  477. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +0 -29
  478. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +0 -33
  479. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +0 -29
  480. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +0 -29
  481. package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +0 -26
  482. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +0 -29
  483. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +0 -10
@@ -39,20 +39,37 @@ void WritePreparedTxn::Initialize(const TransactionOptions& txn_options) {
39
39
  prepare_batch_cnt_ = 0;
40
40
  }
41
41
 
42
- void WritePreparedTxn::MultiGet(const ReadOptions& options,
42
+ void WritePreparedTxn::MultiGet(const ReadOptions& _read_options,
43
43
  ColumnFamilyHandle* column_family,
44
44
  const size_t num_keys, const Slice* keys,
45
45
  PinnableSlice* values, Status* statuses,
46
46
  const bool sorted_input) {
47
- assert(options.io_activity == Env::IOActivity::kUnknown);
47
+ if (_read_options.io_activity != Env::IOActivity::kUnknown &&
48
+ _read_options.io_activity != Env::IOActivity::kMultiGet) {
49
+ Status s = Status::InvalidArgument(
50
+ "Can only call MultiGet with `ReadOptions::io_activity` is "
51
+ "`Env::IOActivity::kUnknown` or `Env::IOActivity::kMultiGet`");
52
+
53
+ for (size_t i = 0; i < num_keys; ++i) {
54
+ if (statuses[i].ok()) {
55
+ statuses[i] = s;
56
+ }
57
+ }
58
+ return;
59
+ }
60
+ ReadOptions read_options(_read_options);
61
+ if (read_options.io_activity == Env::IOActivity::kUnknown) {
62
+ read_options.io_activity = Env::IOActivity::kMultiGet;
63
+ }
64
+
48
65
  SequenceNumber min_uncommitted, snap_seq;
49
- const SnapshotBackup backed_by_snapshot =
50
- wpt_db_->AssignMinMaxSeqs(options.snapshot, &min_uncommitted, &snap_seq);
66
+ const SnapshotBackup backed_by_snapshot = wpt_db_->AssignMinMaxSeqs(
67
+ read_options.snapshot, &min_uncommitted, &snap_seq);
51
68
  WritePreparedTxnReadCallback callback(wpt_db_, snap_seq, min_uncommitted,
52
69
  backed_by_snapshot);
53
- write_batch_.MultiGetFromBatchAndDB(db_, options, column_family, num_keys,
54
- keys, values, statuses, sorted_input,
55
- &callback);
70
+ write_batch_.MultiGetFromBatchAndDB(db_, read_options, column_family,
71
+ num_keys, keys, values, statuses,
72
+ sorted_input, &callback);
56
73
  if (UNLIKELY(!callback.valid() ||
57
74
  !wpt_db_->ValidateSnapshot(snap_seq, backed_by_snapshot))) {
58
75
  wpt_db_->WPRecordTick(TXN_GET_TRY_AGAIN);
@@ -62,14 +79,27 @@ void WritePreparedTxn::MultiGet(const ReadOptions& options,
62
79
  }
63
80
  }
64
81
 
65
- Status WritePreparedTxn::Get(const ReadOptions& options,
82
+ Status WritePreparedTxn::Get(const ReadOptions& _read_options,
66
83
  ColumnFamilyHandle* column_family,
67
84
  const Slice& key, PinnableSlice* pinnable_val) {
68
- if (options.io_activity != Env::IOActivity::kUnknown) {
85
+ if (_read_options.io_activity != Env::IOActivity::kUnknown &&
86
+ _read_options.io_activity != Env::IOActivity::kGet) {
69
87
  return Status::InvalidArgument(
70
- "Cannot call Get with `ReadOptions::io_activity` != "
71
- "`Env::IOActivity::kUnknown`");
88
+ "Can only call Get with `ReadOptions::io_activity` is "
89
+ "`Env::IOActivity::kUnknown` or `Env::IOActivity::kGet`");
72
90
  }
91
+ ReadOptions read_options(_read_options);
92
+ if (read_options.io_activity == Env::IOActivity::kUnknown) {
93
+ read_options.io_activity = Env::IOActivity::kGet;
94
+ }
95
+
96
+ return GetImpl(read_options, column_family, key, pinnable_val);
97
+ }
98
+
99
+ Status WritePreparedTxn::GetImpl(const ReadOptions& options,
100
+ ColumnFamilyHandle* column_family,
101
+ const Slice& key,
102
+ PinnableSlice* pinnable_val) {
73
103
  SequenceNumber min_uncommitted, snap_seq;
74
104
  const SnapshotBackup backed_by_snapshot =
75
105
  wpt_db_->AssignMinMaxSeqs(options.snapshot, &min_uncommitted, &snap_seq);
@@ -93,11 +123,7 @@ Status WritePreparedTxn::Get(const ReadOptions& options,
93
123
  }
94
124
 
95
125
  Iterator* WritePreparedTxn::GetIterator(const ReadOptions& options) {
96
- // Make sure to get iterator from WritePrepareTxnDB, not the root db.
97
- Iterator* db_iter = wpt_db_->NewIterator(options);
98
- assert(db_iter);
99
-
100
- return write_batch_.NewIteratorWithBase(db_iter);
126
+ return GetIterator(options, wpt_db_->DefaultColumnFamily());
101
127
  }
102
128
 
103
129
  Iterator* WritePreparedTxn::GetIterator(const ReadOptions& options,
@@ -106,7 +132,7 @@ Iterator* WritePreparedTxn::GetIterator(const ReadOptions& options,
106
132
  Iterator* db_iter = wpt_db_->NewIterator(options, column_family);
107
133
  assert(db_iter);
108
134
 
109
- return write_batch_.NewIteratorWithBase(column_family, db_iter);
135
+ return write_batch_.NewIteratorWithBase(column_family, db_iter, &options);
110
136
  }
111
137
 
112
138
  Status WritePreparedTxn::PrepareInternal() {
@@ -51,12 +51,12 @@ class WritePreparedTxn : public PessimisticTransaction {
51
51
  // seq in the WAL that is also published, LastPublishedSequence, as opposed to
52
52
  // the last seq in the memtable.
53
53
  using Transaction::Get;
54
- virtual Status Get(const ReadOptions& options,
54
+ virtual Status Get(const ReadOptions& _read_options,
55
55
  ColumnFamilyHandle* column_family, const Slice& key,
56
56
  PinnableSlice* value) override;
57
57
 
58
58
  using Transaction::MultiGet;
59
- virtual void MultiGet(const ReadOptions& options,
59
+ virtual void MultiGet(const ReadOptions& _read_options,
60
60
  ColumnFamilyHandle* column_family,
61
61
  const size_t num_keys, const Slice* keys,
62
62
  PinnableSlice* values, Status* statuses,
@@ -86,6 +86,10 @@ class WritePreparedTxn : public PessimisticTransaction {
86
86
  friend class WriteUnpreparedTxnDB;
87
87
  friend class WriteUnpreparedTxn;
88
88
 
89
+ using Transaction::GetImpl;
90
+ Status GetImpl(const ReadOptions& options, ColumnFamilyHandle* column_family,
91
+ const Slice& key, PinnableSlice* value) override;
92
+
89
93
  Status PrepareInternal() override;
90
94
 
91
95
  Status CommitWithoutPrepareInternal() override;
@@ -114,4 +118,3 @@ class WritePreparedTxn : public PessimisticTransaction {
114
118
  };
115
119
 
116
120
  } // namespace ROCKSDB_NAMESPACE
117
-
@@ -247,14 +247,26 @@ Status WritePreparedTxnDB::WriteInternal(const WriteOptions& write_options_orig,
247
247
  return s;
248
248
  }
249
249
 
250
- Status WritePreparedTxnDB::Get(const ReadOptions& options,
250
+ Status WritePreparedTxnDB::Get(const ReadOptions& _read_options,
251
251
  ColumnFamilyHandle* column_family,
252
252
  const Slice& key, PinnableSlice* value) {
253
- if (options.io_activity != Env::IOActivity::kUnknown) {
253
+ if (_read_options.io_activity != Env::IOActivity::kUnknown &&
254
+ _read_options.io_activity != Env::IOActivity::kGet) {
254
255
  return Status::InvalidArgument(
255
- "Cannot call Get with `ReadOptions::io_activity` != "
256
- "`Env::IOActivity::kUnknown`");
256
+ "Can only call Get with `ReadOptions::io_activity` is "
257
+ "`Env::IOActivity::kUnknown` or `Env::IOActivity::kGet`");
257
258
  }
259
+ ReadOptions read_options(_read_options);
260
+ if (read_options.io_activity == Env::IOActivity::kUnknown) {
261
+ read_options.io_activity = Env::IOActivity::kGet;
262
+ }
263
+
264
+ return GetImpl(read_options, column_family, key, value);
265
+ }
266
+
267
+ Status WritePreparedTxnDB::GetImpl(const ReadOptions& options,
268
+ ColumnFamilyHandle* column_family,
269
+ const Slice& key, PinnableSlice* value) {
258
270
  SequenceNumber min_uncommitted, snap_seq;
259
271
  const SnapshotBackup backed_by_snapshot =
260
272
  AssignMinMaxSeqs(options.snapshot, &min_uncommitted, &snap_seq);
@@ -314,16 +326,35 @@ void WritePreparedTxnDB::UpdateCFComparatorMap(ColumnFamilyHandle* h) {
314
326
  }
315
327
 
316
328
  std::vector<Status> WritePreparedTxnDB::MultiGet(
317
- const ReadOptions& options,
329
+ const ReadOptions& _read_options,
318
330
  const std::vector<ColumnFamilyHandle*>& column_family,
319
331
  const std::vector<Slice>& keys, std::vector<std::string>* values) {
320
332
  assert(values);
321
333
  size_t num_keys = keys.size();
334
+ std::vector<Status> stat_list(num_keys);
335
+
336
+ if (_read_options.io_activity != Env::IOActivity::kUnknown &&
337
+ _read_options.io_activity != Env::IOActivity::kMultiGet) {
338
+ Status s = Status::InvalidArgument(
339
+ "Can only call MultiGet with `ReadOptions::io_activity` is "
340
+ "`Env::IOActivity::kUnknown` or `Env::IOActivity::kMultiGet`");
341
+
342
+ for (size_t i = 0; i < num_keys; ++i) {
343
+ stat_list[i] = s;
344
+ }
345
+ return stat_list;
346
+ }
347
+
348
+ ReadOptions read_options(_read_options);
349
+ if (read_options.io_activity == Env::IOActivity::kUnknown) {
350
+ read_options.io_activity = Env::IOActivity::kMultiGet;
351
+ }
352
+
322
353
  values->resize(num_keys);
323
354
 
324
- std::vector<Status> stat_list(num_keys);
325
355
  for (size_t i = 0; i < num_keys; ++i) {
326
- stat_list[i] = this->Get(options, column_family[i], keys[i], &(*values)[i]);
356
+ stat_list[i] =
357
+ this->GetImpl(read_options, column_family[i], keys[i], &(*values)[i]);
327
358
  }
328
359
  return stat_list;
329
360
  }
@@ -346,22 +377,27 @@ static void CleanupWritePreparedTxnDBIterator(void* arg1, void* /*arg2*/) {
346
377
  }
347
378
  } // anonymous namespace
348
379
 
349
- Iterator* WritePreparedTxnDB::NewIterator(const ReadOptions& options,
380
+ Iterator* WritePreparedTxnDB::NewIterator(const ReadOptions& _read_options,
350
381
  ColumnFamilyHandle* column_family) {
351
- if (options.io_activity != Env::IOActivity::kUnknown) {
382
+ if (_read_options.io_activity != Env::IOActivity::kUnknown &&
383
+ _read_options.io_activity != Env::IOActivity::kDBIterator) {
352
384
  return NewErrorIterator(Status::InvalidArgument(
353
- "Cannot call NewIterator with `ReadOptions::io_activity` != "
354
- "`Env::IOActivity::kUnknown`"));
385
+ "Can only call NewIterator with `ReadOptions::io_activity` is "
386
+ "`Env::IOActivity::kUnknown` or `Env::IOActivity::kDBIterator`"));
387
+ }
388
+ ReadOptions read_options(_read_options);
389
+ if (read_options.io_activity == Env::IOActivity::kUnknown) {
390
+ read_options.io_activity = Env::IOActivity::kDBIterator;
355
391
  }
356
392
  constexpr bool expose_blob_index = false;
357
393
  constexpr bool allow_refresh = false;
358
394
  std::shared_ptr<ManagedSnapshot> own_snapshot = nullptr;
359
395
  SequenceNumber snapshot_seq = kMaxSequenceNumber;
360
396
  SequenceNumber min_uncommitted = 0;
361
- if (options.snapshot != nullptr) {
362
- snapshot_seq = options.snapshot->GetSequenceNumber();
397
+ if (read_options.snapshot != nullptr) {
398
+ snapshot_seq = read_options.snapshot->GetSequenceNumber();
363
399
  min_uncommitted =
364
- static_cast_with_check<const SnapshotImpl>(options.snapshot)
400
+ static_cast_with_check<const SnapshotImpl>(read_options.snapshot)
365
401
  ->min_uncommitted_;
366
402
  } else {
367
403
  auto* snapshot = GetSnapshot();
@@ -377,26 +413,38 @@ Iterator* WritePreparedTxnDB::NewIterator(const ReadOptions& options,
377
413
  static_cast_with_check<ColumnFamilyHandleImpl>(column_family)->cfd();
378
414
  auto* state =
379
415
  new IteratorState(this, snapshot_seq, own_snapshot, min_uncommitted);
380
- auto* db_iter =
381
- db_impl_->NewIteratorImpl(options, cfd, snapshot_seq, &state->callback,
382
- expose_blob_index, allow_refresh);
416
+ SuperVersion* super_version = cfd->GetReferencedSuperVersion(db_impl_);
417
+ auto* db_iter = db_impl_->NewIteratorImpl(read_options, cfd, super_version,
418
+ snapshot_seq, &state->callback,
419
+ expose_blob_index, allow_refresh);
383
420
  db_iter->RegisterCleanup(CleanupWritePreparedTxnDBIterator, state, nullptr);
384
421
  return db_iter;
385
422
  }
386
423
 
387
424
  Status WritePreparedTxnDB::NewIterators(
388
- const ReadOptions& options,
425
+ const ReadOptions& _read_options,
389
426
  const std::vector<ColumnFamilyHandle*>& column_families,
390
427
  std::vector<Iterator*>* iterators) {
428
+ if (_read_options.io_activity != Env::IOActivity::kUnknown &&
429
+ _read_options.io_activity != Env::IOActivity::kDBIterator) {
430
+ return Status::InvalidArgument(
431
+ "Can only call NewIterator with `ReadOptions::io_activity` is "
432
+ "`Env::IOActivity::kUnknown` or `Env::IOActivity::kDBIterator`");
433
+ }
434
+
435
+ ReadOptions read_options(_read_options);
436
+ if (read_options.io_activity == Env::IOActivity::kUnknown) {
437
+ read_options.io_activity = Env::IOActivity::kDBIterator;
438
+ }
391
439
  constexpr bool expose_blob_index = false;
392
440
  constexpr bool allow_refresh = false;
393
441
  std::shared_ptr<ManagedSnapshot> own_snapshot = nullptr;
394
442
  SequenceNumber snapshot_seq = kMaxSequenceNumber;
395
443
  SequenceNumber min_uncommitted = 0;
396
- if (options.snapshot != nullptr) {
397
- snapshot_seq = options.snapshot->GetSequenceNumber();
444
+ if (read_options.snapshot != nullptr) {
445
+ snapshot_seq = read_options.snapshot->GetSequenceNumber();
398
446
  min_uncommitted =
399
- static_cast_with_check<const SnapshotImpl>(options.snapshot)
447
+ static_cast_with_check<const SnapshotImpl>(read_options.snapshot)
400
448
  ->min_uncommitted_;
401
449
  } else {
402
450
  auto* snapshot = GetSnapshot();
@@ -414,9 +462,10 @@ Status WritePreparedTxnDB::NewIterators(
414
462
  static_cast_with_check<ColumnFamilyHandleImpl>(column_family)->cfd();
415
463
  auto* state =
416
464
  new IteratorState(this, snapshot_seq, own_snapshot, min_uncommitted);
417
- auto* db_iter =
418
- db_impl_->NewIteratorImpl(options, cfd, snapshot_seq, &state->callback,
419
- expose_blob_index, allow_refresh);
465
+ SuperVersion* super_version = cfd->GetReferencedSuperVersion(db_impl_);
466
+ auto* db_iter = db_impl_->NewIteratorImpl(read_options, cfd, super_version,
467
+ snapshot_seq, &state->callback,
468
+ expose_blob_index, allow_refresh);
420
469
  db_iter->RegisterCleanup(CleanupWritePreparedTxnDBIterator, state, nullptr);
421
470
  iterators->push_back(db_iter);
422
471
  }
@@ -83,24 +83,24 @@ class WritePreparedTxnDB : public PessimisticTransactionDB {
83
83
  size_t batch_cnt, WritePreparedTxn* txn);
84
84
 
85
85
  using DB::Get;
86
- virtual Status Get(const ReadOptions& options,
86
+ virtual Status Get(const ReadOptions& _read_options,
87
87
  ColumnFamilyHandle* column_family, const Slice& key,
88
88
  PinnableSlice* value) override;
89
89
 
90
90
  using DB::MultiGet;
91
91
  virtual std::vector<Status> MultiGet(
92
- const ReadOptions& options,
92
+ const ReadOptions& _read_options,
93
93
  const std::vector<ColumnFamilyHandle*>& column_family,
94
94
  const std::vector<Slice>& keys,
95
95
  std::vector<std::string>* values) override;
96
96
 
97
97
  using DB::NewIterator;
98
- virtual Iterator* NewIterator(const ReadOptions& options,
98
+ virtual Iterator* NewIterator(const ReadOptions& _read_options,
99
99
  ColumnFamilyHandle* column_family) override;
100
100
 
101
101
  using DB::NewIterators;
102
102
  virtual Status NewIterators(
103
- const ReadOptions& options,
103
+ const ReadOptions& _read_options,
104
104
  const std::vector<ColumnFamilyHandle*>& column_families,
105
105
  std::vector<Iterator*>* iterators) override;
106
106
 
@@ -520,6 +520,21 @@ class WritePreparedTxnDB : public PessimisticTransactionDB {
520
520
  RecordTick(db_impl_->immutable_db_options_.statistics.get(), ticker_type);
521
521
  }
522
522
 
523
+ Status GetImpl(const ReadOptions& options, ColumnFamilyHandle* column_family,
524
+ const Slice& key, std::string* value) {
525
+ assert(value != nullptr);
526
+ PinnableSlice pinnable_val(value);
527
+ assert(!pinnable_val.IsPinned());
528
+ auto s = GetImpl(options, column_family, key, &pinnable_val);
529
+ if (s.ok() && pinnable_val.IsPinned()) {
530
+ value->assign(pinnable_val.data(), pinnable_val.size());
531
+ } // else value is already assigned
532
+ return s;
533
+ }
534
+
535
+ Status GetImpl(const ReadOptions& options, ColumnFamilyHandle* column_family,
536
+ const Slice& key, PinnableSlice* value);
537
+
523
538
  // A heap with the amortized O(1) complexity for erase. It uses one extra heap
524
539
  // to keep track of erased entries that are not yet on top of the main heap.
525
540
  class PreparedHeap {
@@ -35,26 +35,32 @@ INSTANTIATE_TEST_CASE_P(
35
35
  ::testing::Values(std::make_tuple(false, false, WRITE_UNPREPARED),
36
36
  std::make_tuple(false, true, WRITE_UNPREPARED)));
37
37
 
38
- enum StressAction { NO_SNAPSHOT, RO_SNAPSHOT, REFRESH_SNAPSHOT };
39
- class WriteUnpreparedStressTest : public WriteUnpreparedTransactionTestBase,
40
- virtual public ::testing::WithParamInterface<
41
- std::tuple<bool, StressAction>> {
38
+ enum SnapshotAction { NO_SNAPSHOT, RO_SNAPSHOT, REFRESH_SNAPSHOT };
39
+ enum VerificationOperation { VERIFY_GET, VERIFY_NEXT, VERIFY_PREV };
40
+ class WriteUnpreparedSnapshotTest
41
+ : public WriteUnpreparedTransactionTestBase,
42
+ virtual public ::testing::WithParamInterface<
43
+ std::tuple<bool, SnapshotAction, VerificationOperation>> {
42
44
  public:
43
- WriteUnpreparedStressTest()
45
+ WriteUnpreparedSnapshotTest()
44
46
  : WriteUnpreparedTransactionTestBase(false, std::get<0>(GetParam()),
45
47
  WRITE_UNPREPARED),
46
- action_(std::get<1>(GetParam())) {}
47
- StressAction action_;
48
+ action_(std::get<1>(GetParam())),
49
+ verify_op_(std::get<2>(GetParam())) {}
50
+ SnapshotAction action_;
51
+ VerificationOperation verify_op_;
48
52
  };
49
53
 
54
+ // Test parameters:
55
+ // Param 0): use stackable db, parameterization hard coded to be overwritten to
56
+ // false. Param 1): test mode for snapshot action Param 2): test mode for
57
+ // verification operation
50
58
  INSTANTIATE_TEST_CASE_P(
51
- WriteUnpreparedStressTest, WriteUnpreparedStressTest,
52
- ::testing::Values(std::make_tuple(false, NO_SNAPSHOT),
53
- std::make_tuple(false, RO_SNAPSHOT),
54
- std::make_tuple(false, REFRESH_SNAPSHOT),
55
- std::make_tuple(true, NO_SNAPSHOT),
56
- std::make_tuple(true, RO_SNAPSHOT),
57
- std::make_tuple(true, REFRESH_SNAPSHOT)));
59
+ WriteUnpreparedSnapshotTest, WriteUnpreparedSnapshotTest,
60
+ ::testing::Combine(
61
+ ::testing::Bool(),
62
+ ::testing::Values(NO_SNAPSHOT, RO_SNAPSHOT, REFRESH_SNAPSHOT),
63
+ ::testing::Values(VERIFY_GET, VERIFY_NEXT, VERIFY_PREV)));
58
64
 
59
65
  TEST_P(WriteUnpreparedTransactionTest, ReadYourOwnWrite) {
60
66
  // The following tests checks whether reading your own write for
@@ -135,42 +141,33 @@ TEST_P(WriteUnpreparedTransactionTest, ReadYourOwnWrite) {
135
141
  }
136
142
  }
137
143
 
138
- #if !defined(ROCKSDB_VALGRIND_RUN) || defined(ROCKSDB_FULL_VALGRIND_RUN)
139
- TEST_P(WriteUnpreparedStressTest, ReadYourOwnWriteStress) {
140
- // This is a stress test where different threads are writing random keys, and
141
- // then before committing or aborting the transaction, it validates to see
142
- // that it can read the keys it wrote, and the keys it did not write respect
143
- // the snapshot. To avoid row lock contention (and simply stressing the
144
- // locking system), each thread is mostly only writing to its own set of keys.
144
+ TEST_P(WriteUnpreparedSnapshotTest, ReadYourOwnWrite) {
145
+ // This test validates a transaction can read its writes and the correctness
146
+ // of its read with regard to a mocked snapshot functionality.
145
147
  const uint32_t kNumIter = 1000;
146
- const uint32_t kNumThreads = 10;
147
148
  const uint32_t kNumKeys = 5;
148
149
 
149
150
  // Test with
150
151
  // 1. no snapshots set
151
152
  // 2. snapshot set on ReadOptions
152
153
  // 3. snapshot set, and refreshing after every write.
153
- StressAction a = action_;
154
+ SnapshotAction snapshot_action = action_;
154
155
  WriteOptions write_options;
155
156
  txn_db_options.transaction_lock_timeout = -1;
156
157
  options.disable_auto_compactions = true;
157
158
  ASSERT_OK(ReOpen());
158
159
 
159
160
  std::vector<std::string> keys;
160
- for (uint32_t k = 0; k < kNumKeys * kNumThreads; k++) {
161
+ for (uint32_t k = 0; k < kNumKeys; k++) {
161
162
  keys.push_back("k" + std::to_string(k));
162
163
  }
163
- RandomShuffle(keys.begin(), keys.end());
164
164
 
165
165
  // This counter will act as a "sequence number" to help us validate
166
166
  // visibility logic with snapshots. If we had direct access to the seqno of
167
167
  // snapshots and key/values, then we should directly compare those instead.
168
168
  std::atomic<int64_t> counter(0);
169
169
 
170
- std::function<void(uint32_t)> stress_thread = [&](int id) {
171
- size_t tid = std::hash<std::thread::id>()(std::this_thread::get_id());
172
- Random64 rnd(static_cast<uint32_t>(tid));
173
-
170
+ std::function<void()> check_correctness_wrt_snapshot = [&]() {
174
171
  Transaction* txn;
175
172
  TransactionOptions txn_options;
176
173
  // batch_size of 1 causes writes to DB for every marker.
@@ -178,114 +175,82 @@ TEST_P(WriteUnpreparedStressTest, ReadYourOwnWriteStress) {
178
175
  ReadOptions read_options;
179
176
 
180
177
  for (uint32_t i = 0; i < kNumIter; i++) {
181
- std::set<std::string> owned_keys(keys.begin() + id * kNumKeys,
182
- keys.begin() + (id + 1) * kNumKeys);
183
- // Add unowned keys to make the workload more interesting, but this
184
- // increases row lock contention, so just do it sometimes.
185
- if (rnd.OneIn(2)) {
186
- owned_keys.insert(keys[rnd.Uniform(kNumKeys * kNumThreads)]);
187
- }
188
-
189
178
  txn = db->BeginTransaction(write_options, txn_options);
190
- ASSERT_OK(txn->SetName(std::to_string(id)));
191
179
  txn->SetSnapshot();
192
- if (a >= RO_SNAPSHOT) {
180
+ if (snapshot_action >= RO_SNAPSHOT) {
193
181
  read_options.snapshot = txn->GetSnapshot();
194
182
  ASSERT_TRUE(read_options.snapshot != nullptr);
195
183
  }
196
184
 
197
- uint64_t buf[2];
198
- buf[0] = id;
185
+ uint64_t buf[1];
199
186
 
200
187
  // When scanning through the database, make sure that all unprepared
201
- // keys have value >= snapshot and all other keys have value < snapshot.
188
+ // keys have value >= snapshot.
202
189
  int64_t snapshot_num = counter.fetch_add(1);
203
190
 
204
191
  Status s;
205
- for (const auto& key : owned_keys) {
206
- buf[1] = counter.fetch_add(1);
192
+ for (const auto& key : keys) {
193
+ buf[0] = counter.fetch_add(1);
207
194
  s = txn->Put(key, Slice((const char*)buf, sizeof(buf)));
208
195
  if (!s.ok()) {
209
196
  break;
210
197
  }
211
- if (a == REFRESH_SNAPSHOT) {
198
+ if (snapshot_action == REFRESH_SNAPSHOT) {
212
199
  txn->SetSnapshot();
213
200
  read_options.snapshot = txn->GetSnapshot();
214
201
  snapshot_num = counter.fetch_add(1);
215
202
  }
216
203
  }
217
204
 
218
- // Failure is possible due to snapshot validation. In this case,
219
- // rollback and move onto next iteration.
220
- if (!s.ok()) {
221
- ASSERT_TRUE(s.IsBusy());
222
- ASSERT_OK(txn->Rollback());
223
- delete txn;
224
- continue;
225
- }
205
+ ASSERT_OK(s);
226
206
 
227
- auto verify_key = [&owned_keys, &a, &id, &snapshot_num](
228
- const std::string& key, const std::string& value) {
229
- if (owned_keys.count(key) > 0) {
230
- ASSERT_EQ(value.size(), 16);
231
-
232
- // Since this key is part of owned_keys, then this key must be
233
- // unprepared by this transaction identified by 'id'
234
- ASSERT_EQ(((int64_t*)value.c_str())[0], id);
235
- if (a == REFRESH_SNAPSHOT) {
236
- // If refresh snapshot is true, then the snapshot is refreshed
237
- // after every Put(), meaning that the current snapshot in
238
- // snapshot_num must be greater than the "seqno" of any keys
239
- // written by the current transaction.
240
- ASSERT_LT(((int64_t*)value.c_str())[1], snapshot_num);
241
- } else {
242
- // If refresh snapshot is not on, then the snapshot was taken at
243
- // the beginning of the transaction, meaning all writes must come
244
- // after snapshot_num
245
- ASSERT_GT(((int64_t*)value.c_str())[1], snapshot_num);
246
- }
247
- } else if (a >= RO_SNAPSHOT) {
248
- // If this is not an unprepared key, just assert that the key
249
- // "seqno" is smaller than the snapshot seqno.
250
- ASSERT_EQ(value.size(), 16);
251
- ASSERT_LT(((int64_t*)value.c_str())[1], snapshot_num);
207
+ auto verify_key = [&snapshot_action,
208
+ &snapshot_num](const std::string& value) {
209
+ ASSERT_EQ(value.size(), 8);
210
+
211
+ if (snapshot_action == REFRESH_SNAPSHOT) {
212
+ // If refresh snapshot is true, then the snapshot is refreshed
213
+ // after every Put(), meaning that the current snapshot in
214
+ // snapshot_num must be greater than the "seqno" of any keys
215
+ // written by the current transaction.
216
+ ASSERT_LT(((int64_t*)value.c_str())[0], snapshot_num);
217
+ } else {
218
+ // If refresh snapshot is not on, then the snapshot was taken at
219
+ // the beginning of the transaction, meaning all writes must come
220
+ // after snapshot_num
221
+ ASSERT_GT(((int64_t*)value.c_str())[0], snapshot_num);
252
222
  }
253
223
  };
254
224
 
255
- // Validate Get()/Next()/Prev(). Do only one of them to save time, and
256
- // reduce lock contention.
257
- switch (rnd.Uniform(3)) {
258
- case 0: // Validate Get()
225
+ // Validate one of Get()/Next()/Prev() depending on the verification
226
+ // operation to use.
227
+ switch (verify_op_) {
228
+ case VERIFY_GET: // Validate Get()
259
229
  {
260
230
  for (const auto& key : keys) {
261
231
  std::string value;
262
- s = txn->Get(read_options, Slice(key), &value);
263
- if (!s.ok()) {
264
- ASSERT_TRUE(s.IsNotFound());
265
- ASSERT_EQ(owned_keys.count(key), 0);
266
- } else {
267
- verify_key(key, value);
268
- }
232
+ ASSERT_OK(txn->Get(read_options, Slice(key), &value));
233
+ verify_key(value);
269
234
  }
270
235
  break;
271
236
  }
272
- case 1: // Validate Next()
237
+ case VERIFY_NEXT: // Validate Next()
273
238
  {
274
239
  Iterator* iter = txn->GetIterator(read_options);
275
240
  ASSERT_OK(iter->status());
276
241
  for (iter->SeekToFirst(); iter->Valid(); iter->Next()) {
277
- verify_key(iter->key().ToString(), iter->value().ToString());
242
+ verify_key(iter->value().ToString());
278
243
  }
279
244
  ASSERT_OK(iter->status());
280
245
  delete iter;
281
246
  break;
282
247
  }
283
- case 2: // Validate Prev()
248
+ case VERIFY_PREV: // Validate Prev()
284
249
  {
285
250
  Iterator* iter = txn->GetIterator(read_options);
286
251
  ASSERT_OK(iter->status());
287
252
  for (iter->SeekToLast(); iter->Valid(); iter->Prev()) {
288
- verify_key(iter->key().ToString(), iter->value().ToString());
253
+ verify_key(iter->value().ToString());
289
254
  }
290
255
  ASSERT_OK(iter->status());
291
256
  delete iter;
@@ -295,25 +260,13 @@ TEST_P(WriteUnpreparedStressTest, ReadYourOwnWriteStress) {
295
260
  FAIL();
296
261
  }
297
262
 
298
- if (rnd.OneIn(2)) {
299
- ASSERT_OK(txn->Commit());
300
- } else {
301
- ASSERT_OK(txn->Rollback());
302
- }
263
+ ASSERT_OK(txn->Commit());
303
264
  delete txn;
304
265
  }
305
266
  };
306
267
 
307
- std::vector<port::Thread> threads;
308
- for (uint32_t i = 0; i < kNumThreads; i++) {
309
- threads.emplace_back(stress_thread, i);
310
- }
311
-
312
- for (auto& t : threads) {
313
- t.join();
314
- }
268
+ check_correctness_wrt_snapshot();
315
269
  }
316
- #endif // !defined(ROCKSDB_VALGRIND_RUN) || defined(ROCKSDB_FULL_VALGRIND_RUN)
317
270
 
318
271
  // This tests how write unprepared behaves during recovery when the DB crashes
319
272
  // after a transaction has either been unprepared or prepared, and tests if