@nxtedition/rocksdb 8.2.7 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (359) hide show
  1. package/deps/rocksdb/rocksdb/CMakeLists.txt +7 -1
  2. package/deps/rocksdb/rocksdb/Makefile +22 -19
  3. package/deps/rocksdb/rocksdb/TARGETS +8 -0
  4. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +157 -61
  5. package/deps/rocksdb/rocksdb/cache/cache_test.cc +43 -92
  6. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +632 -455
  7. package/deps/rocksdb/rocksdb/cache/clock_cache.h +244 -149
  8. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +41 -13
  9. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +11 -1
  10. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +216 -17
  11. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +7 -5
  12. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +279 -199
  13. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +2 -1
  14. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +159 -8
  15. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +28 -2
  16. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +1 -1
  17. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +8 -0
  18. package/deps/rocksdb/rocksdb/crash_test.mk +14 -0
  19. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +3 -1
  20. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -1
  21. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -1
  22. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
  23. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +1 -1
  24. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +18 -21
  25. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +1 -2
  26. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -1
  27. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +2 -3
  28. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +1 -1
  29. package/deps/rocksdb/rocksdb/db/builder.cc +32 -7
  30. package/deps/rocksdb/rocksdb/db/c.cc +169 -6
  31. package/deps/rocksdb/rocksdb/db/c_test.c +104 -6
  32. package/deps/rocksdb/rocksdb/db/column_family.cc +98 -47
  33. package/deps/rocksdb/rocksdb/db/column_family.h +25 -2
  34. package/deps/rocksdb/rocksdb/db/column_family_test.cc +213 -2
  35. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -1
  36. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +93 -23
  37. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +33 -9
  38. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +7 -6
  39. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -6
  40. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +2 -2
  41. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +107 -43
  42. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +15 -4
  43. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -0
  44. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +4 -2
  45. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +25 -17
  46. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +13 -4
  47. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -11
  48. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +29 -4
  49. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +24 -31
  50. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +3 -1
  51. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +19 -19
  52. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +2 -1
  53. package/deps/rocksdb/rocksdb/db/convenience.cc +20 -3
  54. package/deps/rocksdb/rocksdb/db/convenience_impl.h +15 -0
  55. package/deps/rocksdb/rocksdb/db/corruption_test.cc +17 -0
  56. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
  57. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +17 -3
  58. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +5 -0
  59. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +15 -15
  60. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +666 -44
  61. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +2 -29
  62. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +274 -1
  63. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +40 -19
  64. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +6 -5
  65. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +250 -116
  66. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +51 -23
  67. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +354 -96
  68. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +6 -3
  69. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +2 -1
  70. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +5 -0
  71. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +50 -21
  72. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +26 -13
  73. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +13 -5
  74. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +61 -21
  75. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +8 -87
  76. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +7 -1
  77. package/deps/rocksdb/rocksdb/db/db_iter.cc +2 -2
  78. package/deps/rocksdb/rocksdb/db/db_iter.h +1 -0
  79. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +4 -11
  80. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +6 -6
  81. package/deps/rocksdb/rocksdb/db/db_options_test.cc +39 -29
  82. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +26 -36
  83. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +106 -0
  84. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +12 -3
  85. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +1 -1
  86. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +1 -0
  87. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +279 -166
  88. package/deps/rocksdb/rocksdb/db/db_test.cc +48 -21
  89. package/deps/rocksdb/rocksdb/db/db_test2.cc +81 -12
  90. package/deps/rocksdb/rocksdb/db/db_test_util.cc +14 -6
  91. package/deps/rocksdb/rocksdb/db/db_test_util.h +40 -0
  92. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +13 -1
  93. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +233 -0
  94. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +143 -0
  95. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +6 -6
  96. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -2
  97. package/deps/rocksdb/rocksdb/db/dbformat.cc +36 -0
  98. package/deps/rocksdb/rocksdb/db/dbformat.h +169 -20
  99. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +129 -0
  100. package/deps/rocksdb/rocksdb/db/error_handler.cc +16 -0
  101. package/deps/rocksdb/rocksdb/db/error_handler.h +6 -3
  102. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
  103. package/deps/rocksdb/rocksdb/db/event_helpers.cc +4 -0
  104. package/deps/rocksdb/rocksdb/db/experimental.cc +2 -1
  105. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +4 -4
  106. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +17 -8
  107. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -4
  108. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -1
  109. package/deps/rocksdb/rocksdb/db/file_indexer.cc +2 -4
  110. package/deps/rocksdb/rocksdb/db/flush_job.cc +101 -11
  111. package/deps/rocksdb/rocksdb/db/flush_job.h +24 -1
  112. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +88 -11
  113. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +2 -3
  114. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +159 -91
  115. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +19 -10
  116. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +143 -0
  117. package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -1
  118. package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
  119. package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -1
  120. package/deps/rocksdb/rocksdb/db/log_reader.h +3 -2
  121. package/deps/rocksdb/rocksdb/db/log_test.cc +17 -21
  122. package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
  123. package/deps/rocksdb/rocksdb/db/log_writer.h +3 -2
  124. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +4 -3
  125. package/deps/rocksdb/rocksdb/db/memtable.cc +52 -13
  126. package/deps/rocksdb/rocksdb/db/memtable.h +45 -1
  127. package/deps/rocksdb/rocksdb/db/memtable_list.cc +44 -10
  128. package/deps/rocksdb/rocksdb/db/memtable_list.h +32 -1
  129. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +90 -4
  130. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +2 -2
  131. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +1 -0
  132. package/deps/rocksdb/rocksdb/db/repair.cc +21 -4
  133. package/deps/rocksdb/rocksdb/db/repair_test.cc +143 -2
  134. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +5 -4
  135. package/deps/rocksdb/rocksdb/db/table_cache.cc +44 -35
  136. package/deps/rocksdb/rocksdb/db/table_cache.h +6 -6
  137. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
  138. package/deps/rocksdb/rocksdb/db/version_builder.cc +0 -1
  139. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +236 -204
  140. package/deps/rocksdb/rocksdb/db/version_edit.cc +66 -4
  141. package/deps/rocksdb/rocksdb/db/version_edit.h +48 -6
  142. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +80 -8
  143. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +12 -0
  144. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +86 -17
  145. package/deps/rocksdb/rocksdb/db/version_set.cc +136 -41
  146. package/deps/rocksdb/rocksdb/db/version_set.h +28 -7
  147. package/deps/rocksdb/rocksdb/db/version_set_test.cc +25 -15
  148. package/deps/rocksdb/rocksdb/db/write_batch.cc +11 -0
  149. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +3 -0
  150. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +16 -0
  151. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +22 -3
  152. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +2 -0
  153. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +42 -0
  154. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +32 -3
  155. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +7 -0
  156. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +247 -120
  157. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +9 -4
  158. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +13 -6
  159. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +2 -0
  160. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +15 -27
  161. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +264 -69
  162. package/deps/rocksdb/rocksdb/env/env.cc +1 -2
  163. package/deps/rocksdb/rocksdb/env/env_encryption.cc +11 -165
  164. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +0 -17
  165. package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -2
  166. package/deps/rocksdb/rocksdb/env/env_test.cc +86 -2
  167. package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
  168. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +78 -0
  169. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +34 -0
  170. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -0
  171. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +15 -4
  172. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +52 -43
  173. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +34 -18
  174. package/deps/rocksdb/rocksdb/file/file_util.cc +10 -5
  175. package/deps/rocksdb/rocksdb/file/file_util.h +13 -1
  176. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +724 -79
  177. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +64 -33
  178. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -16
  179. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +23 -12
  180. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +3 -0
  181. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +2 -1
  182. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +153 -88
  183. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +70 -2
  184. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +50 -11
  185. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -0
  186. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +16 -2
  187. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +1 -1
  188. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +55 -8
  189. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +32 -4
  190. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +9 -109
  191. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +90 -13
  192. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +3 -0
  193. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +85 -17
  194. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +13 -1
  195. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +2 -1
  196. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +5 -1
  197. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +21 -2
  198. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +7 -1
  199. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +6 -0
  200. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +5 -0
  201. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +33 -2
  202. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +14 -0
  203. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +33 -2
  204. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +0 -3
  205. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  206. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -0
  207. package/deps/rocksdb/rocksdb/memory/arena_test.cc +18 -11
  208. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +2 -1
  209. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +69 -34
  210. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +16 -1
  211. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +10 -0
  212. package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
  213. package/deps/rocksdb/rocksdb/options/cf_options.h +10 -2
  214. package/deps/rocksdb/rocksdb/options/customizable_test.cc +2 -1
  215. package/deps/rocksdb/rocksdb/options/db_options.cc +7 -0
  216. package/deps/rocksdb/rocksdb/options/db_options.h +1 -0
  217. package/deps/rocksdb/rocksdb/options/options.cc +15 -1
  218. package/deps/rocksdb/rocksdb/options/options_helper.cc +6 -0
  219. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +11 -3
  220. package/deps/rocksdb/rocksdb/options/options_test.cc +8 -0
  221. package/deps/rocksdb/rocksdb/port/mmap.h +20 -0
  222. package/deps/rocksdb/rocksdb/port/stack_trace.cc +27 -12
  223. package/deps/rocksdb/rocksdb/port/win/env_win.h +1 -1
  224. package/deps/rocksdb/rocksdb/src.mk +3 -0
  225. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  226. package/deps/rocksdb/rocksdb/table/block_based/block.cc +48 -22
  227. package/deps/rocksdb/rocksdb/table/block_based/block.h +60 -12
  228. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +115 -42
  229. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +6 -5
  230. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +60 -2
  231. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +2 -0
  232. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +62 -44
  233. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +36 -14
  234. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +38 -15
  235. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +219 -51
  236. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +41 -8
  237. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -1
  238. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +50 -21
  239. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +11 -4
  240. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +195 -55
  241. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  242. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +31 -16
  243. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +97 -58
  244. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +1 -1
  245. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +6 -0
  246. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +27 -12
  247. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +3 -1
  248. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +114 -70
  249. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +1 -2
  250. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +9 -6
  251. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +15 -3
  252. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +6 -3
  253. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +11 -11
  254. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +3 -0
  255. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +1 -0
  256. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +6 -2
  257. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -2
  258. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +2 -3
  259. package/deps/rocksdb/rocksdb/table/format.cc +175 -33
  260. package/deps/rocksdb/rocksdb/table/format.h +63 -10
  261. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +10 -2
  262. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +12 -4
  263. package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -0
  264. package/deps/rocksdb/rocksdb/table/mock_table.cc +8 -3
  265. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +10 -5
  266. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +10 -1
  267. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +1 -2
  268. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +3 -3
  269. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +12 -3
  270. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +26 -1
  271. package/deps/rocksdb/rocksdb/table/table_builder.h +6 -2
  272. package/deps/rocksdb/rocksdb/table/table_properties.cc +6 -0
  273. package/deps/rocksdb/rocksdb/table/table_test.cc +52 -22
  274. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +19 -7
  275. package/deps/rocksdb/rocksdb/test_util/sync_point.h +3 -1
  276. package/deps/rocksdb/rocksdb/test_util/testutil.cc +29 -0
  277. package/deps/rocksdb/rocksdb/test_util/testutil.h +19 -0
  278. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +65 -26
  279. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +8 -5
  280. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -0
  281. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
  282. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +0 -1
  283. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +4 -0
  284. package/deps/rocksdb/rocksdb/unreleased_history/README.txt +73 -0
  285. package/deps/rocksdb/rocksdb/unreleased_history/add.sh +27 -0
  286. package/deps/rocksdb/rocksdb/unreleased_history/behavior_changes/.gitkeep +0 -0
  287. package/deps/rocksdb/rocksdb/unreleased_history/bug_fixes/.gitkeep +0 -0
  288. package/deps/rocksdb/rocksdb/unreleased_history/new_features/.gitkeep +0 -0
  289. package/deps/rocksdb/rocksdb/unreleased_history/performance_improvements/.gitkeep +0 -0
  290. package/deps/rocksdb/rocksdb/unreleased_history/public_api_changes/.gitkeep +0 -0
  291. package/deps/rocksdb/rocksdb/unreleased_history/release.sh +104 -0
  292. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +5 -0
  293. package/deps/rocksdb/rocksdb/util/bloom_impl.h +3 -3
  294. package/deps/rocksdb/rocksdb/util/cast_util.h +14 -0
  295. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +2 -0
  296. package/deps/rocksdb/rocksdb/util/comparator.cc +29 -7
  297. package/deps/rocksdb/rocksdb/util/compression.cc +4 -4
  298. package/deps/rocksdb/rocksdb/util/compression.h +110 -32
  299. package/deps/rocksdb/rocksdb/util/core_local.h +2 -1
  300. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +4 -4
  301. package/deps/rocksdb/rocksdb/util/filelock_test.cc +3 -0
  302. package/deps/rocksdb/rocksdb/util/hash.h +7 -3
  303. package/deps/rocksdb/rocksdb/util/hash_test.cc +44 -0
  304. package/deps/rocksdb/rocksdb/util/math.h +58 -6
  305. package/deps/rocksdb/rocksdb/util/math128.h +29 -7
  306. package/deps/rocksdb/rocksdb/util/mutexlock.h +35 -27
  307. package/deps/rocksdb/rocksdb/util/single_thread_executor.h +1 -0
  308. package/deps/rocksdb/rocksdb/util/stop_watch.h +1 -1
  309. package/deps/rocksdb/rocksdb/util/thread_operation.h +8 -1
  310. package/deps/rocksdb/rocksdb/util/udt_util.cc +343 -0
  311. package/deps/rocksdb/rocksdb/util/udt_util.h +173 -1
  312. package/deps/rocksdb/rocksdb/util/udt_util_test.cc +447 -0
  313. package/deps/rocksdb/rocksdb/util/write_batch_util.cc +25 -0
  314. package/deps/rocksdb/rocksdb/util/write_batch_util.h +80 -0
  315. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +4 -4
  316. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +69 -25
  317. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +7 -6
  318. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +1 -1
  319. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -3
  320. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +6 -11
  321. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +1 -2
  322. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +4 -5
  323. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +1 -1
  324. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +2 -2
  325. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +2 -1
  326. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +3 -3
  327. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
  328. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +2 -3
  329. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +2 -2
  330. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  331. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +23 -8
  332. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +9 -6
  333. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +37 -12
  334. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +231 -33
  335. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +0 -1
  336. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +76 -20
  337. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +18 -9
  338. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +40 -23
  339. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +13 -12
  340. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +7 -0
  341. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -1
  342. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +41 -11
  343. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +6 -3
  344. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +71 -24
  345. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +19 -4
  346. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +60 -107
  347. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +39 -11
  348. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +6 -3
  349. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +14 -8
  350. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +1 -1
  351. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +10 -5
  352. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
  353. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -1
  354. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +2 -1
  355. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +6 -6
  356. package/deps/rocksdb/rocksdb.gyp +2 -0
  357. package/package.json +1 -1
  358. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  359. package/prebuilds/linux-x64/node.napi.node +0 -0
@@ -442,7 +442,7 @@ class NonBatchedOpsStressTest : public StressTest {
442
442
  if (!s.ok()) {
443
443
  fprintf(stderr, "dropping column family error: %s\n",
444
444
  s.ToString().c_str());
445
- std::terminate();
445
+ thread->shared->SafeTerminate();
446
446
  }
447
447
  s = db_->CreateColumnFamily(ColumnFamilyOptions(options_), new_name,
448
448
  &column_families_[cf]);
@@ -451,7 +451,7 @@ class NonBatchedOpsStressTest : public StressTest {
451
451
  if (!s.ok()) {
452
452
  fprintf(stderr, "creating column family error: %s\n",
453
453
  s.ToString().c_str());
454
- std::terminate();
454
+ thread->shared->SafeTerminate();
455
455
  }
456
456
  thread->shared->UnlockColumnFamily(cf);
457
457
  }
@@ -571,13 +571,21 @@ class NonBatchedOpsStressTest : public StressTest {
571
571
  keys.reserve(num_keys);
572
572
  std::vector<PinnableSlice> values(num_keys);
573
573
  std::vector<Status> statuses(num_keys);
574
- ColumnFamilyHandle* cfh = column_families_[rand_column_families[0]];
574
+ // When Flags_use_txn is enabled, we also do a read your write check.
575
+ std::vector<std::optional<ExpectedValue>> ryw_expected_values;
576
+ ryw_expected_values.reserve(num_keys);
577
+
578
+ SharedState* shared = thread->shared;
579
+
580
+ int column_family = rand_column_families[0];
581
+ ColumnFamilyHandle* cfh = column_families_[column_family];
575
582
  int error_count = 0;
576
583
  // Do a consistency check between Get and MultiGet. Don't do it too
577
584
  // often as it will slow db_stress down
578
585
  bool do_consistency_check = thread->rand.OneIn(4);
579
586
 
580
587
  ReadOptions readoptionscopy = read_opts;
588
+
581
589
  if (do_consistency_check) {
582
590
  readoptionscopy.snapshot = db_->GetSnapshot();
583
591
  }
@@ -596,7 +604,7 @@ class NonBatchedOpsStressTest : public StressTest {
596
604
  // Create a transaction in order to write some data. The purpose is to
597
605
  // exercise WriteBatchWithIndex::MultiGetFromBatchAndDB. The transaction
598
606
  // will be rolled back once MultiGet returns.
599
- Transaction* txn = nullptr;
607
+ std::unique_ptr<Transaction> txn;
600
608
  if (use_txn) {
601
609
  WriteOptions wo;
602
610
  if (FLAGS_rate_limit_auto_wal_flush) {
@@ -605,25 +613,36 @@ class NonBatchedOpsStressTest : public StressTest {
605
613
  Status s = NewTxn(wo, &txn);
606
614
  if (!s.ok()) {
607
615
  fprintf(stderr, "NewTxn: %s\n", s.ToString().c_str());
608
- std::terminate();
616
+ thread->shared->SafeTerminate();
609
617
  }
610
618
  }
611
619
  for (size_t i = 0; i < num_keys; ++i) {
612
- key_str.emplace_back(Key(rand_keys[i]));
620
+ uint64_t rand_key = rand_keys[i];
621
+ key_str.emplace_back(Key(rand_key));
613
622
  keys.emplace_back(key_str.back());
614
623
  if (use_txn) {
624
+ if (!shared->AllowsOverwrite(rand_key) &&
625
+ shared->Exists(column_family, rand_key)) {
626
+ // Just do read your write checks for keys that allow overwrites.
627
+ ryw_expected_values.push_back(std::nullopt);
628
+ continue;
629
+ }
615
630
  // With a 1 in 10 probability, insert the just added key in the batch
616
631
  // into the transaction. This will create an overlap with the MultiGet
617
632
  // keys and exercise some corner cases in the code
618
633
  if (thread->rand.OneIn(10)) {
619
634
  int op = thread->rand.Uniform(2);
620
635
  Status s;
636
+ assert(txn);
621
637
  switch (op) {
622
638
  case 0:
623
639
  case 1: {
624
- const uint32_t value_base = 0;
640
+ ExpectedValue put_value;
641
+ put_value.Put(false /* pending */);
642
+ ryw_expected_values.emplace_back(put_value);
625
643
  char value[100];
626
- size_t sz = GenerateValue(value_base, value, sizeof(value));
644
+ size_t sz =
645
+ GenerateValue(put_value.GetValueBase(), value, sizeof(value));
627
646
  Slice v(value, sz);
628
647
  if (op == 0) {
629
648
  s = txn->Put(cfh, keys.back(), v);
@@ -632,16 +651,22 @@ class NonBatchedOpsStressTest : public StressTest {
632
651
  }
633
652
  break;
634
653
  }
635
- case 2:
654
+ case 2: {
655
+ ExpectedValue delete_value;
656
+ delete_value.Delete(false /* pending */);
657
+ ryw_expected_values.emplace_back(delete_value);
636
658
  s = txn->Delete(cfh, keys.back());
637
659
  break;
660
+ }
638
661
  default:
639
662
  assert(false);
640
663
  }
641
664
  if (!s.ok()) {
642
665
  fprintf(stderr, "Transaction put: %s\n", s.ToString().c_str());
643
- std::terminate();
666
+ thread->shared->SafeTerminate();
644
667
  }
668
+ } else {
669
+ ryw_expected_values.push_back(std::nullopt);
645
670
  }
646
671
  }
647
672
  }
@@ -657,6 +682,7 @@ class NonBatchedOpsStressTest : public StressTest {
657
682
  error_count = fault_fs_guard->GetAndResetErrorCount();
658
683
  }
659
684
  } else {
685
+ assert(txn);
660
686
  txn->MultiGet(readoptionscopy, cfh, num_keys, keys.data(), values.data(),
661
687
  statuses.data());
662
688
  }
@@ -685,50 +711,127 @@ class NonBatchedOpsStressTest : public StressTest {
685
711
  fault_fs_guard->DisableErrorInjection();
686
712
  }
687
713
 
688
- for (size_t i = 0; i < statuses.size(); ++i) {
689
- Status s = statuses[i];
714
+ auto ryw_check =
715
+ [](const Slice& key, const PinnableSlice& value, const Status& s,
716
+ const std::optional<ExpectedValue>& ryw_expected_value) -> bool {
717
+ if (!ryw_expected_value.has_value()) {
718
+ return true;
719
+ }
720
+ const ExpectedValue& expected = ryw_expected_value.value();
721
+ char expected_value[100];
722
+ if (s.ok() &&
723
+ ExpectedValueHelper::MustHaveNotExisted(expected, expected)) {
724
+ fprintf(stderr,
725
+ "MultiGet returned value different from what was "
726
+ "written for key %s\n",
727
+ key.ToString(true).c_str());
728
+ fprintf(stderr,
729
+ "MultiGet returned ok, transaction has non-committed "
730
+ "delete.\n");
731
+ return false;
732
+ } else if (s.IsNotFound() &&
733
+ ExpectedValueHelper::MustHaveExisted(expected, expected)) {
734
+ fprintf(stderr,
735
+ "MultiGet returned value different from what was "
736
+ "written for key %s\n",
737
+ key.ToString(true).c_str());
738
+ fprintf(stderr,
739
+ "MultiGet returned not found, transaction has "
740
+ "non-committed value.\n");
741
+ return false;
742
+ } else if (s.ok() &&
743
+ ExpectedValueHelper::MustHaveExisted(expected, expected)) {
744
+ Slice from_txn_slice(value);
745
+ size_t sz = GenerateValue(expected.GetValueBase(), expected_value,
746
+ sizeof(expected_value));
747
+ Slice expected_value_slice(expected_value, sz);
748
+ if (expected_value_slice.compare(from_txn_slice) == 0) {
749
+ return true;
750
+ }
751
+ fprintf(stderr,
752
+ "MultiGet returned value different from what was "
753
+ "written for key %s\n",
754
+ key.ToString(true /* hex */).c_str());
755
+ fprintf(stderr, "MultiGet returned value %s\n",
756
+ from_txn_slice.ToString(true /* hex */).c_str());
757
+ fprintf(stderr, "Transaction has non-committed value %s\n",
758
+ expected_value_slice.ToString(true /* hex */).c_str());
759
+ return false;
760
+ }
761
+ return true;
762
+ };
763
+
764
+ auto check_multiget =
765
+ [&](const Slice& key, const PinnableSlice& expected_value,
766
+ const Status& s,
767
+ const std::optional<ExpectedValue>& ryw_expected_value) -> bool {
690
768
  bool is_consistent = true;
691
- // Only do the consistency check if no error was injected and MultiGet
692
- // didn't return an unexpected error
769
+ bool is_ryw_correct = true;
770
+ // Only do the consistency check if no error was injected and
771
+ // MultiGet didn't return an unexpected error. If test does not use
772
+ // transaction, the consistency check for each key included check results
773
+ // from db `Get` and db `MultiGet` are consistent.
774
+ // If test use transaction, after consistency check, also do a read your
775
+ // own write check.
693
776
  if (do_consistency_check && !error_count && (s.ok() || s.IsNotFound())) {
694
777
  Status tmp_s;
695
778
  std::string value;
696
779
 
697
780
  if (use_txn) {
698
- tmp_s = txn->Get(readoptionscopy, cfh, keys[i], &value);
781
+ assert(txn);
782
+ ThreadStatusUtil::SetThreadOperation(
783
+ ThreadStatus::OperationType::OP_GET);
784
+ tmp_s = txn->Get(readoptionscopy, cfh, key, &value);
785
+ ThreadStatusUtil::SetThreadOperation(
786
+ ThreadStatus::OperationType::OP_MULTIGET);
699
787
  } else {
700
- tmp_s = db_->Get(readoptionscopy, cfh, keys[i], &value);
788
+ ThreadStatusUtil::SetThreadOperation(
789
+ ThreadStatus::OperationType::OP_GET);
790
+ tmp_s = db_->Get(readoptionscopy, cfh, key, &value);
791
+ ThreadStatusUtil::SetThreadOperation(
792
+ ThreadStatus::OperationType::OP_MULTIGET);
701
793
  }
702
794
  if (!tmp_s.ok() && !tmp_s.IsNotFound()) {
703
795
  fprintf(stderr, "Get error: %s\n", s.ToString().c_str());
704
796
  is_consistent = false;
705
797
  } else if (!s.ok() && tmp_s.ok()) {
706
798
  fprintf(stderr, "MultiGet returned different results with key %s\n",
707
- keys[i].ToString(true).c_str());
799
+ key.ToString(true).c_str());
708
800
  fprintf(stderr, "Get returned ok, MultiGet returned not found\n");
709
801
  is_consistent = false;
710
802
  } else if (s.ok() && tmp_s.IsNotFound()) {
711
803
  fprintf(stderr, "MultiGet returned different results with key %s\n",
712
- keys[i].ToString(true).c_str());
804
+ key.ToString(true).c_str());
713
805
  fprintf(stderr, "MultiGet returned ok, Get returned not found\n");
714
806
  is_consistent = false;
715
- } else if (s.ok() && value != values[i].ToString()) {
807
+ } else if (s.ok() && value != expected_value.ToString()) {
716
808
  fprintf(stderr, "MultiGet returned different results with key %s\n",
717
- keys[i].ToString(true).c_str());
809
+ key.ToString(true).c_str());
718
810
  fprintf(stderr, "MultiGet returned value %s\n",
719
- values[i].ToString(true).c_str());
811
+ expected_value.ToString(true).c_str());
720
812
  fprintf(stderr, "Get returned value %s\n",
721
813
  Slice(value).ToString(true /* hex */).c_str());
722
814
  is_consistent = false;
723
815
  }
724
816
  }
725
817
 
818
+ // If test uses transaction, continue to do a read your own write check.
819
+ if (is_consistent && use_txn) {
820
+ is_ryw_correct = ryw_check(key, expected_value, s, ryw_expected_value);
821
+ }
822
+
726
823
  if (!is_consistent) {
727
824
  fprintf(stderr, "TestMultiGet error: is_consistent is false\n");
728
825
  thread->stats.AddErrors(1);
729
826
  // Fail fast to preserve the DB state
730
827
  thread->shared->SetVerificationFailure();
731
- break;
828
+ return false;
829
+ } else if (!is_ryw_correct) {
830
+ fprintf(stderr, "TestMultiGet error: is_ryw_correct is false\n");
831
+ thread->stats.AddErrors(1);
832
+ // Fail fast to preserve the DB state
833
+ thread->shared->SetVerificationFailure();
834
+ return false;
732
835
  } else if (s.ok()) {
733
836
  // found case
734
837
  thread->stats.AddGets(1, 1);
@@ -747,13 +850,32 @@ class NonBatchedOpsStressTest : public StressTest {
747
850
  thread->stats.AddVerifiedErrors(1);
748
851
  }
749
852
  }
853
+ return true;
854
+ };
855
+
856
+ size_t num_of_keys = keys.size();
857
+ assert(values.size() == num_of_keys);
858
+ assert(statuses.size() == num_of_keys);
859
+ for (size_t i = 0; i < num_of_keys; ++i) {
860
+ bool check_result = true;
861
+ if (use_txn) {
862
+ assert(ryw_expected_values.size() == num_of_keys);
863
+ check_result = check_multiget(keys[i], values[i], statuses[i],
864
+ ryw_expected_values[i]);
865
+ } else {
866
+ check_result = check_multiget(keys[i], values[i], statuses[i],
867
+ std::nullopt /* ryw_expected_value */);
868
+ }
869
+ if (!check_result) {
870
+ break;
871
+ }
750
872
  }
751
873
 
752
874
  if (readoptionscopy.snapshot) {
753
875
  db_->ReleaseSnapshot(readoptionscopy.snapshot);
754
876
  }
755
877
  if (use_txn) {
756
- RollbackTxn(txn);
878
+ txn->Rollback().PermitUncheckedError();
757
879
  }
758
880
  return statuses;
759
881
  }
@@ -1165,14 +1287,9 @@ class NonBatchedOpsStressTest : public StressTest {
1165
1287
  s = db_->Merge(write_opts, cfh, k, write_ts, v);
1166
1288
  }
1167
1289
  } else {
1168
- Transaction* txn;
1169
- s = NewTxn(write_opts, &txn);
1170
- if (s.ok()) {
1171
- s = txn->Merge(cfh, k, v);
1172
- if (s.ok()) {
1173
- s = CommitTxn(txn, thread);
1174
- }
1175
- }
1290
+ s = ExecuteTransaction(write_opts, thread, [&](Transaction& txn) {
1291
+ return txn.Merge(cfh, k, v);
1292
+ });
1176
1293
  }
1177
1294
  } else if (FLAGS_use_put_entity_one_in > 0 &&
1178
1295
  (value_base % FLAGS_use_put_entity_one_in) == 0) {
@@ -1186,14 +1303,9 @@ class NonBatchedOpsStressTest : public StressTest {
1186
1303
  s = db_->Put(write_opts, cfh, k, write_ts, v);
1187
1304
  }
1188
1305
  } else {
1189
- Transaction* txn;
1190
- s = NewTxn(write_opts, &txn);
1191
- if (s.ok()) {
1192
- s = txn->Put(cfh, k, v);
1193
- if (s.ok()) {
1194
- s = CommitTxn(txn, thread);
1195
- }
1196
- }
1306
+ s = ExecuteTransaction(write_opts, thread, [&](Transaction& txn) {
1307
+ return txn.Put(cfh, k, v);
1308
+ });
1197
1309
  }
1198
1310
  }
1199
1311
 
@@ -1206,11 +1318,11 @@ class NonBatchedOpsStressTest : public StressTest {
1206
1318
  } else if (!is_db_stopped_ ||
1207
1319
  s.severity() < Status::Severity::kFatalError) {
1208
1320
  fprintf(stderr, "put or merge error: %s\n", s.ToString().c_str());
1209
- std::terminate();
1321
+ thread->shared->SafeTerminate();
1210
1322
  }
1211
1323
  } else {
1212
1324
  fprintf(stderr, "put or merge error: %s\n", s.ToString().c_str());
1213
- std::terminate();
1325
+ thread->shared->SafeTerminate();
1214
1326
  }
1215
1327
  }
1216
1328
 
@@ -1251,14 +1363,9 @@ class NonBatchedOpsStressTest : public StressTest {
1251
1363
  s = db_->Delete(write_opts, cfh, key, write_ts);
1252
1364
  }
1253
1365
  } else {
1254
- Transaction* txn;
1255
- s = NewTxn(write_opts, &txn);
1256
- if (s.ok()) {
1257
- s = txn->Delete(cfh, key);
1258
- if (s.ok()) {
1259
- s = CommitTxn(txn, thread);
1260
- }
1261
- }
1366
+ s = ExecuteTransaction(write_opts, thread, [&](Transaction& txn) {
1367
+ return txn.Delete(cfh, key);
1368
+ });
1262
1369
  }
1263
1370
  pending_expected_value.Commit();
1264
1371
 
@@ -1271,11 +1378,11 @@ class NonBatchedOpsStressTest : public StressTest {
1271
1378
  } else if (!is_db_stopped_ ||
1272
1379
  s.severity() < Status::Severity::kFatalError) {
1273
1380
  fprintf(stderr, "delete error: %s\n", s.ToString().c_str());
1274
- std::terminate();
1381
+ thread->shared->SafeTerminate();
1275
1382
  }
1276
1383
  } else {
1277
1384
  fprintf(stderr, "delete error: %s\n", s.ToString().c_str());
1278
- std::terminate();
1385
+ thread->shared->SafeTerminate();
1279
1386
  }
1280
1387
  }
1281
1388
  } else {
@@ -1288,14 +1395,9 @@ class NonBatchedOpsStressTest : public StressTest {
1288
1395
  s = db_->SingleDelete(write_opts, cfh, key, write_ts);
1289
1396
  }
1290
1397
  } else {
1291
- Transaction* txn;
1292
- s = NewTxn(write_opts, &txn);
1293
- if (s.ok()) {
1294
- s = txn->SingleDelete(cfh, key);
1295
- if (s.ok()) {
1296
- s = CommitTxn(txn, thread);
1297
- }
1298
- }
1398
+ s = ExecuteTransaction(write_opts, thread, [&](Transaction& txn) {
1399
+ return txn.SingleDelete(cfh, key);
1400
+ });
1299
1401
  }
1300
1402
  pending_expected_value.Commit();
1301
1403
  thread->stats.AddSingleDeletes(1);
@@ -1307,11 +1409,11 @@ class NonBatchedOpsStressTest : public StressTest {
1307
1409
  } else if (!is_db_stopped_ ||
1308
1410
  s.severity() < Status::Severity::kFatalError) {
1309
1411
  fprintf(stderr, "single delete error: %s\n", s.ToString().c_str());
1310
- std::terminate();
1412
+ thread->shared->SafeTerminate();
1311
1413
  }
1312
1414
  } else {
1313
1415
  fprintf(stderr, "single delete error: %s\n", s.ToString().c_str());
1314
- std::terminate();
1416
+ thread->shared->SafeTerminate();
1315
1417
  }
1316
1418
  }
1317
1419
  }
@@ -1368,11 +1470,11 @@ class NonBatchedOpsStressTest : public StressTest {
1368
1470
  } else if (!is_db_stopped_ ||
1369
1471
  s.severity() < Status::Severity::kFatalError) {
1370
1472
  fprintf(stderr, "delete range error: %s\n", s.ToString().c_str());
1371
- std::terminate();
1473
+ thread->shared->SafeTerminate();
1372
1474
  }
1373
1475
  } else {
1374
1476
  fprintf(stderr, "delete range error: %s\n", s.ToString().c_str());
1375
- std::terminate();
1477
+ thread->shared->SafeTerminate();
1376
1478
  }
1377
1479
  }
1378
1480
  for (PendingExpectedValue& pending_expected_value :
@@ -1436,9 +1538,21 @@ class NonBatchedOpsStressTest : public StressTest {
1436
1538
  pending_expected_values.push_back(pending_expected_value);
1437
1539
 
1438
1540
  char value[100];
1439
- size_t value_len = GenerateValue(value_base, value, sizeof(value));
1440
1541
  auto key_str = Key(key);
1441
- s = sst_file_writer.Put(Slice(key_str), Slice(value, value_len));
1542
+ const size_t value_len = GenerateValue(value_base, value, sizeof(value));
1543
+ const Slice k(key_str);
1544
+ const Slice v(value, value_len);
1545
+
1546
+ const bool use_put_entity =
1547
+ !FLAGS_use_merge && FLAGS_use_put_entity_one_in > 0 &&
1548
+ (value_base % FLAGS_use_put_entity_one_in) == 0;
1549
+
1550
+ if (use_put_entity) {
1551
+ WideColumns columns = GenerateWideColumns(value_base, v);
1552
+ s = sst_file_writer.PutEntity(k, columns);
1553
+ } else {
1554
+ s = sst_file_writer.Put(k, v);
1555
+ }
1442
1556
  }
1443
1557
 
1444
1558
  if (s.ok() && keys.empty()) {
@@ -1454,7 +1568,7 @@ class NonBatchedOpsStressTest : public StressTest {
1454
1568
  }
1455
1569
  if (!s.ok()) {
1456
1570
  fprintf(stderr, "file ingestion error: %s\n", s.ToString().c_str());
1457
- std::terminate();
1571
+ thread->shared->SafeTerminate();
1458
1572
  }
1459
1573
 
1460
1574
  for (size_t i = 0; i < pending_expected_values.size(); ++i) {
@@ -1487,8 +1601,6 @@ class NonBatchedOpsStressTest : public StressTest {
1487
1601
 
1488
1602
  const int64_t ub = lb + num_iter;
1489
1603
 
1490
- // Lock the whole range over which we might iterate to ensure it doesn't
1491
- // change under us.
1492
1604
  const int rand_column_family = rand_column_families[0];
1493
1605
 
1494
1606
  // Testing parallel read and write to the same key with user timestamp
@@ -1499,7 +1611,9 @@ class NonBatchedOpsStressTest : public StressTest {
1499
1611
  }
1500
1612
 
1501
1613
  ReadOptions ro(read_opts);
1502
- ro.total_order_seek = true;
1614
+ if (FLAGS_prefix_size > 0) {
1615
+ ro.total_order_seek = true;
1616
+ }
1503
1617
 
1504
1618
  std::string read_ts_str;
1505
1619
  Slice read_ts;
@@ -1567,6 +1681,7 @@ class NonBatchedOpsStressTest : public StressTest {
1567
1681
  };
1568
1682
 
1569
1683
  auto check_no_key_in_range = [&](int64_t start, int64_t end) {
1684
+ assert(start <= end);
1570
1685
  for (auto j = std::max(start, lb); j < std::min(end, ub); ++j) {
1571
1686
  std::size_t index = static_cast<std::size_t>(j - lb);
1572
1687
  assert(index < pre_read_expected_values.size() &&
@@ -1609,6 +1724,7 @@ class NonBatchedOpsStressTest : public StressTest {
1609
1724
 
1610
1725
  uint64_t curr = 0;
1611
1726
  while (true) {
1727
+ assert(last_key < ub);
1612
1728
  if (!iter->Valid()) {
1613
1729
  if (!iter->status().ok()) {
1614
1730
  thread->shared->SetVerificationFailure();
@@ -1631,6 +1747,18 @@ class NonBatchedOpsStressTest : public StressTest {
1631
1747
 
1632
1748
  // iter is valid, the range (last_key, current key) was skipped
1633
1749
  GetIntVal(iter->key().ToString(), &curr);
1750
+ if (static_cast<int64_t>(curr) <= last_key) {
1751
+ thread->shared->SetVerificationFailure();
1752
+ fprintf(stderr,
1753
+ "TestIterateAgainstExpected found unexpectedly small key\n");
1754
+ fprintf(stderr, "Column family: %s, op_logs: %s\n",
1755
+ cfh->GetName().c_str(), op_logs.c_str());
1756
+ fprintf(stderr, "Last op found key: %s, expected at least: %s\n",
1757
+ Slice(Key(curr)).ToString(true).c_str(),
1758
+ Slice(Key(last_key + 1)).ToString(true).c_str());
1759
+ thread->stats.AddErrors(1);
1760
+ return Status::OK();
1761
+ }
1634
1762
  if (!check_no_key_in_range(last_key + 1, static_cast<int64_t>(curr))) {
1635
1763
  return Status::OK();
1636
1764
  }
@@ -1653,6 +1781,7 @@ class NonBatchedOpsStressTest : public StressTest {
1653
1781
 
1654
1782
  last_key = ub;
1655
1783
  while (true) {
1784
+ assert(lb < last_key);
1656
1785
  if (!iter->Valid()) {
1657
1786
  if (!iter->status().ok()) {
1658
1787
  thread->shared->SetVerificationFailure();
@@ -1675,6 +1804,18 @@ class NonBatchedOpsStressTest : public StressTest {
1675
1804
 
1676
1805
  // the range (current key, last key) was skipped
1677
1806
  GetIntVal(iter->key().ToString(), &curr);
1807
+ if (last_key <= static_cast<int64_t>(curr)) {
1808
+ thread->shared->SetVerificationFailure();
1809
+ fprintf(stderr,
1810
+ "TestIterateAgainstExpected found unexpectedly large key\n");
1811
+ fprintf(stderr, "Column family: %s, op_logs: %s\n",
1812
+ cfh->GetName().c_str(), op_logs.c_str());
1813
+ fprintf(stderr, "Last op found key: %s, expected at most: %s\n",
1814
+ Slice(Key(curr)).ToString(true).c_str(),
1815
+ Slice(Key(last_key - 1)).ToString(true).c_str());
1816
+ thread->stats.AddErrors(1);
1817
+ return Status::OK();
1818
+ }
1678
1819
  if (!check_no_key_in_range(static_cast<int64_t>(curr + 1), last_key)) {
1679
1820
  return Status::OK();
1680
1821
  }
@@ -1723,6 +1864,20 @@ class NonBatchedOpsStressTest : public StressTest {
1723
1864
  if (!check_no_key_in_range(mid, ub)) {
1724
1865
  return Status::OK();
1725
1866
  }
1867
+ } else if (iter->Valid()) {
1868
+ GetIntVal(iter->key().ToString(), &curr);
1869
+ if (static_cast<int64_t>(curr) < mid) {
1870
+ thread->shared->SetVerificationFailure();
1871
+ fprintf(stderr,
1872
+ "TestIterateAgainstExpected found unexpectedly small key\n");
1873
+ fprintf(stderr, "Column family: %s, op_logs: %s\n",
1874
+ cfh->GetName().c_str(), op_logs.c_str());
1875
+ fprintf(stderr, "Last op found key: %s, expected at least: %s\n",
1876
+ Slice(Key(curr)).ToString(true).c_str(),
1877
+ Slice(Key(mid)).ToString(true).c_str());
1878
+ thread->stats.AddErrors(1);
1879
+ return Status::OK();
1880
+ }
1726
1881
  }
1727
1882
  } else {
1728
1883
  iter->SeekForPrev(key);
@@ -1732,6 +1887,20 @@ class NonBatchedOpsStressTest : public StressTest {
1732
1887
  if (!check_no_key_in_range(lb, mid + 1)) {
1733
1888
  return Status::OK();
1734
1889
  }
1890
+ } else if (iter->Valid()) {
1891
+ GetIntVal(iter->key().ToString(), &curr);
1892
+ if (mid < static_cast<int64_t>(curr)) {
1893
+ thread->shared->SetVerificationFailure();
1894
+ fprintf(stderr,
1895
+ "TestIterateAgainstExpected found unexpectedly large key\n");
1896
+ fprintf(stderr, "Column family: %s, op_logs: %s\n",
1897
+ cfh->GetName().c_str(), op_logs.c_str());
1898
+ fprintf(stderr, "Last op found key: %s, expected at most: %s\n",
1899
+ Slice(Key(curr)).ToString(true).c_str(),
1900
+ Slice(Key(mid)).ToString(true).c_str());
1901
+ thread->stats.AddErrors(1);
1902
+ return Status::OK();
1903
+ }
1735
1904
  }
1736
1905
  }
1737
1906
 
@@ -1779,6 +1948,19 @@ class NonBatchedOpsStressTest : public StressTest {
1779
1948
  }
1780
1949
  uint64_t next = 0;
1781
1950
  GetIntVal(iter->key().ToString(), &next);
1951
+ if (next <= curr) {
1952
+ thread->shared->SetVerificationFailure();
1953
+ fprintf(
1954
+ stderr,
1955
+ "TestIterateAgainstExpected found unexpectedly small key\n");
1956
+ fprintf(stderr, "Column family: %s, op_logs: %s\n",
1957
+ cfh->GetName().c_str(), op_logs.c_str());
1958
+ fprintf(stderr, "Last op found key: %s, expected at least: %s\n",
1959
+ Slice(Key(next)).ToString(true).c_str(),
1960
+ Slice(Key(curr + 1)).ToString(true).c_str());
1961
+ thread->stats.AddErrors(1);
1962
+ return Status::OK();
1963
+ }
1782
1964
  if (!check_no_key_in_range(static_cast<int64_t>(curr + 1),
1783
1965
  static_cast<int64_t>(next))) {
1784
1966
  return Status::OK();
@@ -1791,6 +1973,19 @@ class NonBatchedOpsStressTest : public StressTest {
1791
1973
  }
1792
1974
  uint64_t prev = 0;
1793
1975
  GetIntVal(iter->key().ToString(), &prev);
1976
+ if (curr <= prev) {
1977
+ thread->shared->SetVerificationFailure();
1978
+ fprintf(
1979
+ stderr,
1980
+ "TestIterateAgainstExpected found unexpectedly large key\n");
1981
+ fprintf(stderr, "Column family: %s, op_logs: %s\n",
1982
+ cfh->GetName().c_str(), op_logs.c_str());
1983
+ fprintf(stderr, "Last op found key: %s, expected at most: %s\n",
1984
+ Slice(Key(prev)).ToString(true).c_str(),
1985
+ Slice(Key(curr - 1)).ToString(true).c_str());
1986
+ thread->stats.AddErrors(1);
1987
+ return Status::OK();
1988
+ }
1794
1989
  if (!check_no_key_in_range(static_cast<int64_t>(prev + 1),
1795
1990
  static_cast<int64_t>(curr))) {
1796
1991
  return Status::OK();
@@ -159,8 +159,7 @@ class LegacyRandomAccessFileWrapper : public FSRandomAccessFile {
159
159
  req.len = fs_reqs[i].len;
160
160
  req.scratch = fs_reqs[i].scratch;
161
161
  req.status = Status::OK();
162
-
163
- reqs.emplace_back(req);
162
+ reqs.emplace_back(std::move(req));
164
163
  }
165
164
  status = target_->MultiRead(reqs.data(), num_reqs);
166
165
  for (size_t i = 0; i < num_reqs; ++i) {