@nxtedition/rocksdb 5.2.21 → 5.2.28

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 (923) hide show
  1. package/binding.cc +510 -967
  2. package/binding.gyp +78 -72
  3. package/chained-batch.js +1 -2
  4. package/deps/rocksdb/build_version.cc +70 -4
  5. package/deps/rocksdb/rocksdb/CMakeLists.txt +281 -149
  6. package/deps/rocksdb/rocksdb/Makefile +459 -469
  7. package/deps/rocksdb/rocksdb/TARGETS +5244 -1500
  8. package/deps/rocksdb/rocksdb/cache/cache.cc +12 -3
  9. package/deps/rocksdb/rocksdb/cache/cache_bench.cc +7 -368
  10. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +924 -0
  11. package/deps/rocksdb/rocksdb/cache/cache_entry_roles.cc +128 -0
  12. package/deps/rocksdb/rocksdb/cache/cache_entry_roles.h +103 -0
  13. package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +183 -0
  14. package/deps/rocksdb/rocksdb/cache/cache_helpers.h +11 -0
  15. package/deps/rocksdb/rocksdb/cache/cache_key.cc +344 -0
  16. package/deps/rocksdb/rocksdb/cache/cache_key.h +132 -0
  17. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.cc +183 -0
  18. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +288 -0
  19. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager_test.cc +468 -0
  20. package/deps/rocksdb/rocksdb/cache/cache_test.cc +85 -8
  21. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +121 -51
  22. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +171 -0
  23. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +86 -0
  24. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +607 -0
  25. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +381 -154
  26. package/deps/rocksdb/rocksdb/cache/lru_cache.h +176 -33
  27. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +1659 -3
  28. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +94 -23
  29. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +49 -28
  30. package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +7 -0
  31. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +29 -0
  32. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +29 -0
  33. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +29 -0
  34. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +33 -0
  35. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +29 -0
  36. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +29 -0
  37. package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +26 -0
  38. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +29 -0
  39. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +10 -0
  40. package/deps/rocksdb/rocksdb/crash_test.mk +93 -0
  41. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +54 -31
  42. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +10 -6
  43. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator.h +146 -0
  44. package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator_test.cc +326 -0
  45. package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.cc +34 -0
  46. package/deps/rocksdb/rocksdb/db/blob/blob_fetcher.h +37 -0
  47. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition.cc +4 -2
  48. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +8 -4
  49. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +99 -40
  50. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +20 -8
  51. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +95 -83
  52. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +13 -10
  53. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +7 -4
  54. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +37 -37
  55. package/deps/rocksdb/rocksdb/db/blob/blob_file_completion_callback.h +101 -0
  56. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.cc +8 -1
  57. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +6 -0
  58. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +209 -44
  59. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +37 -11
  60. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +382 -179
  61. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.cc +100 -0
  62. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter.h +102 -0
  63. package/deps/rocksdb/rocksdb/db/blob/blob_garbage_meter_test.cc +196 -0
  64. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -0
  65. package/deps/rocksdb/rocksdb/db/blob/blob_log_format.h +2 -1
  66. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +7 -5
  67. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.h +10 -3
  68. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +12 -8
  69. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.h +5 -5
  70. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +772 -9
  71. package/deps/rocksdb/rocksdb/db/blob/db_blob_compaction_test.cc +730 -0
  72. package/deps/rocksdb/rocksdb/db/blob/db_blob_corruption_test.cc +82 -0
  73. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +155 -17
  74. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.cc +21 -0
  75. package/deps/rocksdb/rocksdb/db/blob/prefetch_buffer_collection.h +38 -0
  76. package/deps/rocksdb/rocksdb/db/builder.cc +137 -89
  77. package/deps/rocksdb/rocksdb/db/builder.h +16 -37
  78. package/deps/rocksdb/rocksdb/db/c.cc +413 -208
  79. package/deps/rocksdb/rocksdb/db/c_test.c +227 -138
  80. package/deps/rocksdb/rocksdb/db/column_family.cc +118 -103
  81. package/deps/rocksdb/rocksdb/db/column_family.h +86 -44
  82. package/deps/rocksdb/rocksdb/db/column_family_test.cc +38 -24
  83. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +81 -0
  84. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator.h +275 -0
  85. package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator_test.cc +258 -0
  86. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +81 -28
  87. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +43 -12
  88. package/deps/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h +12 -0
  89. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +406 -215
  90. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +147 -50
  91. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +167 -61
  92. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +1321 -156
  93. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +197 -28
  94. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -3
  95. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +246 -43
  96. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +65 -26
  97. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +7 -7
  98. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +122 -9
  99. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +8 -2
  100. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +18 -6
  101. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +1 -1
  102. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +536 -44
  103. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +311 -30
  104. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +1 -1
  105. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +849 -0
  106. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +92 -0
  107. package/deps/rocksdb/rocksdb/db/compaction/sst_partitioner.cc +46 -0
  108. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
  109. package/deps/rocksdb/rocksdb/db/convenience.cc +6 -3
  110. package/deps/rocksdb/rocksdb/db/corruption_test.cc +383 -28
  111. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +7 -2
  112. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +154 -45
  113. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +1095 -33
  114. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +1249 -203
  115. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +135 -9
  116. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +1348 -166
  117. package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +3 -5
  118. package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +1 -1
  119. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +312 -45
  120. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1734 -48
  121. package/deps/rocksdb/rocksdb/db/{compacted_db_impl.cc → db_impl/compacted_db_impl.cc} +24 -7
  122. package/deps/rocksdb/rocksdb/db/{compacted_db_impl.h → db_impl/compacted_db_impl.h} +1 -1
  123. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +644 -333
  124. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +365 -92
  125. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +578 -210
  126. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +38 -16
  127. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +17 -10
  128. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +75 -74
  129. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +450 -183
  130. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +42 -9
  131. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +232 -15
  132. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +42 -4
  133. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +297 -100
  134. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +16 -15
  135. package/deps/rocksdb/rocksdb/db/db_inplace_update_test.cc +31 -1
  136. package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +6 -5
  137. package/deps/rocksdb/rocksdb/db/db_iter.cc +218 -153
  138. package/deps/rocksdb/rocksdb/db/db_iter.h +14 -12
  139. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +1 -1
  140. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +84 -160
  141. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +47 -6
  142. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +204 -0
  143. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +21 -13
  144. package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +17 -10
  145. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +38 -24
  146. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +184 -19
  147. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +1 -1
  148. package/deps/rocksdb/rocksdb/db/db_options_test.cc +183 -3
  149. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +409 -9
  150. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +92 -23
  151. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +446 -0
  152. package/deps/rocksdb/rocksdb/db/{db_impl/db_secondary_test.cc → db_secondary_test.cc} +363 -35
  153. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +520 -15
  154. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +50 -1
  155. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +139 -4
  156. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +1 -1
  157. package/deps/rocksdb/rocksdb/db/db_test.cc +669 -359
  158. package/deps/rocksdb/rocksdb/db/db_test2.cc +2110 -304
  159. package/deps/rocksdb/rocksdb/db/db_test_util.cc +76 -43
  160. package/deps/rocksdb/rocksdb/db/db_test_util.h +231 -103
  161. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +19 -11
  162. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +490 -71
  163. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +980 -349
  164. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +11 -12
  165. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +793 -0
  166. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -1
  167. package/deps/rocksdb/rocksdb/db/dbformat.cc +4 -12
  168. package/deps/rocksdb/rocksdb/db/dbformat.h +28 -18
  169. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +3 -0
  170. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +50 -15
  171. package/deps/rocksdb/rocksdb/db/error_handler.cc +127 -41
  172. package/deps/rocksdb/rocksdb/db/error_handler.h +12 -5
  173. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +524 -255
  174. package/deps/rocksdb/rocksdb/db/event_helpers.cc +136 -11
  175. package/deps/rocksdb/rocksdb/db/event_helpers.h +27 -2
  176. package/deps/rocksdb/rocksdb/db/experimental.cc +100 -0
  177. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +307 -4
  178. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +137 -60
  179. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +12 -8
  180. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +86 -55
  181. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +86 -5
  182. package/deps/rocksdb/rocksdb/db/filename_test.cc +63 -0
  183. package/deps/rocksdb/rocksdb/db/flush_job.cc +619 -64
  184. package/deps/rocksdb/rocksdb/db/flush_job.h +30 -7
  185. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +33 -16
  186. package/deps/rocksdb/rocksdb/db/flush_scheduler.h +2 -1
  187. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +18 -17
  188. package/deps/rocksdb/rocksdb/db/forward_iterator.h +5 -4
  189. package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +0 -1
  190. package/deps/rocksdb/rocksdb/db/history_trimming_iterator.h +91 -0
  191. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +25 -14
  192. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +6 -5
  193. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +1 -1
  194. package/deps/rocksdb/rocksdb/db/internal_stats.cc +471 -50
  195. package/deps/rocksdb/rocksdb/db/internal_stats.h +129 -25
  196. package/deps/rocksdb/rocksdb/db/job_context.h +22 -9
  197. package/deps/rocksdb/rocksdb/db/kv_checksum.h +394 -0
  198. package/deps/rocksdb/rocksdb/db/listener_test.cc +518 -41
  199. package/deps/rocksdb/rocksdb/db/log_format.h +4 -1
  200. package/deps/rocksdb/rocksdb/db/log_reader.cc +129 -6
  201. package/deps/rocksdb/rocksdb/db/log_reader.h +17 -1
  202. package/deps/rocksdb/rocksdb/db/log_test.cc +161 -11
  203. package/deps/rocksdb/rocksdb/db/log_writer.cc +92 -13
  204. package/deps/rocksdb/rocksdb/db/log_writer.h +18 -5
  205. package/deps/rocksdb/rocksdb/db/logs_with_prep_tracker.h +1 -1
  206. package/deps/rocksdb/rocksdb/db/lookup_key.h +0 -1
  207. package/deps/rocksdb/rocksdb/db/malloc_stats.cc +2 -2
  208. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +21 -8
  209. package/deps/rocksdb/rocksdb/db/memtable.cc +144 -54
  210. package/deps/rocksdb/rocksdb/db/memtable.h +72 -15
  211. package/deps/rocksdb/rocksdb/db/memtable_list.cc +95 -47
  212. package/deps/rocksdb/rocksdb/db/memtable_list.h +33 -13
  213. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +61 -31
  214. package/deps/rocksdb/rocksdb/db/merge_context.h +20 -8
  215. package/deps/rocksdb/rocksdb/db/merge_helper.cc +54 -11
  216. package/deps/rocksdb/rocksdb/db/merge_helper.h +17 -6
  217. package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +13 -7
  218. package/deps/rocksdb/rocksdb/db/merge_test.cc +40 -19
  219. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +14 -25
  220. package/deps/rocksdb/rocksdb/db/output_validator.cc +3 -0
  221. package/deps/rocksdb/rocksdb/db/output_validator.h +5 -4
  222. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +32 -28
  223. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.cc +43 -29
  224. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.h +9 -7
  225. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler_test.cc +21 -16
  226. package/deps/rocksdb/rocksdb/db/pinned_iterators_manager.h +1 -1
  227. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +29 -36
  228. package/deps/rocksdb/rocksdb/db/pre_release_callback.h +1 -2
  229. package/deps/rocksdb/rocksdb/db/prefix_test.cc +4 -4
  230. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +2 -2
  231. package/deps/rocksdb/rocksdb/db/range_del_aggregator_bench.cc +11 -11
  232. package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +3 -2
  233. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +14 -8
  234. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +17 -0
  235. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +4 -2
  236. package/deps/rocksdb/rocksdb/db/read_callback.h +1 -0
  237. package/deps/rocksdb/rocksdb/db/repair.cc +87 -58
  238. package/deps/rocksdb/rocksdb/db/repair_test.cc +35 -5
  239. package/deps/rocksdb/rocksdb/db/snapshot_impl.h +2 -1
  240. package/deps/rocksdb/rocksdb/db/table_cache.cc +95 -69
  241. package/deps/rocksdb/rocksdb/db/table_cache.h +63 -53
  242. package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +4 -4
  243. package/deps/rocksdb/rocksdb/db/table_properties_collector.h +78 -10
  244. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +28 -33
  245. package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +30 -51
  246. package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +12 -8
  247. package/deps/rocksdb/rocksdb/db/version_builder.cc +564 -341
  248. package/deps/rocksdb/rocksdb/db/version_builder.h +8 -8
  249. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +327 -155
  250. package/deps/rocksdb/rocksdb/db/version_edit.cc +89 -27
  251. package/deps/rocksdb/rocksdb/db/version_edit.h +42 -17
  252. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +324 -43
  253. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +79 -22
  254. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +165 -20
  255. package/deps/rocksdb/rocksdb/db/version_set.cc +935 -1034
  256. package/deps/rocksdb/rocksdb/db/version_set.h +183 -122
  257. package/deps/rocksdb/rocksdb/db/version_set_test.cc +556 -138
  258. package/deps/rocksdb/rocksdb/db/version_util.h +68 -0
  259. package/deps/rocksdb/rocksdb/db/wal_manager.cc +23 -21
  260. package/deps/rocksdb/rocksdb/db/wal_manager.h +5 -2
  261. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +30 -27
  262. package/deps/rocksdb/rocksdb/db/write_batch.cc +704 -209
  263. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +135 -2
  264. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +209 -5
  265. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +2 -0
  266. package/deps/rocksdb/rocksdb/db/write_controller.cc +47 -54
  267. package/deps/rocksdb/rocksdb/db/write_controller.h +12 -9
  268. package/deps/rocksdb/rocksdb/db/write_controller_test.cc +215 -103
  269. package/deps/rocksdb/rocksdb/db/write_thread.cc +11 -0
  270. package/deps/rocksdb/rocksdb/db/write_thread.h +14 -8
  271. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +7 -4
  272. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +10 -3
  273. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +6 -0
  274. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress.cc +1 -1
  275. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +19 -2
  276. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +78 -25
  277. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +13 -2
  278. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +29 -12
  279. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +5 -1
  280. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +199 -32
  281. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +188 -0
  282. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +59 -10
  283. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +77 -109
  284. package/deps/rocksdb/rocksdb/{third-party/folly/folly/synchronization/WaitOptions.cpp → db_stress_tool/db_stress_stat.cc} +9 -4
  285. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_stat.h +7 -6
  286. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +1 -0
  287. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +699 -143
  288. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +20 -2
  289. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +49 -39
  290. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +631 -0
  291. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.h +287 -0
  292. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +1565 -0
  293. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +374 -0
  294. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +149 -18
  295. package/deps/rocksdb/rocksdb/env/composite_env.cc +464 -0
  296. package/deps/rocksdb/rocksdb/env/composite_env_wrapper.h +98 -646
  297. package/deps/rocksdb/rocksdb/env/emulated_clock.h +114 -0
  298. package/deps/rocksdb/rocksdb/env/env.cc +632 -42
  299. package/deps/rocksdb/rocksdb/env/env_basic_test.cc +84 -36
  300. package/deps/rocksdb/rocksdb/env/env_chroot.cc +88 -286
  301. package/deps/rocksdb/rocksdb/env/env_chroot.h +34 -1
  302. package/deps/rocksdb/rocksdb/env/env_encryption.cc +469 -277
  303. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +9 -30
  304. package/deps/rocksdb/rocksdb/env/env_posix.cc +110 -119
  305. package/deps/rocksdb/rocksdb/env/env_test.cc +1128 -39
  306. package/deps/rocksdb/rocksdb/env/file_system.cc +147 -8
  307. package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +207 -136
  308. package/deps/rocksdb/rocksdb/env/file_system_tracer.h +86 -54
  309. package/deps/rocksdb/rocksdb/env/fs_posix.cc +192 -64
  310. package/deps/rocksdb/rocksdb/env/fs_readonly.h +107 -0
  311. package/deps/rocksdb/rocksdb/env/fs_remap.cc +339 -0
  312. package/deps/rocksdb/rocksdb/env/fs_remap.h +139 -0
  313. package/deps/rocksdb/rocksdb/env/io_posix.cc +245 -41
  314. package/deps/rocksdb/rocksdb/env/io_posix.h +66 -1
  315. package/deps/rocksdb/rocksdb/env/mock_env.cc +147 -149
  316. package/deps/rocksdb/rocksdb/env/mock_env.h +113 -11
  317. package/deps/rocksdb/rocksdb/env/mock_env_test.cc +2 -4
  318. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +164 -0
  319. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +71 -0
  320. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +9 -5
  321. package/deps/rocksdb/rocksdb/file/delete_scheduler.h +6 -4
  322. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +19 -12
  323. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +459 -70
  324. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +205 -28
  325. package/deps/rocksdb/rocksdb/file/file_util.cc +39 -28
  326. package/deps/rocksdb/rocksdb/file/file_util.h +18 -27
  327. package/deps/rocksdb/rocksdb/file/filename.cc +59 -22
  328. package/deps/rocksdb/rocksdb/file/filename.h +13 -8
  329. package/deps/rocksdb/rocksdb/file/line_file_reader.cc +68 -0
  330. package/deps/rocksdb/rocksdb/file/line_file_reader.h +59 -0
  331. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1130 -6
  332. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +220 -36
  333. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +69 -17
  334. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +13 -12
  335. package/deps/rocksdb/rocksdb/file/read_write_util.cc +3 -38
  336. package/deps/rocksdb/rocksdb/file/read_write_util.h +0 -4
  337. package/deps/rocksdb/rocksdb/file/readahead_file_info.h +33 -0
  338. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +57 -9
  339. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +58 -6
  340. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +29 -54
  341. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +22 -29
  342. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +424 -50
  343. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +66 -19
  344. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +157 -66
  345. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +224 -121
  346. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +333 -30
  347. package/deps/rocksdb/rocksdb/include/rocksdb/cache_bench_tool.h +14 -0
  348. package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +1 -1
  349. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +90 -50
  350. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +13 -5
  351. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +20 -4
  352. package/deps/rocksdb/rocksdb/include/rocksdb/concurrent_task_limiter.h +8 -3
  353. package/deps/rocksdb/rocksdb/include/rocksdb/configurable.h +53 -12
  354. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +31 -6
  355. package/deps/rocksdb/rocksdb/include/rocksdb/customizable.h +102 -7
  356. package/deps/rocksdb/rocksdb/include/rocksdb/data_structure.h +51 -0
  357. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +370 -262
  358. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +286 -87
  359. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +124 -64
  360. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +27 -0
  361. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +21 -4
  362. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +384 -41
  363. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +111 -143
  364. package/deps/rocksdb/rocksdb/include/rocksdb/flush_block_policy.h +20 -6
  365. package/deps/rocksdb/rocksdb/include/rocksdb/functor_wrapper.h +56 -0
  366. package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +15 -33
  367. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +37 -1
  368. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +1 -3
  369. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +314 -26
  370. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +11 -7
  371. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +50 -15
  372. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +10 -3
  373. package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +186 -96
  374. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +373 -103
  375. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +13 -3
  376. package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +2 -2
  377. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +37 -7
  378. package/deps/rocksdb/rocksdb/include/rocksdb/rocksdb_namespace.h +6 -0
  379. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +87 -0
  380. package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +5 -12
  381. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +59 -30
  382. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +11 -11
  383. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +22 -0
  384. package/deps/rocksdb/rocksdb/include/rocksdb/sst_partitioner.h +17 -10
  385. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +121 -41
  386. package/deps/rocksdb/rocksdb/include/rocksdb/stats_history.h +1 -0
  387. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +114 -136
  388. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +116 -0
  389. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +160 -18
  390. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +57 -15
  391. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +3 -1
  392. package/deps/rocksdb/rocksdb/include/rocksdb/trace_reader_writer.h +10 -6
  393. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +247 -0
  394. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record_result.h +187 -0
  395. package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +1 -1
  396. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +14 -24
  397. package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +46 -0
  398. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +14 -4
  399. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/agg_merge.h +138 -0
  400. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backup_engine.h +631 -0
  401. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/cache_dump_load.h +142 -0
  402. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +12 -9
  403. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +368 -0
  404. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +24 -0
  405. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd_execute_result.h +4 -0
  406. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +418 -63
  407. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +143 -73
  408. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +2 -2
  409. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/replayer.h +87 -0
  410. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +2 -2
  411. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +43 -5
  412. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +18 -23
  413. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +26 -0
  414. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +32 -6
  415. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +1 -2
  416. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +20 -1
  417. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +30 -3
  418. package/deps/rocksdb/rocksdb/include/rocksdb/wal_filter.h +11 -2
  419. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +89 -11
  420. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +11 -0
  421. package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +108 -38
  422. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +40 -23
  423. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +12 -5
  424. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +100 -49
  425. package/deps/rocksdb/rocksdb/logging/env_logger.h +7 -5
  426. package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +0 -1
  427. package/deps/rocksdb/rocksdb/logging/posix_logger.h +3 -9
  428. package/deps/rocksdb/rocksdb/memory/arena.cc +3 -1
  429. package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
  430. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +171 -106
  431. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +31 -15
  432. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.cc +15 -4
  433. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.h +24 -8
  434. package/deps/rocksdb/rocksdb/memory/memory_allocator.cc +91 -0
  435. package/deps/rocksdb/rocksdb/memory/memory_allocator_test.cc +239 -0
  436. package/deps/rocksdb/rocksdb/memory/memory_usage.h +14 -1
  437. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +72 -9
  438. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +52 -6
  439. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +53 -0
  440. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +5 -5
  441. package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +17 -5
  442. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +1 -1
  443. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +87 -0
  444. package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +20 -10
  445. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +148 -94
  446. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +160 -62
  447. package/deps/rocksdb/rocksdb/microbench/CMakeLists.txt +17 -0
  448. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +1360 -0
  449. package/deps/rocksdb/rocksdb/microbench/ribbon_bench.cc +153 -0
  450. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +8 -15
  451. package/deps/rocksdb/rocksdb/monitoring/histogram.h +0 -1
  452. package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +18 -16
  453. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +9 -7
  454. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +5 -3
  455. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.cc +7 -5
  456. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +37 -12
  457. package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +26 -6
  458. package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +6 -10
  459. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +14 -13
  460. package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +19 -20
  461. package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +18 -18
  462. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +84 -2
  463. package/deps/rocksdb/rocksdb/monitoring/statistics.h +6 -0
  464. package/deps/rocksdb/rocksdb/monitoring/statistics_test.cc +47 -2
  465. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +67 -54
  466. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +4 -1
  467. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +2 -1
  468. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +2 -2
  469. package/deps/rocksdb/rocksdb/options/cf_options.cc +280 -212
  470. package/deps/rocksdb/rocksdb/options/cf_options.h +51 -57
  471. package/deps/rocksdb/rocksdb/options/configurable.cc +242 -138
  472. package/deps/rocksdb/rocksdb/options/configurable_helper.h +4 -68
  473. package/deps/rocksdb/rocksdb/options/configurable_test.cc +144 -21
  474. package/deps/rocksdb/rocksdb/options/configurable_test.h +2 -3
  475. package/deps/rocksdb/rocksdb/options/customizable.cc +67 -7
  476. package/deps/rocksdb/rocksdb/options/customizable_test.cc +1773 -151
  477. package/deps/rocksdb/rocksdb/options/db_options.cc +275 -47
  478. package/deps/rocksdb/rocksdb/options/db_options.h +36 -7
  479. package/deps/rocksdb/rocksdb/options/options.cc +49 -17
  480. package/deps/rocksdb/rocksdb/options/options_helper.cc +369 -352
  481. package/deps/rocksdb/rocksdb/options/options_helper.h +23 -23
  482. package/deps/rocksdb/rocksdb/options/options_parser.cc +18 -13
  483. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +67 -54
  484. package/deps/rocksdb/rocksdb/options/options_test.cc +1162 -187
  485. package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +1 -1
  486. package/deps/rocksdb/rocksdb/port/lang.h +52 -0
  487. package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
  488. package/deps/rocksdb/rocksdb/port/port_posix.cc +31 -2
  489. package/deps/rocksdb/rocksdb/port/port_posix.h +20 -2
  490. package/deps/rocksdb/rocksdb/port/stack_trace.cc +20 -4
  491. package/deps/rocksdb/rocksdb/port/sys_time.h +2 -2
  492. package/deps/rocksdb/rocksdb/port/win/env_default.cc +7 -7
  493. package/deps/rocksdb/rocksdb/port/win/env_win.cc +44 -74
  494. package/deps/rocksdb/rocksdb/port/win/env_win.h +25 -23
  495. package/deps/rocksdb/rocksdb/port/win/io_win.cc +32 -34
  496. package/deps/rocksdb/rocksdb/port/win/io_win.h +12 -6
  497. package/deps/rocksdb/rocksdb/port/win/port_win.cc +55 -35
  498. package/deps/rocksdb/rocksdb/port/win/port_win.h +22 -5
  499. package/deps/rocksdb/rocksdb/port/win/win_logger.cc +3 -3
  500. package/deps/rocksdb/rocksdb/port/win/win_logger.h +3 -5
  501. package/deps/rocksdb/rocksdb/port/win/win_thread.cc +7 -1
  502. package/deps/rocksdb/rocksdb/port/win/win_thread.h +12 -17
  503. package/deps/rocksdb/rocksdb/python.mk +9 -0
  504. package/deps/rocksdb/rocksdb/src.mk +82 -34
  505. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +3 -4
  506. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +1 -1
  507. package/deps/rocksdb/rocksdb/table/block_based/block.cc +158 -80
  508. package/deps/rocksdb/rocksdb/table/block_based/block.h +64 -36
  509. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +23 -14
  510. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.h +13 -5
  511. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block_test.cc +3 -218
  512. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +603 -328
  513. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +28 -22
  514. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +220 -82
  515. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +8 -2
  516. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +3 -4
  517. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +28 -4
  518. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +598 -492
  519. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +151 -96
  520. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +31 -58
  521. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +330 -92
  522. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +50 -19
  523. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +23 -0
  524. package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +226 -0
  525. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +56 -22
  526. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +42 -4
  527. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +5 -2
  528. package/deps/rocksdb/rocksdb/table/block_based/block_type.h +2 -0
  529. package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +34 -20
  530. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +9 -10
  531. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +26 -3
  532. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +2 -1
  533. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +844 -202
  534. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +281 -81
  535. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +62 -2
  536. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.h +2 -3
  537. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +28 -7
  538. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +22 -6
  539. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +28 -26
  540. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  541. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +1 -2
  542. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -1
  543. package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +11 -4
  544. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.cc +2 -1
  545. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.h +2 -0
  546. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +68 -26
  547. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +44 -9
  548. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +12 -10
  549. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +3 -4
  550. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.h +23 -4
  551. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +44 -19
  552. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +5 -1
  553. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +16 -28
  554. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +7 -4
  555. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +2 -2
  556. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +77 -57
  557. package/deps/rocksdb/rocksdb/table/block_fetcher.h +23 -12
  558. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +43 -56
  559. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +8 -8
  560. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +2 -1
  561. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +52 -70
  562. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.cc +5 -8
  563. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +1 -1
  564. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +17 -11
  565. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +2 -3
  566. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +42 -51
  567. package/deps/rocksdb/rocksdb/table/format.cc +258 -104
  568. package/deps/rocksdb/rocksdb/table/format.h +120 -109
  569. package/deps/rocksdb/rocksdb/table/get_context.cc +97 -65
  570. package/deps/rocksdb/rocksdb/table/get_context.h +19 -12
  571. package/deps/rocksdb/rocksdb/table/internal_iterator.h +14 -0
  572. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +8 -0
  573. package/deps/rocksdb/rocksdb/table/merger_test.cc +3 -2
  574. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +11 -21
  575. package/deps/rocksdb/rocksdb/table/merging_iterator.h +3 -3
  576. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +176 -171
  577. package/deps/rocksdb/rocksdb/table/meta_blocks.h +47 -33
  578. package/deps/rocksdb/rocksdb/table/mock_table.cc +7 -9
  579. package/deps/rocksdb/rocksdb/table/mock_table.h +3 -2
  580. package/deps/rocksdb/rocksdb/table/multiget_context.h +15 -8
  581. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +22 -29
  582. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +6 -3
  583. package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.h +5 -8
  584. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +29 -26
  585. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +12 -16
  586. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +145 -69
  587. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +1 -1
  588. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +7 -6
  589. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +3 -4
  590. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +3 -1
  591. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +1 -1
  592. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +13 -18
  593. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +4 -9
  594. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +55 -37
  595. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +10 -5
  596. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +11 -8
  597. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +222 -16
  598. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +106 -58
  599. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +6 -5
  600. package/deps/rocksdb/rocksdb/table/table_builder.h +68 -44
  601. package/deps/rocksdb/rocksdb/table/table_factory.cc +37 -10
  602. package/deps/rocksdb/rocksdb/table/table_properties.cc +109 -54
  603. package/deps/rocksdb/rocksdb/table/table_properties_internal.h +4 -20
  604. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +33 -32
  605. package/deps/rocksdb/rocksdb/table/table_reader_caller.h +2 -0
  606. package/deps/rocksdb/rocksdb/table/table_test.cc +989 -326
  607. package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +4 -0
  608. package/deps/rocksdb/rocksdb/table/unique_id.cc +166 -0
  609. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +59 -0
  610. package/deps/rocksdb/rocksdb/test_util/mock_time_env.cc +1 -1
  611. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +13 -10
  612. package/deps/rocksdb/rocksdb/test_util/sync_point.cc +1 -2
  613. package/deps/rocksdb/rocksdb/test_util/sync_point.h +35 -16
  614. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.cc +32 -10
  615. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.h +31 -4
  616. package/deps/rocksdb/rocksdb/test_util/testharness.cc +53 -1
  617. package/deps/rocksdb/rocksdb/test_util/testharness.h +67 -3
  618. package/deps/rocksdb/rocksdb/test_util/testutil.cc +236 -66
  619. package/deps/rocksdb/rocksdb/test_util/testutil.h +63 -100
  620. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +12 -1
  621. package/deps/rocksdb/rocksdb/tools/blob_dump.cc +2 -2
  622. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +6 -3
  623. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +1 -0
  624. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +9 -3
  625. package/deps/rocksdb/rocksdb/tools/db_bench.cc +1 -1
  626. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +1420 -611
  627. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +11 -8
  628. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +11 -1
  629. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +4 -2
  630. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_tool.cc +46 -22
  631. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +655 -179
  632. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +58 -6
  633. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +472 -29
  634. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +23 -2
  635. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
  636. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.cc +246 -0
  637. package/deps/rocksdb/rocksdb/tools/simulated_hybrid_file_system.h +126 -0
  638. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +83 -29
  639. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +38 -17
  640. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +191 -55
  641. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +219 -296
  642. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +87 -53
  643. package/deps/rocksdb/rocksdb/tools/write_stress.cc +8 -7
  644. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.cc +6 -5
  645. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +5 -4
  646. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +14 -9
  647. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +134 -60
  648. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.h +49 -38
  649. package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +152 -15
  650. package/deps/rocksdb/rocksdb/trace_replay/trace_record.cc +206 -0
  651. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.cc +190 -0
  652. package/deps/rocksdb/rocksdb/trace_replay/trace_record_handler.h +46 -0
  653. package/deps/rocksdb/rocksdb/trace_replay/trace_record_result.cc +146 -0
  654. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +475 -344
  655. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.h +83 -95
  656. package/deps/rocksdb/rocksdb/util/autovector.h +38 -18
  657. package/deps/rocksdb/rocksdb/util/autovector_test.cc +1 -1
  658. package/deps/rocksdb/rocksdb/util/bloom_impl.h +4 -0
  659. package/deps/rocksdb/rocksdb/util/bloom_test.cc +276 -94
  660. package/deps/rocksdb/rocksdb/util/build_version.cc.in +81 -4
  661. package/deps/rocksdb/rocksdb/util/cast_util.h +22 -0
  662. package/deps/rocksdb/rocksdb/util/channel.h +2 -0
  663. package/deps/rocksdb/rocksdb/util/coding.h +1 -33
  664. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +8 -0
  665. package/deps/rocksdb/rocksdb/util/comparator.cc +163 -3
  666. package/deps/rocksdb/rocksdb/util/compression.cc +122 -0
  667. package/deps/rocksdb/rocksdb/util/compression.h +212 -7
  668. package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +1 -3
  669. package/deps/rocksdb/rocksdb/util/crc32c.cc +165 -2
  670. package/deps/rocksdb/rocksdb/util/crc32c.h +6 -0
  671. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +14 -0
  672. package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +3 -0
  673. package/deps/rocksdb/rocksdb/util/crc32c_test.cc +47 -0
  674. package/deps/rocksdb/rocksdb/util/defer.h +30 -1
  675. package/deps/rocksdb/rocksdb/util/defer_test.cc +11 -0
  676. package/deps/rocksdb/rocksdb/util/duplicate_detector.h +3 -1
  677. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +3 -3
  678. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +5 -4
  679. package/deps/rocksdb/rocksdb/util/fastrange.h +2 -0
  680. package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +36 -0
  681. package/deps/rocksdb/rocksdb/util/file_checksum_helper.h +3 -1
  682. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +512 -52
  683. package/deps/rocksdb/rocksdb/util/filter_bench.cc +65 -10
  684. package/deps/rocksdb/rocksdb/util/gflags_compat.h +6 -1
  685. package/deps/rocksdb/rocksdb/util/hash.cc +121 -3
  686. package/deps/rocksdb/rocksdb/util/hash.h +31 -1
  687. package/deps/rocksdb/rocksdb/util/hash128.h +26 -0
  688. package/deps/rocksdb/rocksdb/util/hash_containers.h +51 -0
  689. package/deps/rocksdb/rocksdb/util/hash_test.cc +194 -2
  690. package/deps/rocksdb/rocksdb/util/heap.h +6 -1
  691. package/deps/rocksdb/rocksdb/util/kv_map.h +1 -1
  692. package/deps/rocksdb/rocksdb/util/log_write_bench.cc +8 -6
  693. package/deps/rocksdb/rocksdb/util/math.h +74 -7
  694. package/deps/rocksdb/rocksdb/util/math128.h +13 -1
  695. package/deps/rocksdb/rocksdb/util/murmurhash.h +3 -3
  696. package/deps/rocksdb/rocksdb/util/random.cc +9 -0
  697. package/deps/rocksdb/rocksdb/util/random.h +6 -0
  698. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +298 -144
  699. package/deps/rocksdb/rocksdb/util/rate_limiter.h +68 -19
  700. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +335 -23
  701. package/deps/rocksdb/rocksdb/util/repeatable_thread.h +10 -12
  702. package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +18 -15
  703. package/deps/rocksdb/rocksdb/util/ribbon_alg.h +98 -74
  704. package/deps/rocksdb/rocksdb/util/ribbon_config.cc +506 -0
  705. package/deps/rocksdb/rocksdb/util/ribbon_config.h +182 -0
  706. package/deps/rocksdb/rocksdb/util/ribbon_impl.h +154 -79
  707. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +742 -365
  708. package/deps/rocksdb/rocksdb/util/set_comparator.h +2 -0
  709. package/deps/rocksdb/rocksdb/util/slice.cc +198 -35
  710. package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -1
  711. package/deps/rocksdb/rocksdb/util/status.cc +32 -29
  712. package/deps/rocksdb/rocksdb/util/stop_watch.h +18 -18
  713. package/deps/rocksdb/rocksdb/util/string_util.cc +85 -6
  714. package/deps/rocksdb/rocksdb/util/string_util.h +47 -2
  715. package/deps/rocksdb/rocksdb/util/thread_guard.h +41 -0
  716. package/deps/rocksdb/rocksdb/util/thread_local.h +2 -2
  717. package/deps/rocksdb/rocksdb/util/thread_local_test.cc +22 -24
  718. package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +7 -6
  719. package/deps/rocksdb/rocksdb/util/timer.h +55 -46
  720. package/deps/rocksdb/rocksdb/util/timer_test.cc +50 -48
  721. package/deps/rocksdb/rocksdb/util/user_comparator_wrapper.h +4 -0
  722. package/deps/rocksdb/rocksdb/util/vector_iterator.h +31 -15
  723. package/deps/rocksdb/rocksdb/util/work_queue.h +2 -0
  724. package/deps/rocksdb/rocksdb/util/xxhash.cc +35 -1144
  725. package/deps/rocksdb/rocksdb/util/xxhash.h +5117 -373
  726. package/deps/rocksdb/rocksdb/util/xxph3.h +1762 -0
  727. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.cc +238 -0
  728. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge.h +49 -0
  729. package/deps/rocksdb/rocksdb/utilities/agg_merge/agg_merge_test.cc +134 -0
  730. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.cc +104 -0
  731. package/deps/rocksdb/rocksdb/utilities/agg_merge/test_agg_merge.h +47 -0
  732. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +3164 -0
  733. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +29 -0
  734. package/deps/rocksdb/rocksdb/utilities/{backupable/backupable_db_test.cc → backup/backup_engine_test.cc} +1679 -485
  735. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +6 -4
  736. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +14 -9
  737. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +2 -0
  738. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +1 -0
  739. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +4 -0
  740. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +37 -27
  741. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +8 -4
  742. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +1 -1
  743. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_iterator.h +13 -10
  744. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +5 -0
  745. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +44 -25
  746. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +3 -4
  747. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +27 -19
  748. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +4 -2
  749. package/deps/rocksdb/rocksdb/utilities/cache_dump_load.cc +69 -0
  750. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +489 -0
  751. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +366 -0
  752. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +67 -4
  753. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +21 -6
  754. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +107 -7
  755. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_options.h +43 -0
  756. package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +1 -1
  757. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +24 -8
  758. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +7 -7
  759. package/deps/rocksdb/rocksdb/utilities/cassandra/serialize.h +5 -0
  760. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +99 -218
  761. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.h +8 -24
  762. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +114 -1
  763. package/deps/rocksdb/rocksdb/utilities/compaction_filters/layered_compaction_filter_base.h +6 -2
  764. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +0 -4
  765. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +7 -6
  766. package/deps/rocksdb/rocksdb/utilities/compaction_filters.cc +56 -0
  767. package/deps/rocksdb/rocksdb/utilities/convenience/info_log_finder.cc +2 -2
  768. package/deps/rocksdb/rocksdb/utilities/counted_fs.cc +355 -0
  769. package/deps/rocksdb/rocksdb/utilities/counted_fs.h +152 -0
  770. package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +13 -0
  771. package/deps/rocksdb/rocksdb/utilities/env_timed.cc +164 -122
  772. package/deps/rocksdb/rocksdb/utilities/env_timed.h +97 -0
  773. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +75 -17
  774. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +19 -3
  775. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +539 -126
  776. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +162 -17
  777. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +110 -0
  778. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +94 -0
  779. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +5 -2
  780. package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +104 -0
  781. package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +5 -3
  782. package/deps/rocksdb/rocksdb/utilities/merge_operators/max.cc +4 -1
  783. package/deps/rocksdb/rocksdb/utilities/merge_operators/put.cc +11 -3
  784. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +0 -2
  785. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.h +5 -1
  786. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +29 -10
  787. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +6 -3
  788. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.cc +29 -14
  789. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +6 -3
  790. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +71 -18
  791. package/deps/rocksdb/rocksdb/utilities/merge_operators/uint64add.cc +15 -9
  792. package/deps/rocksdb/rocksdb/utilities/merge_operators.cc +120 -0
  793. package/deps/rocksdb/rocksdb/utilities/merge_operators.h +3 -23
  794. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +267 -42
  795. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +702 -76
  796. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +1 -1
  797. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +26 -5
  798. package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +1 -1
  799. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +124 -1
  800. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +2 -3
  801. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +8 -9
  802. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +15 -13
  803. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +1 -1
  804. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +4 -4
  805. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +2 -2
  806. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_bench.cc +8 -9
  807. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +1 -1
  808. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +6 -3
  809. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +2 -2
  810. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.cc +3 -0
  811. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +2 -0
  812. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +43 -35
  813. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +20 -18
  814. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +107 -2
  815. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +23 -15
  816. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.h +2 -2
  817. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.cc +316 -0
  818. package/deps/rocksdb/rocksdb/utilities/trace/replayer_impl.h +86 -0
  819. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +4 -5
  820. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +4 -3
  821. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  822. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +119 -3
  823. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc +20 -3
  824. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.h +20 -0
  825. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_external_pthread.h +3 -2
  826. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +4 -0
  827. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +38 -14
  828. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.h +17 -10
  829. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +1 -0
  830. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1 -2
  831. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +423 -34
  832. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +82 -2
  833. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +72 -40
  834. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +32 -1
  835. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +13 -5
  836. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +7 -3
  837. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +207 -43
  838. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +50 -7
  839. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +28 -10
  840. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +11 -6
  841. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +516 -0
  842. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +506 -15
  843. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +27 -13
  844. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +14 -14
  845. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +3 -0
  846. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +2 -2
  847. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +14 -5
  848. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +305 -27
  849. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +55 -159
  850. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +209 -2
  851. package/deps/rocksdb/rocksdb/utilities/wal_filter.cc +23 -0
  852. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +157 -88
  853. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +501 -114
  854. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +91 -316
  855. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +1212 -672
  856. package/deps/rocksdb/rocksdb.gyp +425 -446
  857. package/index.js +5 -87
  858. package/package-lock.json +23687 -0
  859. package/package.json +8 -9
  860. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  861. package/prebuilds/darwin-x64/node.napi.node +0 -0
  862. package/prebuilds/{darwin-x64+arm64 → linux-x64}/node.napi.node +0 -0
  863. package/deps/rocksdb/rocksdb/README.md +0 -32
  864. package/deps/rocksdb/rocksdb/env/env_hdfs.cc +0 -648
  865. package/deps/rocksdb/rocksdb/hdfs/README +0 -23
  866. package/deps/rocksdb/rocksdb/hdfs/env_hdfs.h +0 -386
  867. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backupable_db.h +0 -535
  868. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_librados.h +0 -175
  869. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/utility_db.h +0 -34
  870. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator_test.cc +0 -102
  871. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.h +0 -49
  872. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.h +0 -44
  873. package/deps/rocksdb/rocksdb/options/customizable_helper.h +0 -216
  874. package/deps/rocksdb/rocksdb/port/README +0 -10
  875. package/deps/rocksdb/rocksdb/third-party/folly/folly/CPortability.h +0 -27
  876. package/deps/rocksdb/rocksdb/third-party/folly/folly/ConstexprMath.h +0 -45
  877. package/deps/rocksdb/rocksdb/third-party/folly/folly/Indestructible.h +0 -166
  878. package/deps/rocksdb/rocksdb/third-party/folly/folly/Optional.h +0 -570
  879. package/deps/rocksdb/rocksdb/third-party/folly/folly/Portability.h +0 -92
  880. package/deps/rocksdb/rocksdb/third-party/folly/folly/ScopeGuard.h +0 -54
  881. package/deps/rocksdb/rocksdb/third-party/folly/folly/Traits.h +0 -152
  882. package/deps/rocksdb/rocksdb/third-party/folly/folly/Unit.h +0 -59
  883. package/deps/rocksdb/rocksdb/third-party/folly/folly/Utility.h +0 -141
  884. package/deps/rocksdb/rocksdb/third-party/folly/folly/chrono/Hardware.h +0 -33
  885. package/deps/rocksdb/rocksdb/third-party/folly/folly/container/Array.h +0 -74
  886. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex-inl.h +0 -117
  887. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.cpp +0 -263
  888. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.h +0 -96
  889. package/deps/rocksdb/rocksdb/third-party/folly/folly/functional/Invoke.h +0 -40
  890. package/deps/rocksdb/rocksdb/third-party/folly/folly/hash/Hash.h +0 -29
  891. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Align.h +0 -144
  892. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Bits.h +0 -30
  893. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Launder.h +0 -51
  894. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/Asm.h +0 -28
  895. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysSyscall.h +0 -10
  896. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysTypes.h +0 -26
  897. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification-inl.h +0 -138
  898. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.cpp +0 -23
  899. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.h +0 -57
  900. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil-inl.h +0 -260
  901. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil.h +0 -52
  902. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/Baton.h +0 -328
  903. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex-inl.h +0 -1703
  904. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.cpp +0 -16
  905. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.h +0 -304
  906. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutexSpecializations.h +0 -39
  907. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.cpp +0 -26
  908. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.h +0 -318
  909. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/WaitOptions.h +0 -57
  910. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/InlineFunctionRef.h +0 -219
  911. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable-inl.h +0 -207
  912. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable.h +0 -164
  913. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Sleeper.h +0 -57
  914. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Spin.h +0 -77
  915. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/test/DistributedMutexTest.cpp +0 -1145
  916. package/deps/rocksdb/rocksdb/util/build_version.h +0 -15
  917. package/deps/rocksdb/rocksdb/util/xxh3p.h +0 -1392
  918. package/deps/rocksdb/rocksdb/utilities/backupable/backupable_db.cc +0 -2354
  919. package/deps/rocksdb/rocksdb/utilities/env_librados.cc +0 -1497
  920. package/deps/rocksdb/rocksdb/utilities/env_librados_test.cc +0 -1146
  921. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +0 -13
  922. package/deps/snappy/snappy-1.1.7/README.md +0 -149
  923. package/prebuilds/linux-x64/node.napi.glibc.node +0 -0
@@ -11,11 +11,13 @@
11
11
  // in Release build.
12
12
  // which is a pity, it is a good test
13
13
  #include <fcntl.h>
14
+
14
15
  #include <algorithm>
15
16
  #include <set>
16
17
  #include <thread>
17
18
  #include <unordered_set>
18
19
  #include <utility>
20
+
19
21
  #ifndef OS_WIN
20
22
  #include <unistd.h>
21
23
  #endif
@@ -25,6 +27,7 @@
25
27
 
26
28
  #include "cache/lru_cache.h"
27
29
  #include "db/blob/blob_index.h"
30
+ #include "db/blob/blob_log_format.h"
28
31
  #include "db/db_impl/db_impl.h"
29
32
  #include "db/db_test_util.h"
30
33
  #include "db/dbformat.h"
@@ -33,7 +36,6 @@
33
36
  #include "db/write_batch_internal.h"
34
37
  #include "env/mock_env.h"
35
38
  #include "file/filename.h"
36
- #include "memtable/hash_linklist_rep.h"
37
39
  #include "monitoring/thread_status_util.h"
38
40
  #include "port/port.h"
39
41
  #include "port/stack_trace.h"
@@ -52,6 +54,7 @@
52
54
  #include "rocksdb/table.h"
53
55
  #include "rocksdb/table_properties.h"
54
56
  #include "rocksdb/thread_status.h"
57
+ #include "rocksdb/types.h"
55
58
  #include "rocksdb/utilities/checkpoint.h"
56
59
  #include "rocksdb/utilities/optimistic_transaction_db.h"
57
60
  #include "rocksdb/utilities/write_batch_with_index.h"
@@ -74,7 +77,7 @@ namespace ROCKSDB_NAMESPACE {
74
77
  // If fsync needs to be covered in a test, put it in other places.
75
78
  class DBTest : public DBTestBase {
76
79
  public:
77
- DBTest() : DBTestBase("/db_test", /*env_do_fsync=*/false) {}
80
+ DBTest() : DBTestBase("db_test", /*env_do_fsync=*/false) {}
78
81
  };
79
82
 
80
83
  class DBTestWithParam
@@ -95,7 +98,7 @@ class DBTestWithParam
95
98
  };
96
99
 
97
100
  TEST_F(DBTest, MockEnvTest) {
98
- std::unique_ptr<MockEnv> env{new MockEnv(Env::Default())};
101
+ std::unique_ptr<MockEnv> env{MockEnv::Create(Env::Default())};
99
102
  Options options;
100
103
  options.create_if_missing = true;
101
104
  options.env = env.get();
@@ -247,17 +250,21 @@ TEST_F(DBTest, SkipDelay) {
247
250
  wo.sync = sync;
248
251
  wo.disableWAL = disableWAL;
249
252
  wo.no_slowdown = true;
250
- dbfull()->Put(wo, "foo", "bar");
253
+ // Large enough to exceed allowance for one time interval
254
+ std::string large_value(1024, 'x');
255
+ // Perhaps ideally this first write would fail because of delay, but
256
+ // the current implementation does not guarantee that.
257
+ dbfull()->Put(wo, "foo", large_value).PermitUncheckedError();
251
258
  // We need the 2nd write to trigger delay. This is because delay is
252
259
  // estimated based on the last write size which is 0 for the first write.
253
- ASSERT_NOK(dbfull()->Put(wo, "foo2", "bar2"));
260
+ ASSERT_NOK(dbfull()->Put(wo, "foo2", large_value));
254
261
  ASSERT_GE(sleep_count.load(), 0);
255
262
  ASSERT_GE(wait_count.load(), 0);
256
263
  token.reset();
257
264
 
258
- token = dbfull()->TEST_write_controler().GetDelayToken(1000000000);
265
+ token = dbfull()->TEST_write_controler().GetDelayToken(1000000);
259
266
  wo.no_slowdown = false;
260
- ASSERT_OK(dbfull()->Put(wo, "foo3", "bar3"));
267
+ ASSERT_OK(dbfull()->Put(wo, "foo3", large_value));
261
268
  ASSERT_GE(sleep_count.load(), 1);
262
269
  token.reset();
263
270
  }
@@ -310,7 +317,7 @@ TEST_F(DBTest, MixedSlowdownOptions) {
310
317
  wo.sync = false;
311
318
  wo.disableWAL = false;
312
319
  wo.no_slowdown = false;
313
- dbfull()->Put(wo, "foo", "bar");
320
+ ASSERT_OK(dbfull()->Put(wo, "foo", "bar"));
314
321
  // We need the 2nd write to trigger delay. This is because delay is
315
322
  // estimated based on the last write size which is 0 for the first write.
316
323
  ASSERT_OK(dbfull()->Put(wo, "foo2", "bar2"));
@@ -368,7 +375,7 @@ TEST_F(DBTest, MixedSlowdownOptionsInQueue) {
368
375
  wo.sync = false;
369
376
  wo.disableWAL = false;
370
377
  wo.no_slowdown = false;
371
- dbfull()->Put(wo, "foo", "bar");
378
+ ASSERT_OK(dbfull()->Put(wo, "foo", "bar"));
372
379
  // We need the 2nd write to trigger delay. This is because delay is
373
380
  // estimated based on the last write size which is 0 for the first write.
374
381
  ASSERT_OK(dbfull()->Put(wo, "foo2", "bar2"));
@@ -437,7 +444,7 @@ TEST_F(DBTest, MixedSlowdownOptionsStop) {
437
444
  wo.sync = false;
438
445
  wo.disableWAL = false;
439
446
  wo.no_slowdown = false;
440
- dbfull()->Put(wo, "foo", "bar");
447
+ ASSERT_OK(dbfull()->Put(wo, "foo", "bar"));
441
448
  // We need the 2nd write to trigger delay. This is because delay is
442
449
  // estimated based on the last write size which is 0 for the first write.
443
450
  ASSERT_OK(dbfull()->Put(wo, "foo2", "bar2"));
@@ -618,24 +625,24 @@ TEST_F(DBTest, SingleDeleteFlush) {
618
625
 
619
626
  // Put values on second level (so that they will not be in the same
620
627
  // compaction as the other operations.
621
- Put(1, "foo", "first");
622
- Put(1, "bar", "one");
628
+ ASSERT_OK(Put(1, "foo", "first"));
629
+ ASSERT_OK(Put(1, "bar", "one"));
623
630
  ASSERT_OK(Flush(1));
624
631
  MoveFilesToLevel(2, 1);
625
632
 
626
633
  // (Single) delete hidden by a put
627
- SingleDelete(1, "foo");
628
- Put(1, "foo", "second");
629
- Delete(1, "bar");
630
- Put(1, "bar", "two");
634
+ ASSERT_OK(SingleDelete(1, "foo"));
635
+ ASSERT_OK(Put(1, "foo", "second"));
636
+ ASSERT_OK(Delete(1, "bar"));
637
+ ASSERT_OK(Put(1, "bar", "two"));
631
638
  ASSERT_OK(Flush(1));
632
639
 
633
- SingleDelete(1, "foo");
634
- Delete(1, "bar");
640
+ ASSERT_OK(SingleDelete(1, "foo"));
641
+ ASSERT_OK(Delete(1, "bar"));
635
642
  ASSERT_OK(Flush(1));
636
643
 
637
- dbfull()->CompactRange(CompactRangeOptions(), handles_[1], nullptr,
638
- nullptr);
644
+ ASSERT_OK(dbfull()->CompactRange(CompactRangeOptions(), handles_[1],
645
+ nullptr, nullptr));
639
646
 
640
647
  ASSERT_EQ("NOT_FOUND", Get(1, "bar"));
641
648
  ASSERT_EQ("NOT_FOUND", Get(1, "foo"));
@@ -656,9 +663,9 @@ TEST_F(DBTest, SingleDeletePutFlush) {
656
663
  options.disable_auto_compactions = true;
657
664
  CreateAndReopenWithCF({"pikachu"}, options);
658
665
 
659
- Put(1, "foo", Slice());
660
- Put(1, "a", Slice());
661
- SingleDelete(1, "a");
666
+ ASSERT_OK(Put(1, "foo", Slice()));
667
+ ASSERT_OK(Put(1, "a", Slice()));
668
+ ASSERT_OK(SingleDelete(1, "a"));
662
669
  ASSERT_OK(Flush(1));
663
670
 
664
671
  ASSERT_EQ("[ ]", AllEntriesFor("a", 1));
@@ -766,8 +773,8 @@ TEST_F(DBTest, GetFromImmutableLayer) {
766
773
 
767
774
  // Block sync calls
768
775
  env_->delay_sstable_sync_.store(true, std::memory_order_release);
769
- Put(1, "k1", std::string(100000, 'x')); // Fill memtable
770
- Put(1, "k2", std::string(100000, 'y')); // Trigger flush
776
+ ASSERT_OK(Put(1, "k1", std::string(100000, 'x'))); // Fill memtable
777
+ ASSERT_OK(Put(1, "k2", std::string(100000, 'y'))); // Trigger flush
771
778
  ASSERT_EQ("v1", Get(1, "foo"));
772
779
  ASSERT_EQ("NOT_FOUND", Get(0, "foo"));
773
780
  // Release sync calls
@@ -845,19 +852,19 @@ TEST_F(DBTest, GetEncountersEmptyLevel) {
845
852
  // occurring at level 1 (instead of the correct level 0).
846
853
 
847
854
  // Step 1: First place sstables in levels 0 and 2
848
- Put(1, "a", "begin");
849
- Put(1, "z", "end");
855
+ ASSERT_OK(Put(1, "a", "begin"));
856
+ ASSERT_OK(Put(1, "z", "end"));
850
857
  ASSERT_OK(Flush(1));
851
- dbfull()->TEST_CompactRange(0, nullptr, nullptr, handles_[1]);
852
- dbfull()->TEST_CompactRange(1, nullptr, nullptr, handles_[1]);
853
- Put(1, "a", "begin");
854
- Put(1, "z", "end");
858
+ ASSERT_OK(dbfull()->TEST_CompactRange(0, nullptr, nullptr, handles_[1]));
859
+ ASSERT_OK(dbfull()->TEST_CompactRange(1, nullptr, nullptr, handles_[1]));
860
+ ASSERT_OK(Put(1, "a", "begin"));
861
+ ASSERT_OK(Put(1, "z", "end"));
855
862
  ASSERT_OK(Flush(1));
856
863
  ASSERT_GT(NumTableFilesAtLevel(0, 1), 0);
857
864
  ASSERT_GT(NumTableFilesAtLevel(2, 1), 0);
858
865
 
859
866
  // Step 2: clear level 1 if necessary.
860
- dbfull()->TEST_CompactRange(1, nullptr, nullptr, handles_[1]);
867
+ ASSERT_OK(dbfull()->TEST_CompactRange(1, nullptr, nullptr, handles_[1]));
861
868
  ASSERT_EQ(NumTableFilesAtLevel(0, 1), 1);
862
869
  ASSERT_EQ(NumTableFilesAtLevel(1, 1), 0);
863
870
  ASSERT_EQ(NumTableFilesAtLevel(2, 1), 1);
@@ -868,7 +875,7 @@ TEST_F(DBTest, GetEncountersEmptyLevel) {
868
875
  }
869
876
 
870
877
  // Step 4: Wait for compaction to finish
871
- dbfull()->TEST_WaitForCompact();
878
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
872
879
 
873
880
  ASSERT_EQ(NumTableFilesAtLevel(0, 1), 1); // XXX
874
881
  } while (ChangeOptions(kSkipUniversalCompaction | kSkipFIFOCompaction));
@@ -904,6 +911,9 @@ TEST_F(DBTest, FlushSchedule) {
904
911
  static_cast<int64_t>(options.write_buffer_size);
905
912
  options.max_write_buffer_number = 2;
906
913
  options.write_buffer_size = 120 * 1024;
914
+ auto flush_listener = std::make_shared<FlushCounterListener>();
915
+ flush_listener->expected_flush_reason = FlushReason::kWriteBufferFull;
916
+ options.listeners.push_back(flush_listener);
907
917
  CreateAndReopenWithCF({"pikachu"}, options);
908
918
  std::vector<port::Thread> threads;
909
919
 
@@ -1020,10 +1030,10 @@ TEST_F(DBTest, FailMoreDbPaths) {
1020
1030
  }
1021
1031
 
1022
1032
  void CheckColumnFamilyMeta(
1023
- const ColumnFamilyMetaData& cf_meta,
1033
+ const ColumnFamilyMetaData& cf_meta, const std::string& cf_name,
1024
1034
  const std::vector<std::vector<FileMetaData>>& files_by_level,
1025
1035
  uint64_t start_time, uint64_t end_time) {
1026
- ASSERT_EQ(cf_meta.name, kDefaultColumnFamilyName);
1036
+ ASSERT_EQ(cf_meta.name, cf_name);
1027
1037
  ASSERT_EQ(cf_meta.levels.size(), files_by_level.size());
1028
1038
 
1029
1039
  uint64_t cf_size = 0;
@@ -1068,6 +1078,11 @@ void CheckColumnFamilyMeta(
1068
1078
  ASSERT_LE(file_meta_from_cf.file_creation_time, end_time);
1069
1079
  ASSERT_GE(file_meta_from_cf.oldest_ancester_time, start_time);
1070
1080
  ASSERT_LE(file_meta_from_cf.oldest_ancester_time, end_time);
1081
+ // More from FileStorageInfo
1082
+ ASSERT_EQ(file_meta_from_cf.file_type, kTableFile);
1083
+ ASSERT_EQ(file_meta_from_cf.name,
1084
+ "/" + file_meta_from_cf.relative_filename);
1085
+ ASSERT_EQ(file_meta_from_cf.directory, file_meta_from_cf.db_path);
1071
1086
  }
1072
1087
 
1073
1088
  ASSERT_EQ(level_meta_from_cf.size, level_size);
@@ -1112,11 +1127,63 @@ void CheckLiveFilesMeta(
1112
1127
  ASSERT_EQ(meta.oldest_blob_file_number,
1113
1128
  expected_meta.oldest_blob_file_number);
1114
1129
 
1130
+ // More from FileStorageInfo
1131
+ ASSERT_EQ(meta.file_type, kTableFile);
1132
+ ASSERT_EQ(meta.name, "/" + meta.relative_filename);
1133
+ ASSERT_EQ(meta.directory, meta.db_path);
1134
+
1115
1135
  ++i;
1116
1136
  }
1117
1137
  }
1118
1138
 
1119
1139
  #ifndef ROCKSDB_LITE
1140
+ void AddBlobFile(const ColumnFamilyHandle* cfh, uint64_t blob_file_number,
1141
+ uint64_t total_blob_count, uint64_t total_blob_bytes,
1142
+ const std::string& checksum_method,
1143
+ const std::string& checksum_value,
1144
+ uint64_t garbage_blob_count = 0,
1145
+ uint64_t garbage_blob_bytes = 0) {
1146
+ ColumnFamilyData* cfd =
1147
+ (static_cast<const ColumnFamilyHandleImpl*>(cfh))->cfd();
1148
+ assert(cfd);
1149
+
1150
+ Version* const version = cfd->current();
1151
+ assert(version);
1152
+
1153
+ VersionStorageInfo* const storage_info = version->storage_info();
1154
+ assert(storage_info);
1155
+
1156
+ // Add a live blob file.
1157
+
1158
+ auto shared_meta = SharedBlobFileMetaData::Create(
1159
+ blob_file_number, total_blob_count, total_blob_bytes, checksum_method,
1160
+ checksum_value);
1161
+
1162
+ auto meta = BlobFileMetaData::Create(std::move(shared_meta),
1163
+ BlobFileMetaData::LinkedSsts(),
1164
+ garbage_blob_count, garbage_blob_bytes);
1165
+
1166
+ storage_info->AddBlobFile(std::move(meta));
1167
+ }
1168
+
1169
+ static void CheckBlobMetaData(
1170
+ const BlobMetaData& bmd, uint64_t blob_file_number,
1171
+ uint64_t total_blob_count, uint64_t total_blob_bytes,
1172
+ const std::string& checksum_method, const std::string& checksum_value,
1173
+ uint64_t garbage_blob_count = 0, uint64_t garbage_blob_bytes = 0) {
1174
+ ASSERT_EQ(bmd.blob_file_number, blob_file_number);
1175
+ ASSERT_EQ(bmd.blob_file_name, BlobFileName("", blob_file_number));
1176
+ ASSERT_EQ(bmd.blob_file_size,
1177
+ total_blob_bytes + BlobLogHeader::kSize + BlobLogFooter::kSize);
1178
+
1179
+ ASSERT_EQ(bmd.total_blob_count, total_blob_count);
1180
+ ASSERT_EQ(bmd.total_blob_bytes, total_blob_bytes);
1181
+ ASSERT_EQ(bmd.garbage_blob_count, garbage_blob_count);
1182
+ ASSERT_EQ(bmd.garbage_blob_bytes, garbage_blob_bytes);
1183
+ ASSERT_EQ(bmd.checksum_method, checksum_method);
1184
+ ASSERT_EQ(bmd.checksum_value, checksum_value);
1185
+ }
1186
+
1120
1187
  TEST_F(DBTest, MetaDataTest) {
1121
1188
  Options options = CurrentOptions();
1122
1189
  options.create_if_missing = true;
@@ -1146,7 +1213,7 @@ TEST_F(DBTest, MetaDataTest) {
1146
1213
  // Fill up the rest of the file with random values.
1147
1214
  GenerateNewFile(&rnd, &key_index, /* nowait */ true);
1148
1215
 
1149
- Flush();
1216
+ ASSERT_OK(Flush());
1150
1217
  }
1151
1218
 
1152
1219
  std::vector<std::vector<FileMetaData>> files_by_level;
@@ -1157,13 +1224,71 @@ TEST_F(DBTest, MetaDataTest) {
1157
1224
 
1158
1225
  ColumnFamilyMetaData cf_meta;
1159
1226
  db_->GetColumnFamilyMetaData(&cf_meta);
1160
- CheckColumnFamilyMeta(cf_meta, files_by_level, start_time, end_time);
1161
-
1227
+ CheckColumnFamilyMeta(cf_meta, kDefaultColumnFamilyName, files_by_level,
1228
+ start_time, end_time);
1162
1229
  std::vector<LiveFileMetaData> live_file_meta;
1163
1230
  db_->GetLiveFilesMetaData(&live_file_meta);
1164
1231
  CheckLiveFilesMeta(live_file_meta, files_by_level);
1165
1232
  }
1166
1233
 
1234
+ TEST_F(DBTest, AllMetaDataTest) {
1235
+ Options options = CurrentOptions();
1236
+ options.create_if_missing = true;
1237
+ options.disable_auto_compactions = true;
1238
+ DestroyAndReopen(options);
1239
+ CreateAndReopenWithCF({"pikachu"}, options);
1240
+
1241
+ constexpr uint64_t blob_file_number = 234;
1242
+ constexpr uint64_t total_blob_count = 555;
1243
+ constexpr uint64_t total_blob_bytes = 66666;
1244
+ constexpr char checksum_method[] = "CRC32";
1245
+ constexpr char checksum_value[] = "\x3d\x87\xff\x57";
1246
+
1247
+ int64_t temp_time = 0;
1248
+ options.env->GetCurrentTime(&temp_time).PermitUncheckedError();
1249
+ uint64_t start_time = static_cast<uint64_t>(temp_time);
1250
+
1251
+ Random rnd(301);
1252
+ dbfull()->TEST_LockMutex();
1253
+ for (int cf = 0; cf < 2; cf++) {
1254
+ AddBlobFile(handles_[cf], blob_file_number * (cf + 1),
1255
+ total_blob_count * (cf + 1), total_blob_bytes * (cf + 1),
1256
+ checksum_method, checksum_value);
1257
+ }
1258
+ dbfull()->TEST_UnlockMutex();
1259
+
1260
+ std::vector<ColumnFamilyMetaData> all_meta;
1261
+ db_->GetAllColumnFamilyMetaData(&all_meta);
1262
+
1263
+ std::vector<std::vector<FileMetaData>> default_files_by_level;
1264
+ std::vector<std::vector<FileMetaData>> pikachu_files_by_level;
1265
+ dbfull()->TEST_GetFilesMetaData(handles_[0], &default_files_by_level);
1266
+ dbfull()->TEST_GetFilesMetaData(handles_[1], &pikachu_files_by_level);
1267
+
1268
+ options.env->GetCurrentTime(&temp_time).PermitUncheckedError();
1269
+ uint64_t end_time = static_cast<uint64_t>(temp_time);
1270
+
1271
+ ASSERT_EQ(all_meta.size(), 2);
1272
+ for (int cf = 0; cf < 2; cf++) {
1273
+ const auto& cfmd = all_meta[cf];
1274
+ if (cf == 0) {
1275
+ CheckColumnFamilyMeta(cfmd, "default", default_files_by_level, start_time,
1276
+ end_time);
1277
+ } else {
1278
+ CheckColumnFamilyMeta(cfmd, "pikachu", pikachu_files_by_level, start_time,
1279
+ end_time);
1280
+ }
1281
+ ASSERT_EQ(cfmd.blob_files.size(), 1U);
1282
+ const auto& bmd = cfmd.blob_files[0];
1283
+ ASSERT_EQ(cfmd.blob_file_count, 1U);
1284
+ ASSERT_EQ(cfmd.blob_file_size, bmd.blob_file_size);
1285
+ ASSERT_EQ(NormalizePath(bmd.blob_file_path), NormalizePath(dbname_));
1286
+ CheckBlobMetaData(bmd, blob_file_number * (cf + 1),
1287
+ total_blob_count * (cf + 1), total_blob_bytes * (cf + 1),
1288
+ checksum_method, checksum_value);
1289
+ }
1290
+ }
1291
+
1167
1292
  namespace {
1168
1293
  void MinLevelHelper(DBTest* self, Options& options) {
1169
1294
  Random rnd(301);
@@ -1176,7 +1301,7 @@ void MinLevelHelper(DBTest* self, Options& options) {
1176
1301
  values.push_back(rnd.RandomString(10000));
1177
1302
  ASSERT_OK(self->Put(DBTestBase::Key(i), values[i]));
1178
1303
  }
1179
- self->dbfull()->TEST_WaitForFlushMemTable();
1304
+ ASSERT_OK(self->dbfull()->TEST_WaitForFlushMemTable());
1180
1305
  ASSERT_EQ(self->NumTableFilesAtLevel(0), num + 1);
1181
1306
  }
1182
1307
 
@@ -1186,7 +1311,7 @@ void MinLevelHelper(DBTest* self, Options& options) {
1186
1311
  values.push_back(rnd.RandomString(10000));
1187
1312
  ASSERT_OK(self->Put(DBTestBase::Key(i), values[i]));
1188
1313
  }
1189
- self->dbfull()->TEST_WaitForCompact();
1314
+ ASSERT_OK(self->dbfull()->TEST_WaitForCompact());
1190
1315
 
1191
1316
  ASSERT_EQ(self->NumTableFilesAtLevel(0), 0);
1192
1317
  ASSERT_EQ(self->NumTableFilesAtLevel(1), 1);
@@ -1335,7 +1460,7 @@ TEST_F(DBTest, ApproximateSizesMemTable) {
1335
1460
  std::string end = Key(60);
1336
1461
  Range r(start, end);
1337
1462
  SizeApproximationOptions size_approx_options;
1338
- size_approx_options.include_memtabtles = true;
1463
+ size_approx_options.include_memtables = true;
1339
1464
  size_approx_options.include_files = true;
1340
1465
  ASSERT_OK(
1341
1466
  db_->GetApproximateSizes(size_approx_options, default_cf, &r, 1, &size));
@@ -1421,7 +1546,7 @@ TEST_F(DBTest, ApproximateSizesMemTable) {
1421
1546
  ASSERT_OK(db_->GetApproximateSizes(&r, 1, &size_without_mt));
1422
1547
  ASSERT_EQ(size_without_mt, 0);
1423
1548
 
1424
- Flush();
1549
+ ASSERT_OK(Flush());
1425
1550
 
1426
1551
  for (int i = 0; i < N; i++) {
1427
1552
  ASSERT_OK(Put(Key(i + 1000), rnd.RandomString(1024)));
@@ -1436,8 +1561,8 @@ TEST_F(DBTest, ApproximateSizesMemTable) {
1436
1561
  ASSERT_GT(size_with_mt, size_without_mt);
1437
1562
  ASSERT_GT(size_without_mt, 6000);
1438
1563
 
1439
- // Check that include_memtabtles flag works as expected
1440
- size_approx_options.include_memtabtles = false;
1564
+ // Check that include_memtables flag works as expected
1565
+ size_approx_options.include_memtables = false;
1441
1566
  ASSERT_OK(
1442
1567
  db_->GetApproximateSizes(size_approx_options, default_cf, &r, 1, &size));
1443
1568
  ASSERT_EQ(size, size_without_mt);
@@ -1478,16 +1603,17 @@ TEST_F(DBTest, ApproximateSizesFilesWithErrorMargin) {
1478
1603
  ASSERT_OK(Put(Key(i), rnd.RandomString(24)));
1479
1604
  }
1480
1605
  // Flush everything to files
1481
- Flush();
1606
+ ASSERT_OK(Flush());
1482
1607
  // Compact the entire key space into the next level
1483
- db_->CompactRange(CompactRangeOptions(), default_cf, nullptr, nullptr);
1608
+ ASSERT_OK(
1609
+ db_->CompactRange(CompactRangeOptions(), default_cf, nullptr, nullptr));
1484
1610
 
1485
1611
  // Write more keys
1486
1612
  for (int i = N; i < (N + N / 4); i++) {
1487
1613
  ASSERT_OK(Put(Key(i), rnd.RandomString(24)));
1488
1614
  }
1489
1615
  // Flush everything to files again
1490
- Flush();
1616
+ ASSERT_OK(Flush());
1491
1617
 
1492
1618
  // Wait for compaction to finish
1493
1619
  ASSERT_OK(dbfull()->TEST_WaitForCompact());
@@ -1498,7 +1624,7 @@ TEST_F(DBTest, ApproximateSizesFilesWithErrorMargin) {
1498
1624
  const Range r(start, end);
1499
1625
 
1500
1626
  SizeApproximationOptions size_approx_options;
1501
- size_approx_options.include_memtabtles = false;
1627
+ size_approx_options.include_memtables = false;
1502
1628
  size_approx_options.include_files = true;
1503
1629
  size_approx_options.files_size_error_margin = -1.0; // disabled
1504
1630
 
@@ -1567,7 +1693,7 @@ TEST_F(DBTest, GetApproximateMemTableStats) {
1567
1693
  ASSERT_EQ(count, 0);
1568
1694
  ASSERT_EQ(size, 0);
1569
1695
 
1570
- Flush();
1696
+ ASSERT_OK(Flush());
1571
1697
 
1572
1698
  start = Key(50);
1573
1699
  end = Key(60);
@@ -1640,7 +1766,7 @@ TEST_F(DBTest, ApproximateSizes) {
1640
1766
  std::string cend_str = Key(compact_start + 9);
1641
1767
  Slice cstart = cstart_str;
1642
1768
  Slice cend = cend_str;
1643
- dbfull()->TEST_CompactRange(0, &cstart, &cend, handles_[1]);
1769
+ ASSERT_OK(dbfull()->TEST_CompactRange(0, &cstart, &cend, handles_[1]));
1644
1770
  }
1645
1771
 
1646
1772
  ASSERT_EQ(NumTableFilesAtLevel(0, 1), 0);
@@ -1696,7 +1822,7 @@ TEST_F(DBTest, ApproximateSizes_MixOfSmallAndLarge) {
1696
1822
  ASSERT_OK(Size(Key(3), Key(5), 1, &size));
1697
1823
  ASSERT_TRUE(Between(size, 110100, 111000));
1698
1824
 
1699
- dbfull()->TEST_CompactRange(0, nullptr, nullptr, handles_[1]);
1825
+ ASSERT_OK(dbfull()->TEST_CompactRange(0, nullptr, nullptr, handles_[1]));
1700
1826
  }
1701
1827
  // ApproximateOffsetOf() is not yet implemented in plain table format.
1702
1828
  } while (ChangeOptions(kSkipPlainTable));
@@ -1710,16 +1836,16 @@ TEST_F(DBTest, Snapshot) {
1710
1836
  options_override.skip_policy = kSkipNoSnapshot;
1711
1837
  do {
1712
1838
  CreateAndReopenWithCF({"pikachu"}, CurrentOptions(options_override));
1713
- Put(0, "foo", "0v1");
1714
- Put(1, "foo", "1v1");
1839
+ ASSERT_OK(Put(0, "foo", "0v1"));
1840
+ ASSERT_OK(Put(1, "foo", "1v1"));
1715
1841
 
1716
1842
  const Snapshot* s1 = db_->GetSnapshot();
1717
1843
  ASSERT_EQ(1U, GetNumSnapshots());
1718
1844
  uint64_t time_snap1 = GetTimeOldestSnapshots();
1719
1845
  ASSERT_GT(time_snap1, 0U);
1720
1846
  ASSERT_EQ(GetSequenceOldestSnapshots(), s1->GetSequenceNumber());
1721
- Put(0, "foo", "0v2");
1722
- Put(1, "foo", "1v2");
1847
+ ASSERT_OK(Put(0, "foo", "0v2"));
1848
+ ASSERT_OK(Put(1, "foo", "1v2"));
1723
1849
 
1724
1850
  env_->MockSleepForSeconds(1);
1725
1851
 
@@ -1727,8 +1853,8 @@ TEST_F(DBTest, Snapshot) {
1727
1853
  ASSERT_EQ(2U, GetNumSnapshots());
1728
1854
  ASSERT_EQ(time_snap1, GetTimeOldestSnapshots());
1729
1855
  ASSERT_EQ(GetSequenceOldestSnapshots(), s1->GetSequenceNumber());
1730
- Put(0, "foo", "0v3");
1731
- Put(1, "foo", "1v3");
1856
+ ASSERT_OK(Put(0, "foo", "0v3"));
1857
+ ASSERT_OK(Put(1, "foo", "1v3"));
1732
1858
 
1733
1859
  {
1734
1860
  ManagedSnapshot s3(db_);
@@ -1736,8 +1862,8 @@ TEST_F(DBTest, Snapshot) {
1736
1862
  ASSERT_EQ(time_snap1, GetTimeOldestSnapshots());
1737
1863
  ASSERT_EQ(GetSequenceOldestSnapshots(), s1->GetSequenceNumber());
1738
1864
 
1739
- Put(0, "foo", "0v4");
1740
- Put(1, "foo", "1v4");
1865
+ ASSERT_OK(Put(0, "foo", "0v4"));
1866
+ ASSERT_OK(Put(1, "foo", "1v4"));
1741
1867
  ASSERT_EQ("0v1", Get(0, "foo", s1));
1742
1868
  ASSERT_EQ("1v1", Get(1, "foo", s1));
1743
1869
  ASSERT_EQ("0v2", Get(0, "foo", s2));
@@ -1786,11 +1912,11 @@ TEST_F(DBTest, HiddenValuesAreRemoved) {
1786
1912
  FillLevels("a", "z", 1);
1787
1913
 
1788
1914
  std::string big = rnd.RandomString(50000);
1789
- Put(1, "foo", big);
1790
- Put(1, "pastfoo", "v");
1915
+ ASSERT_OK(Put(1, "foo", big));
1916
+ ASSERT_OK(Put(1, "pastfoo", "v"));
1791
1917
  const Snapshot* snapshot = db_->GetSnapshot();
1792
- Put(1, "foo", "tiny");
1793
- Put(1, "pastfoo2", "v2"); // Advance sequence number one more
1918
+ ASSERT_OK(Put(1, "foo", "tiny"));
1919
+ ASSERT_OK(Put(1, "pastfoo2", "v2")); // Advance sequence number one more
1794
1920
 
1795
1921
  ASSERT_OK(Flush(1));
1796
1922
  ASSERT_GT(NumTableFilesAtLevel(0, 1), 0);
@@ -1801,11 +1927,11 @@ TEST_F(DBTest, HiddenValuesAreRemoved) {
1801
1927
  db_->ReleaseSnapshot(snapshot);
1802
1928
  ASSERT_EQ(AllEntriesFor("foo", 1), "[ tiny, " + big + " ]");
1803
1929
  Slice x("x");
1804
- dbfull()->TEST_CompactRange(0, nullptr, &x, handles_[1]);
1930
+ ASSERT_OK(dbfull()->TEST_CompactRange(0, nullptr, &x, handles_[1]));
1805
1931
  ASSERT_EQ(AllEntriesFor("foo", 1), "[ tiny ]");
1806
1932
  ASSERT_EQ(NumTableFilesAtLevel(0, 1), 0);
1807
1933
  ASSERT_GE(NumTableFilesAtLevel(1, 1), 1);
1808
- dbfull()->TEST_CompactRange(1, nullptr, &x, handles_[1]);
1934
+ ASSERT_OK(dbfull()->TEST_CompactRange(1, nullptr, &x, handles_[1]));
1809
1935
  ASSERT_EQ(AllEntriesFor("foo", 1), "[ tiny ]");
1810
1936
 
1811
1937
  ASSERT_OK(Size("", "pastfoo", 1, &size));
@@ -1835,26 +1961,26 @@ TEST_F(DBTest, UnremovableSingleDelete) {
1835
1961
  options.disable_auto_compactions = true;
1836
1962
  CreateAndReopenWithCF({"pikachu"}, options);
1837
1963
 
1838
- Put(1, "foo", "first");
1964
+ ASSERT_OK(Put(1, "foo", "first"));
1839
1965
  const Snapshot* snapshot = db_->GetSnapshot();
1840
- SingleDelete(1, "foo");
1841
- Put(1, "foo", "second");
1966
+ ASSERT_OK(SingleDelete(1, "foo"));
1967
+ ASSERT_OK(Put(1, "foo", "second"));
1842
1968
  ASSERT_OK(Flush(1));
1843
1969
 
1844
1970
  ASSERT_EQ("first", Get(1, "foo", snapshot));
1845
1971
  ASSERT_EQ("second", Get(1, "foo"));
1846
1972
 
1847
- dbfull()->CompactRange(CompactRangeOptions(), handles_[1], nullptr,
1848
- nullptr);
1973
+ ASSERT_OK(dbfull()->CompactRange(CompactRangeOptions(), handles_[1],
1974
+ nullptr, nullptr));
1849
1975
  ASSERT_EQ("[ second, SDEL, first ]", AllEntriesFor("foo", 1));
1850
1976
 
1851
- SingleDelete(1, "foo");
1977
+ ASSERT_OK(SingleDelete(1, "foo"));
1852
1978
 
1853
1979
  ASSERT_EQ("first", Get(1, "foo", snapshot));
1854
1980
  ASSERT_EQ("NOT_FOUND", Get(1, "foo"));
1855
1981
 
1856
- dbfull()->CompactRange(CompactRangeOptions(), handles_[1], nullptr,
1857
- nullptr);
1982
+ ASSERT_OK(dbfull()->CompactRange(CompactRangeOptions(), handles_[1],
1983
+ nullptr, nullptr));
1858
1984
 
1859
1985
  ASSERT_EQ("first", Get(1, "foo", snapshot));
1860
1986
  ASSERT_EQ("NOT_FOUND", Get(1, "foo"));
@@ -1870,7 +1996,7 @@ TEST_F(DBTest, UnremovableSingleDelete) {
1870
1996
  TEST_F(DBTest, DeletionMarkers1) {
1871
1997
  Options options = CurrentOptions();
1872
1998
  CreateAndReopenWithCF({"pikachu"}, options);
1873
- Put(1, "foo", "v1");
1999
+ ASSERT_OK(Put(1, "foo", "v1"));
1874
2000
  ASSERT_OK(Flush(1));
1875
2001
  const int last = 2;
1876
2002
  MoveFilesToLevel(last, 1);
@@ -1878,24 +2004,25 @@ TEST_F(DBTest, DeletionMarkers1) {
1878
2004
  ASSERT_EQ(NumTableFilesAtLevel(last, 1), 1);
1879
2005
 
1880
2006
  // Place a table at level last-1 to prevent merging with preceding mutation
1881
- Put(1, "a", "begin");
1882
- Put(1, "z", "end");
1883
- Flush(1);
2007
+ ASSERT_OK(Put(1, "a", "begin"));
2008
+ ASSERT_OK(Put(1, "z", "end"));
2009
+ ASSERT_OK(Flush(1));
1884
2010
  MoveFilesToLevel(last - 1, 1);
1885
2011
  ASSERT_EQ(NumTableFilesAtLevel(last, 1), 1);
1886
2012
  ASSERT_EQ(NumTableFilesAtLevel(last - 1, 1), 1);
1887
2013
 
1888
- Delete(1, "foo");
1889
- Put(1, "foo", "v2");
2014
+ ASSERT_OK(Delete(1, "foo"));
2015
+ ASSERT_OK(Put(1, "foo", "v2"));
1890
2016
  ASSERT_EQ(AllEntriesFor("foo", 1), "[ v2, DEL, v1 ]");
1891
2017
  ASSERT_OK(Flush(1)); // Moves to level last-2
1892
2018
  ASSERT_EQ(AllEntriesFor("foo", 1), "[ v2, v1 ]");
1893
2019
  Slice z("z");
1894
- dbfull()->TEST_CompactRange(last - 2, nullptr, &z, handles_[1]);
2020
+ ASSERT_OK(dbfull()->TEST_CompactRange(last - 2, nullptr, &z, handles_[1]));
1895
2021
  // DEL eliminated, but v1 remains because we aren't compacting that level
1896
2022
  // (DEL can be eliminated because v2 hides v1).
1897
2023
  ASSERT_EQ(AllEntriesFor("foo", 1), "[ v2, v1 ]");
1898
- dbfull()->TEST_CompactRange(last - 1, nullptr, nullptr, handles_[1]);
2024
+ ASSERT_OK(
2025
+ dbfull()->TEST_CompactRange(last - 1, nullptr, nullptr, handles_[1]));
1899
2026
  // Merging last-1 w/ last, so we are the base level for "foo", so
1900
2027
  // DEL is removed. (as is v1).
1901
2028
  ASSERT_EQ(AllEntriesFor("foo", 1), "[ v2 ]");
@@ -1904,7 +2031,7 @@ TEST_F(DBTest, DeletionMarkers1) {
1904
2031
  TEST_F(DBTest, DeletionMarkers2) {
1905
2032
  Options options = CurrentOptions();
1906
2033
  CreateAndReopenWithCF({"pikachu"}, options);
1907
- Put(1, "foo", "v1");
2034
+ ASSERT_OK(Put(1, "foo", "v1"));
1908
2035
  ASSERT_OK(Flush(1));
1909
2036
  const int last = 2;
1910
2037
  MoveFilesToLevel(last, 1);
@@ -1912,21 +2039,23 @@ TEST_F(DBTest, DeletionMarkers2) {
1912
2039
  ASSERT_EQ(NumTableFilesAtLevel(last, 1), 1);
1913
2040
 
1914
2041
  // Place a table at level last-1 to prevent merging with preceding mutation
1915
- Put(1, "a", "begin");
1916
- Put(1, "z", "end");
1917
- Flush(1);
2042
+ ASSERT_OK(Put(1, "a", "begin"));
2043
+ ASSERT_OK(Put(1, "z", "end"));
2044
+ ASSERT_OK(Flush(1));
1918
2045
  MoveFilesToLevel(last - 1, 1);
1919
2046
  ASSERT_EQ(NumTableFilesAtLevel(last, 1), 1);
1920
2047
  ASSERT_EQ(NumTableFilesAtLevel(last - 1, 1), 1);
1921
2048
 
1922
- Delete(1, "foo");
2049
+ ASSERT_OK(Delete(1, "foo"));
1923
2050
  ASSERT_EQ(AllEntriesFor("foo", 1), "[ DEL, v1 ]");
1924
2051
  ASSERT_OK(Flush(1)); // Moves to level last-2
1925
2052
  ASSERT_EQ(AllEntriesFor("foo", 1), "[ DEL, v1 ]");
1926
- dbfull()->TEST_CompactRange(last - 2, nullptr, nullptr, handles_[1]);
2053
+ ASSERT_OK(
2054
+ dbfull()->TEST_CompactRange(last - 2, nullptr, nullptr, handles_[1]));
1927
2055
  // DEL kept: "last" file overlaps
1928
2056
  ASSERT_EQ(AllEntriesFor("foo", 1), "[ DEL, v1 ]");
1929
- dbfull()->TEST_CompactRange(last - 1, nullptr, nullptr, handles_[1]);
2057
+ ASSERT_OK(
2058
+ dbfull()->TEST_CompactRange(last - 1, nullptr, nullptr, handles_[1]));
1930
2059
  // Merging last-1 w/ last, so we are the base level for "foo", so
1931
2060
  // DEL is removed. (as is v1).
1932
2061
  ASSERT_EQ(AllEntriesFor("foo", 1), "[ ]");
@@ -1941,11 +2070,11 @@ TEST_F(DBTest, OverlapInLevel0) {
1941
2070
  // 0.
1942
2071
  ASSERT_OK(Put(1, "100", "v100"));
1943
2072
  ASSERT_OK(Put(1, "999", "v999"));
1944
- Flush(1);
2073
+ ASSERT_OK(Flush(1));
1945
2074
  MoveFilesToLevel(2, 1);
1946
2075
  ASSERT_OK(Delete(1, "100"));
1947
2076
  ASSERT_OK(Delete(1, "999"));
1948
- Flush(1);
2077
+ ASSERT_OK(Flush(1));
1949
2078
  MoveFilesToLevel(1, 1);
1950
2079
  ASSERT_EQ("0,1,1", FilesPerLevel(1));
1951
2080
 
@@ -1955,23 +2084,30 @@ TEST_F(DBTest, OverlapInLevel0) {
1955
2084
  // Note that files are sorted by smallest key.
1956
2085
  ASSERT_OK(Put(1, "300", "v300"));
1957
2086
  ASSERT_OK(Put(1, "500", "v500"));
1958
- Flush(1);
2087
+ ASSERT_OK(Flush(1));
1959
2088
  ASSERT_OK(Put(1, "200", "v200"));
1960
2089
  ASSERT_OK(Put(1, "600", "v600"));
1961
2090
  ASSERT_OK(Put(1, "900", "v900"));
1962
- Flush(1);
2091
+ ASSERT_OK(Flush(1));
1963
2092
  ASSERT_EQ("2,1,1", FilesPerLevel(1));
1964
2093
 
2094
+ // BEGIN addition to existing test
2095
+ // Take this opportunity to verify SST unique ids (including Plain table)
2096
+ TablePropertiesCollection tbc;
2097
+ ASSERT_OK(db_->GetPropertiesOfAllTables(handles_[1], &tbc));
2098
+ VerifySstUniqueIds(tbc);
2099
+ // END addition to existing test
2100
+
1965
2101
  // Compact away the placeholder files we created initially
1966
- dbfull()->TEST_CompactRange(1, nullptr, nullptr, handles_[1]);
1967
- dbfull()->TEST_CompactRange(2, nullptr, nullptr, handles_[1]);
2102
+ ASSERT_OK(dbfull()->TEST_CompactRange(1, nullptr, nullptr, handles_[1]));
2103
+ ASSERT_OK(dbfull()->TEST_CompactRange(2, nullptr, nullptr, handles_[1]));
1968
2104
  ASSERT_EQ("2", FilesPerLevel(1));
1969
2105
 
1970
2106
  // Do a memtable compaction. Before bug-fix, the compaction would
1971
2107
  // not detect the overlap with level-0 files and would incorrectly place
1972
2108
  // the deletion in a deeper level.
1973
2109
  ASSERT_OK(Delete(1, "600"));
1974
- Flush(1);
2110
+ ASSERT_OK(Flush(1));
1975
2111
  ASSERT_EQ("3", FilesPerLevel(1));
1976
2112
  ASSERT_EQ("NOT_FOUND", Get(1, "600"));
1977
2113
  } while (ChangeOptions(kSkipUniversalCompaction | kSkipFIFOCompaction));
@@ -2117,7 +2253,7 @@ TEST_F(DBTest, DBOpen_Change_NumLevels) {
2117
2253
 
2118
2254
  ASSERT_OK(Put(1, "a", "123"));
2119
2255
  ASSERT_OK(Put(1, "b", "234"));
2120
- Flush(1);
2256
+ ASSERT_OK(Flush(1));
2121
2257
  MoveFilesToLevel(3, 1);
2122
2258
  Close();
2123
2259
 
@@ -2188,8 +2324,8 @@ TEST_F(DBTest, SnapshotFiles) {
2188
2324
  uint64_t manifest_number = 0;
2189
2325
  uint64_t manifest_size = 0;
2190
2326
  std::vector<std::string> files;
2191
- dbfull()->DisableFileDeletions();
2192
- dbfull()->GetLiveFiles(files, &manifest_size);
2327
+ ASSERT_OK(dbfull()->DisableFileDeletions());
2328
+ ASSERT_OK(dbfull()->GetLiveFiles(files, &manifest_size));
2193
2329
 
2194
2330
  // CURRENT, MANIFEST, OPTIONS, *.sst files (one for each CF)
2195
2331
  ASSERT_EQ(files.size(), 5U);
@@ -2218,18 +2354,17 @@ TEST_F(DBTest, SnapshotFiles) {
2218
2354
  // latest manifest file
2219
2355
  if (ParseFileName(files[i].substr(1), &number, &type)) {
2220
2356
  if (type == kDescriptorFile) {
2221
- if (number > manifest_number) {
2222
- manifest_number = number;
2223
- ASSERT_GE(size, manifest_size);
2224
- size = manifest_size; // copy only valid MANIFEST data
2225
- }
2357
+ ASSERT_EQ(manifest_number, 0);
2358
+ manifest_number = number;
2359
+ ASSERT_GE(size, manifest_size);
2360
+ size = manifest_size; // copy only valid MANIFEST data
2226
2361
  }
2227
2362
  }
2228
2363
  CopyFile(src, dest, size);
2229
2364
  }
2230
2365
 
2231
2366
  // release file snapshot
2232
- dbfull()->DisableFileDeletions();
2367
+ ASSERT_OK(dbfull()->EnableFileDeletions(/*force*/ false));
2233
2368
  // overwrite one key, this key should not appear in the snapshot
2234
2369
  std::vector<std::string> extras;
2235
2370
  for (unsigned int i = 0; i < 1; i++) {
@@ -2253,7 +2388,7 @@ TEST_F(DBTest, SnapshotFiles) {
2253
2388
  ReadOptions roptions;
2254
2389
  std::string val;
2255
2390
  for (unsigned int i = 0; i < 80; i++) {
2256
- stat = snapdb->Get(roptions, cf_handles[i < 40], Key(i), &val);
2391
+ ASSERT_OK(snapdb->Get(roptions, cf_handles[i < 40], Key(i), &val));
2257
2392
  ASSERT_EQ(values[i].compare(val), 0);
2258
2393
  }
2259
2394
  for (auto cfh : cf_handles) {
@@ -2266,8 +2401,8 @@ TEST_F(DBTest, SnapshotFiles) {
2266
2401
  uint64_t new_manifest_number = 0;
2267
2402
  uint64_t new_manifest_size = 0;
2268
2403
  std::vector<std::string> newfiles;
2269
- dbfull()->DisableFileDeletions();
2270
- dbfull()->GetLiveFiles(newfiles, &new_manifest_size);
2404
+ ASSERT_OK(dbfull()->DisableFileDeletions());
2405
+ ASSERT_OK(dbfull()->GetLiveFiles(newfiles, &new_manifest_size));
2271
2406
 
2272
2407
  // find the new manifest file. assert that this manifest file is
2273
2408
  // the same one as in the previous snapshot. But its size should be
@@ -2279,20 +2414,41 @@ TEST_F(DBTest, SnapshotFiles) {
2279
2414
  // latest manifest file
2280
2415
  if (ParseFileName(newfiles[i].substr(1), &number, &type)) {
2281
2416
  if (type == kDescriptorFile) {
2282
- if (number > new_manifest_number) {
2283
- uint64_t size;
2284
- new_manifest_number = number;
2285
- ASSERT_OK(env_->GetFileSize(src, &size));
2286
- ASSERT_GE(size, new_manifest_size);
2287
- }
2417
+ ASSERT_EQ(new_manifest_number, 0);
2418
+ uint64_t size;
2419
+ new_manifest_number = number;
2420
+ ASSERT_OK(env_->GetFileSize(src, &size));
2421
+ ASSERT_GE(size, new_manifest_size);
2288
2422
  }
2289
2423
  }
2290
2424
  }
2291
2425
  ASSERT_EQ(manifest_number, new_manifest_number);
2292
2426
  ASSERT_GT(new_manifest_size, manifest_size);
2293
2427
 
2294
- // release file snapshot
2295
- dbfull()->DisableFileDeletions();
2428
+ // Also test GetLiveFilesStorageInfo
2429
+ std::vector<LiveFileStorageInfo> new_infos;
2430
+ ASSERT_OK(dbfull()->GetLiveFilesStorageInfo(LiveFilesStorageInfoOptions(),
2431
+ &new_infos));
2432
+
2433
+ // Close DB (while deletions disabled)
2434
+ Close();
2435
+
2436
+ // Validate
2437
+ for (auto& info : new_infos) {
2438
+ std::string path = info.directory + "/" + info.relative_filename;
2439
+ uint64_t size;
2440
+ ASSERT_OK(env_->GetFileSize(path, &size));
2441
+ if (info.trim_to_size) {
2442
+ ASSERT_LE(info.size, size);
2443
+ } else if (!info.replacement_contents.empty()) {
2444
+ ASSERT_EQ(info.size, info.replacement_contents.size());
2445
+ } else {
2446
+ ASSERT_EQ(info.size, size);
2447
+ }
2448
+ if (info.file_type == kDescriptorFile) {
2449
+ ASSERT_EQ(info.file_number, manifest_number);
2450
+ }
2451
+ }
2296
2452
  } while (ChangeCompactOptions());
2297
2453
  }
2298
2454
 
@@ -2313,7 +2469,7 @@ TEST_F(DBTest, ReadonlyDBGetLiveManifestSize) {
2313
2469
 
2314
2470
  uint64_t manifest_size = 0;
2315
2471
  std::vector<std::string> files;
2316
- dbfull()->GetLiveFiles(files, &manifest_size);
2472
+ ASSERT_OK(dbfull()->GetLiveFiles(files, &manifest_size));
2317
2473
 
2318
2474
  for (const std::string& f : files) {
2319
2475
  uint64_t number = 0;
@@ -2321,7 +2477,7 @@ TEST_F(DBTest, ReadonlyDBGetLiveManifestSize) {
2321
2477
  if (ParseFileName(f.substr(1), &number, &type)) {
2322
2478
  if (type == kDescriptorFile) {
2323
2479
  uint64_t size_on_disk;
2324
- env_->GetFileSize(dbname_ + "/" + f, &size_on_disk);
2480
+ ASSERT_OK(env_->GetFileSize(dbname_ + "/" + f, &size_on_disk));
2325
2481
  ASSERT_EQ(manifest_size, size_on_disk);
2326
2482
  break;
2327
2483
  }
@@ -2332,39 +2488,24 @@ TEST_F(DBTest, ReadonlyDBGetLiveManifestSize) {
2332
2488
  }
2333
2489
 
2334
2490
  TEST_F(DBTest, GetLiveBlobFiles) {
2335
- VersionSet* const versions = dbfull()->TEST_GetVersionSet();
2336
- assert(versions);
2337
- assert(versions->GetColumnFamilySet());
2338
-
2339
- ColumnFamilyData* const cfd = versions->GetColumnFamilySet()->GetDefault();
2340
- assert(cfd);
2341
-
2342
- Version* const version = cfd->current();
2343
- assert(version);
2344
-
2345
- VersionStorageInfo* const storage_info = version->storage_info();
2346
- assert(storage_info);
2491
+ // Note: the following prevents an otherwise harmless data race between the
2492
+ // test setup code (AddBlobFile) below and the periodic stat dumping thread.
2493
+ Options options = CurrentOptions();
2494
+ options.stats_dump_period_sec = 0;
2347
2495
 
2348
- // Add a live blob file.
2349
2496
  constexpr uint64_t blob_file_number = 234;
2350
2497
  constexpr uint64_t total_blob_count = 555;
2351
2498
  constexpr uint64_t total_blob_bytes = 66666;
2352
2499
  constexpr char checksum_method[] = "CRC32";
2353
- constexpr char checksum_value[] = "3d87ff57";
2354
-
2355
- auto shared_meta = SharedBlobFileMetaData::Create(
2356
- blob_file_number, total_blob_count, total_blob_bytes, checksum_method,
2357
- checksum_value);
2358
-
2500
+ constexpr char checksum_value[] = "\x3d\x87\xff\x57";
2359
2501
  constexpr uint64_t garbage_blob_count = 0;
2360
2502
  constexpr uint64_t garbage_blob_bytes = 0;
2361
2503
 
2362
- auto meta = BlobFileMetaData::Create(std::move(shared_meta),
2363
- BlobFileMetaData::LinkedSsts(),
2364
- garbage_blob_count, garbage_blob_bytes);
2365
-
2366
- storage_info->AddBlobFile(std::move(meta));
2504
+ Reopen(options);
2367
2505
 
2506
+ AddBlobFile(db_->DefaultColumnFamily(), blob_file_number, total_blob_count,
2507
+ total_blob_bytes, checksum_method, checksum_value,
2508
+ garbage_blob_count, garbage_blob_bytes);
2368
2509
  // Make sure it appears in the results returned by GetLiveFiles.
2369
2510
  uint64_t manifest_size = 0;
2370
2511
  std::vector<std::string> files;
@@ -2372,6 +2513,19 @@ TEST_F(DBTest, GetLiveBlobFiles) {
2372
2513
 
2373
2514
  ASSERT_FALSE(files.empty());
2374
2515
  ASSERT_EQ(files[0], BlobFileName("", blob_file_number));
2516
+
2517
+ ColumnFamilyMetaData cfmd;
2518
+
2519
+ db_->GetColumnFamilyMetaData(&cfmd);
2520
+ ASSERT_EQ(cfmd.blob_files.size(), 1);
2521
+ const BlobMetaData& bmd = cfmd.blob_files[0];
2522
+
2523
+ CheckBlobMetaData(bmd, blob_file_number, total_blob_count, total_blob_bytes,
2524
+ checksum_method, checksum_value, garbage_blob_count,
2525
+ garbage_blob_bytes);
2526
+ ASSERT_EQ(NormalizePath(bmd.blob_file_path), NormalizePath(dbname_));
2527
+ ASSERT_EQ(cfmd.blob_file_count, 1U);
2528
+ ASSERT_EQ(cfmd.blob_file_size, bmd.blob_file_size);
2375
2529
  }
2376
2530
  #endif
2377
2531
 
@@ -2383,7 +2537,7 @@ TEST_F(DBTest, PurgeInfoLogs) {
2383
2537
  for (int mode = 0; mode <= 1; mode++) {
2384
2538
  if (mode == 1) {
2385
2539
  options.db_log_dir = dbname_ + "_logs";
2386
- env_->CreateDirIfMissing(options.db_log_dir);
2540
+ ASSERT_OK(env_->CreateDirIfMissing(options.db_log_dir));
2387
2541
  } else {
2388
2542
  options.db_log_dir = "";
2389
2543
  }
@@ -2392,8 +2546,8 @@ TEST_F(DBTest, PurgeInfoLogs) {
2392
2546
  }
2393
2547
 
2394
2548
  std::vector<std::string> files;
2395
- env_->GetChildren(options.db_log_dir.empty() ? dbname_ : options.db_log_dir,
2396
- &files);
2549
+ ASSERT_OK(env_->GetChildren(
2550
+ options.db_log_dir.empty() ? dbname_ : options.db_log_dir, &files));
2397
2551
  int info_log_count = 0;
2398
2552
  for (std::string file : files) {
2399
2553
  if (file.find("LOG") != std::string::npos) {
@@ -2405,19 +2559,18 @@ TEST_F(DBTest, PurgeInfoLogs) {
2405
2559
  Destroy(options);
2406
2560
  // For mode (1), test DestroyDB() to delete all the logs under DB dir.
2407
2561
  // For mode (2), no info log file should have been put under DB dir.
2562
+ // Since dbname_ has no children, there is no need to loop db_files
2408
2563
  std::vector<std::string> db_files;
2409
- env_->GetChildren(dbname_, &db_files);
2410
- for (std::string file : db_files) {
2411
- ASSERT_TRUE(file.find("LOG") == std::string::npos);
2412
- }
2564
+ ASSERT_TRUE(env_->GetChildren(dbname_, &db_files).IsNotFound());
2565
+ ASSERT_TRUE(db_files.empty());
2413
2566
 
2414
2567
  if (mode == 1) {
2415
2568
  // Cleaning up
2416
- env_->GetChildren(options.db_log_dir, &files);
2569
+ ASSERT_OK(env_->GetChildren(options.db_log_dir, &files));
2417
2570
  for (std::string file : files) {
2418
- env_->DeleteFile(options.db_log_dir + "/" + file);
2571
+ ASSERT_OK(env_->DeleteFile(options.db_log_dir + "/" + file));
2419
2572
  }
2420
- env_->DeleteDir(options.db_log_dir);
2573
+ ASSERT_OK(env_->DeleteDir(options.db_log_dir));
2421
2574
  }
2422
2575
  }
2423
2576
  }
@@ -2433,9 +2586,7 @@ static const int kNumKeys = 1000;
2433
2586
 
2434
2587
  struct MTState {
2435
2588
  DBTest* test;
2436
- std::atomic<bool> stop;
2437
2589
  std::atomic<int> counter[kNumThreads];
2438
- std::atomic<bool> thread_done[kNumThreads];
2439
2590
  };
2440
2591
 
2441
2592
  struct MTThread {
@@ -2449,10 +2600,13 @@ static void MTThreadBody(void* arg) {
2449
2600
  int id = t->id;
2450
2601
  DB* db = t->state->test->db_;
2451
2602
  int counter = 0;
2603
+ std::shared_ptr<SystemClock> clock = SystemClock::Default();
2604
+ auto end_micros = clock->NowMicros() + kTestSeconds * 1000000U;
2605
+
2452
2606
  fprintf(stderr, "... starting thread %d\n", id);
2453
2607
  Random rnd(1000 + id);
2454
2608
  char valbuf[1500];
2455
- while (t->state->stop.load(std::memory_order_acquire) == false) {
2609
+ while (clock->NowMicros() < end_micros) {
2456
2610
  t->state->counter[id].store(counter, std::memory_order_release);
2457
2611
 
2458
2612
  int key = rnd.Uniform(kNumKeys);
@@ -2472,7 +2626,8 @@ static void MTThreadBody(void* arg) {
2472
2626
  for (int cf = 0; cf < kColumnFamilies; ++cf) {
2473
2627
  snprintf(valbuf, sizeof(valbuf), "%d.%d.%d.%d.%-1000d", key, id,
2474
2628
  static_cast<int>(counter), cf, unique_id);
2475
- batch.Put(t->state->test->handles_[cf], Slice(keybuf), Slice(valbuf));
2629
+ ASSERT_OK(batch.Put(t->state->test->handles_[cf], Slice(keybuf),
2630
+ Slice(valbuf)));
2476
2631
  }
2477
2632
  ASSERT_OK(db->Write(WriteOptions(), &batch));
2478
2633
  } else {
@@ -2480,7 +2635,8 @@ static void MTThreadBody(void* arg) {
2480
2635
  for (int cf = 0; cf < kColumnFamilies; ++cf) {
2481
2636
  snprintf(valbuf, sizeof(valbuf), "%d.%d.%d.%d.%-1000d", key, id,
2482
2637
  static_cast<int>(counter), cf, unique_id);
2483
- batch.Put(t->state->test->handles_[cf], Slice(keybuf), Slice(valbuf));
2638
+ ASSERT_OK(batch.Put(t->state->test->handles_[cf], Slice(keybuf),
2639
+ Slice(valbuf)));
2484
2640
  }
2485
2641
  ASSERT_OK(db->Write(WriteOptions(), batch.GetWriteBatch()));
2486
2642
  }
@@ -2547,7 +2703,6 @@ static void MTThreadBody(void* arg) {
2547
2703
  }
2548
2704
  counter++;
2549
2705
  }
2550
- t->state->thread_done[id].store(true, std::memory_order_release);
2551
2706
  fprintf(stderr, "... stopping thread %d after %d ops\n", id, int(counter));
2552
2707
  }
2553
2708
 
@@ -2586,10 +2741,8 @@ TEST_P(MultiThreadedDBTest, MultiThreaded) {
2586
2741
  // Initialize state
2587
2742
  MTState mt;
2588
2743
  mt.test = this;
2589
- mt.stop.store(false, std::memory_order_release);
2590
2744
  for (int id = 0; id < kNumThreads; id++) {
2591
2745
  mt.counter[id].store(0, std::memory_order_release);
2592
- mt.thread_done[id].store(false, std::memory_order_release);
2593
2746
  }
2594
2747
 
2595
2748
  // Start threads
@@ -2601,16 +2754,7 @@ TEST_P(MultiThreadedDBTest, MultiThreaded) {
2601
2754
  env_->StartThread(MTThreadBody, &thread[id]);
2602
2755
  }
2603
2756
 
2604
- // Let them run for a while
2605
- env_->SleepForMicroseconds(kTestSeconds * 1000000);
2606
-
2607
- // Stop the threads and wait for them to finish
2608
- mt.stop.store(true, std::memory_order_release);
2609
- for (int id = 0; id < kNumThreads; id++) {
2610
- while (mt.thread_done[id].load(std::memory_order_acquire) == false) {
2611
- env_->SleepForMicroseconds(100000);
2612
- }
2613
- }
2757
+ env_->WaitForJoin();
2614
2758
  }
2615
2759
 
2616
2760
  INSTANTIATE_TEST_CASE_P(
@@ -2701,7 +2845,7 @@ TEST_F(DBTest, GroupCommitTest) {
2701
2845
  #endif // TRAVIS
2702
2846
 
2703
2847
  namespace {
2704
- typedef std::map<std::string, std::string> KVMap;
2848
+ using KVMap = std::map<std::string, std::string>;
2705
2849
  }
2706
2850
 
2707
2851
  class ModelDB : public DB {
@@ -2722,30 +2866,55 @@ class ModelDB : public DB {
2722
2866
  Status Put(const WriteOptions& o, ColumnFamilyHandle* cf, const Slice& k,
2723
2867
  const Slice& v) override {
2724
2868
  WriteBatch batch;
2725
- batch.Put(cf, k, v);
2869
+ Status s = batch.Put(cf, k, v);
2870
+ if (!s.ok()) {
2871
+ return s;
2872
+ }
2726
2873
  return Write(o, &batch);
2727
2874
  }
2875
+ Status Put(const WriteOptions& /*o*/, ColumnFamilyHandle* /*cf*/,
2876
+ const Slice& /*k*/, const Slice& /*ts*/,
2877
+ const Slice& /*v*/) override {
2878
+ return Status::NotSupported();
2879
+ }
2728
2880
  using DB::Close;
2729
2881
  Status Close() override { return Status::OK(); }
2730
2882
  using DB::Delete;
2731
2883
  Status Delete(const WriteOptions& o, ColumnFamilyHandle* cf,
2732
2884
  const Slice& key) override {
2733
2885
  WriteBatch batch;
2734
- batch.Delete(cf, key);
2886
+ Status s = batch.Delete(cf, key);
2887
+ if (!s.ok()) {
2888
+ return s;
2889
+ }
2735
2890
  return Write(o, &batch);
2736
2891
  }
2892
+ Status Delete(const WriteOptions& /*o*/, ColumnFamilyHandle* /*cf*/,
2893
+ const Slice& /*key*/, const Slice& /*ts*/) override {
2894
+ return Status::NotSupported();
2895
+ }
2737
2896
  using DB::SingleDelete;
2738
2897
  Status SingleDelete(const WriteOptions& o, ColumnFamilyHandle* cf,
2739
2898
  const Slice& key) override {
2740
2899
  WriteBatch batch;
2741
- batch.SingleDelete(cf, key);
2900
+ Status s = batch.SingleDelete(cf, key);
2901
+ if (!s.ok()) {
2902
+ return s;
2903
+ }
2742
2904
  return Write(o, &batch);
2743
2905
  }
2906
+ Status SingleDelete(const WriteOptions& /*o*/, ColumnFamilyHandle* /*cf*/,
2907
+ const Slice& /*key*/, const Slice& /*ts*/) override {
2908
+ return Status::NotSupported();
2909
+ }
2744
2910
  using DB::Merge;
2745
2911
  Status Merge(const WriteOptions& o, ColumnFamilyHandle* cf, const Slice& k,
2746
2912
  const Slice& v) override {
2747
2913
  WriteBatch batch;
2748
- batch.Merge(cf, k, v);
2914
+ Status s = batch.Merge(cf, k, v);
2915
+ if (!s.ok()) {
2916
+ return s;
2917
+ }
2749
2918
  return Write(o, &batch);
2750
2919
  }
2751
2920
  using DB::Get;
@@ -3009,6 +3178,12 @@ class ModelDB : public DB {
3009
3178
  return Status::OK();
3010
3179
  }
3011
3180
 
3181
+ Status GetLiveFilesStorageInfo(
3182
+ const LiveFilesStorageInfoOptions& /*opts*/,
3183
+ std::vector<LiveFileStorageInfo>* /*files*/) override {
3184
+ return Status::OK();
3185
+ }
3186
+
3012
3187
  Status GetSortedWalFiles(VectorLogPtr& /*files*/) override {
3013
3188
  return Status::OK();
3014
3189
  }
@@ -3047,8 +3222,14 @@ class ModelDB : public DB {
3047
3222
 
3048
3223
  SequenceNumber GetLatestSequenceNumber() const override { return 0; }
3049
3224
 
3050
- bool SetPreserveDeletesSequenceNumber(SequenceNumber /*seqnum*/) override {
3051
- return true;
3225
+ Status IncreaseFullHistoryTsLow(ColumnFamilyHandle* /*cf*/,
3226
+ std::string /*ts_low*/) override {
3227
+ return Status::OK();
3228
+ }
3229
+
3230
+ Status GetFullHistoryTsLow(ColumnFamilyHandle* /*cf*/,
3231
+ std::string* /*ts_low*/) override {
3232
+ return Status::OK();
3052
3233
  }
3053
3234
 
3054
3235
  ColumnFamilyHandle* DefaultColumnFamily() const override { return nullptr; }
@@ -3100,7 +3281,7 @@ class ModelDB : public DB {
3100
3281
  std::string name_ = "";
3101
3282
  };
3102
3283
 
3103
- #ifndef ROCKSDB_VALGRIND_RUN
3284
+ #if !defined(ROCKSDB_VALGRIND_RUN) || defined(ROCKSDB_FULL_VALGRIND_RUN)
3104
3285
  static std::string RandomKey(Random* rnd, int minimum = 0) {
3105
3286
  int len;
3106
3287
  do {
@@ -3220,9 +3401,9 @@ TEST_P(DBTestRandomized, Randomized) {
3220
3401
  }
3221
3402
  if (rnd.OneIn(2)) {
3222
3403
  v = rnd.RandomString(rnd.Uniform(10));
3223
- b.Put(k, v);
3404
+ ASSERT_OK(b.Put(k, v));
3224
3405
  } else {
3225
- b.Delete(k);
3406
+ ASSERT_OK(b.Delete(k));
3226
3407
  }
3227
3408
  }
3228
3409
  ASSERT_OK(model.Write(WriteOptions(), &b));
@@ -3255,7 +3436,7 @@ TEST_P(DBTestRandomized, Randomized) {
3255
3436
  if (model_snap != nullptr) model.ReleaseSnapshot(model_snap);
3256
3437
  if (db_snap != nullptr) db_->ReleaseSnapshot(db_snap);
3257
3438
  }
3258
- #endif // ROCKSDB_VALGRIND_RUN
3439
+ #endif // !defined(ROCKSDB_VALGRIND_RUN) || defined(ROCKSDB_FULL_VALGRIND_RUN)
3259
3440
 
3260
3441
  TEST_F(DBTest, BlockBasedTablePrefixIndexTest) {
3261
3442
  // create a DB with block prefix index
@@ -3267,7 +3448,7 @@ TEST_F(DBTest, BlockBasedTablePrefixIndexTest) {
3267
3448
 
3268
3449
  Reopen(options);
3269
3450
  ASSERT_OK(Put("k1", "v1"));
3270
- Flush();
3451
+ ASSERT_OK(Flush());
3271
3452
  ASSERT_OK(Put("k2", "v2"));
3272
3453
 
3273
3454
  // Reopen it without prefix extractor, make sure everything still works.
@@ -3280,6 +3461,27 @@ TEST_F(DBTest, BlockBasedTablePrefixIndexTest) {
3280
3461
  ASSERT_EQ("v1", Get("k1"));
3281
3462
  ASSERT_EQ("v2", Get("k2"));
3282
3463
  }
3464
+ TEST_F(DBTest, BlockBasedTablePrefixHashIndexTest) {
3465
+ // create a DB with block prefix index
3466
+ BlockBasedTableOptions table_options;
3467
+ Options options = CurrentOptions();
3468
+ table_options.index_type = BlockBasedTableOptions::kHashSearch;
3469
+ options.table_factory.reset(NewBlockBasedTableFactory(table_options));
3470
+ options.prefix_extractor.reset(NewCappedPrefixTransform(2));
3471
+
3472
+ Reopen(options);
3473
+ ASSERT_OK(Put("kk1", "v1"));
3474
+ ASSERT_OK(Put("kk2", "v2"));
3475
+ ASSERT_OK(Put("kk", "v3"));
3476
+ ASSERT_OK(Put("k", "v4"));
3477
+ Flush();
3478
+
3479
+ ASSERT_EQ("v1", Get("kk1"));
3480
+ ASSERT_EQ("v2", Get("kk2"));
3481
+
3482
+ ASSERT_EQ("v3", Get("kk"));
3483
+ ASSERT_EQ("v4", Get("k"));
3484
+ }
3283
3485
 
3284
3486
  TEST_F(DBTest, BlockBasedTablePrefixIndexTotalOrderSeek) {
3285
3487
  // create a DB with block prefix index
@@ -3300,7 +3502,7 @@ TEST_F(DBTest, BlockBasedTablePrefixIndexTotalOrderSeek) {
3300
3502
 
3301
3503
  Reopen(options);
3302
3504
  ASSERT_OK(Put("k1", "v1"));
3303
- Flush();
3505
+ ASSERT_OK(Flush());
3304
3506
 
3305
3507
  CompactRangeOptions cro;
3306
3508
  cro.change_level = true;
@@ -3429,7 +3631,7 @@ TEST_F(DBTest, FIFOCompactionTestWithCompaction) {
3429
3631
  for (int j = 0; j < 20; j++) {
3430
3632
  ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980)));
3431
3633
  }
3432
- Flush();
3634
+ ASSERT_OK(Flush());
3433
3635
  ASSERT_OK(dbfull()->TEST_WaitForCompact());
3434
3636
  }
3435
3637
  // It should be compacted to 10 files.
@@ -3440,7 +3642,7 @@ TEST_F(DBTest, FIFOCompactionTestWithCompaction) {
3440
3642
  for (int j = 0; j < 20; j++) {
3441
3643
  ASSERT_OK(Put(ToString(i * 20 + j + 2000), rnd.RandomString(980)));
3442
3644
  }
3443
- Flush();
3645
+ ASSERT_OK(Flush());
3444
3646
  ASSERT_OK(dbfull()->TEST_WaitForCompact());
3445
3647
  }
3446
3648
 
@@ -3471,7 +3673,7 @@ TEST_F(DBTest, FIFOCompactionStyleWithCompactionAndDelete) {
3471
3673
  ASSERT_OK(Put("a" + ToString(i), rnd.RandomString(500)));
3472
3674
  ASSERT_OK(Put("key" + ToString(i), ""));
3473
3675
  ASSERT_OK(Put("z" + ToString(i), rnd.RandomString(500)));
3474
- Flush();
3676
+ ASSERT_OK(Flush());
3475
3677
  ASSERT_OK(dbfull()->TEST_WaitForCompact());
3476
3678
  }
3477
3679
  ASSERT_EQ(NumTableFilesAtLevel(0), 1);
@@ -3483,7 +3685,7 @@ TEST_F(DBTest, FIFOCompactionStyleWithCompactionAndDelete) {
3483
3685
  ASSERT_OK(Put("a" + ToString(i), rnd.RandomString(500)));
3484
3686
  ASSERT_OK(Delete("key" + ToString(i)));
3485
3687
  ASSERT_OK(Put("z" + ToString(i), rnd.RandomString(500)));
3486
- Flush();
3688
+ ASSERT_OK(Flush());
3487
3689
  ASSERT_OK(dbfull()->TEST_WaitForCompact());
3488
3690
  }
3489
3691
  ASSERT_EQ(NumTableFilesAtLevel(0), 2);
@@ -3493,17 +3695,21 @@ TEST_F(DBTest, FIFOCompactionStyleWithCompactionAndDelete) {
3493
3695
  }
3494
3696
 
3495
3697
  // Check that FIFO-with-TTL is not supported with max_open_files != -1.
3698
+ // Github issue #8014
3496
3699
  TEST_F(DBTest, FIFOCompactionWithTTLAndMaxOpenFilesTest) {
3497
- Options options;
3700
+ Options options = CurrentOptions();
3498
3701
  options.compaction_style = kCompactionStyleFIFO;
3499
3702
  options.create_if_missing = true;
3500
3703
  options.ttl = 600; // seconds
3501
3704
 
3502
- // TTL is now supported with max_open_files != -1.
3705
+ // TTL is not supported with max_open_files != -1.
3706
+ options.max_open_files = 0;
3707
+ ASSERT_TRUE(TryReopen(options).IsNotSupported());
3708
+
3503
3709
  options.max_open_files = 100;
3504
- options = CurrentOptions(options);
3505
- ASSERT_OK(TryReopen(options));
3710
+ ASSERT_TRUE(TryReopen(options).IsNotSupported());
3506
3711
 
3712
+ // TTL is supported with unlimited max_open_files
3507
3713
  options.max_open_files = -1;
3508
3714
  ASSERT_OK(TryReopen(options));
3509
3715
  }
@@ -3555,7 +3761,7 @@ TEST_F(DBTest, FIFOCompactionWithTTLTest) {
3555
3761
  for (int j = 0; j < 10; j++) {
3556
3762
  ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980)));
3557
3763
  }
3558
- Flush();
3764
+ ASSERT_OK(Flush());
3559
3765
  ASSERT_OK(dbfull()->TEST_WaitForCompact());
3560
3766
  }
3561
3767
  ASSERT_EQ(NumTableFilesAtLevel(0), 10);
@@ -3568,7 +3774,7 @@ TEST_F(DBTest, FIFOCompactionWithTTLTest) {
3568
3774
  ASSERT_OK(dbfull()->TEST_WaitForCompact());
3569
3775
  ASSERT_EQ(NumTableFilesAtLevel(0), 10);
3570
3776
 
3571
- dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr);
3777
+ ASSERT_OK(dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr));
3572
3778
  ASSERT_EQ(NumTableFilesAtLevel(0), 0);
3573
3779
  }
3574
3780
 
@@ -3587,7 +3793,7 @@ TEST_F(DBTest, FIFOCompactionWithTTLTest) {
3587
3793
  for (int j = 0; j < 10; j++) {
3588
3794
  ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980)));
3589
3795
  }
3590
- Flush();
3796
+ ASSERT_OK(Flush());
3591
3797
  ASSERT_OK(dbfull()->TEST_WaitForCompact());
3592
3798
  }
3593
3799
  ASSERT_EQ(NumTableFilesAtLevel(0), 10);
@@ -3603,7 +3809,7 @@ TEST_F(DBTest, FIFOCompactionWithTTLTest) {
3603
3809
  for (int j = 0; j < 10; j++) {
3604
3810
  ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980)));
3605
3811
  }
3606
- Flush();
3812
+ ASSERT_OK(Flush());
3607
3813
  }
3608
3814
 
3609
3815
  ASSERT_OK(dbfull()->TEST_WaitForCompact());
@@ -3629,7 +3835,7 @@ TEST_F(DBTest, FIFOCompactionWithTTLTest) {
3629
3835
  for (int j = 0; j < 10; j++) {
3630
3836
  ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980)));
3631
3837
  }
3632
- Flush();
3838
+ ASSERT_OK(Flush());
3633
3839
  ASSERT_OK(dbfull()->TEST_WaitForCompact());
3634
3840
  }
3635
3841
  ASSERT_EQ(NumTableFilesAtLevel(0), 3);
@@ -3644,7 +3850,7 @@ TEST_F(DBTest, FIFOCompactionWithTTLTest) {
3644
3850
  for (int j = 0; j < 140; j++) {
3645
3851
  ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980)));
3646
3852
  }
3647
- Flush();
3853
+ ASSERT_OK(Flush());
3648
3854
  ASSERT_OK(dbfull()->TEST_WaitForCompact());
3649
3855
  }
3650
3856
  // Size limit is still guaranteed.
@@ -3667,7 +3873,7 @@ TEST_F(DBTest, FIFOCompactionWithTTLTest) {
3667
3873
  for (int j = 0; j < 10; j++) {
3668
3874
  ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980)));
3669
3875
  }
3670
- Flush();
3876
+ ASSERT_OK(Flush());
3671
3877
  ASSERT_OK(dbfull()->TEST_WaitForCompact());
3672
3878
  }
3673
3879
  // With Intra-L0 compaction, out of 10 files, 6 files will be compacted to 1
@@ -3686,7 +3892,7 @@ TEST_F(DBTest, FIFOCompactionWithTTLTest) {
3686
3892
  for (int j = 0; j < 10; j++) {
3687
3893
  ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980)));
3688
3894
  }
3689
- Flush();
3895
+ ASSERT_OK(Flush());
3690
3896
  ASSERT_OK(dbfull()->TEST_WaitForCompact());
3691
3897
  }
3692
3898
  ASSERT_EQ(NumTableFilesAtLevel(0), 5);
@@ -3711,7 +3917,7 @@ TEST_F(DBTest, FIFOCompactionWithTTLTest) {
3711
3917
  for (int j = 0; j < 20; j++) {
3712
3918
  ASSERT_OK(Put(ToString(i * 20 + j), rnd.RandomString(980)));
3713
3919
  }
3714
- Flush();
3920
+ ASSERT_OK(Flush());
3715
3921
  ASSERT_OK(dbfull()->TEST_WaitForCompact());
3716
3922
  }
3717
3923
  // It should be compacted to 10 files.
@@ -3722,7 +3928,7 @@ TEST_F(DBTest, FIFOCompactionWithTTLTest) {
3722
3928
  for (int j = 0; j < 20; j++) {
3723
3929
  ASSERT_OK(Put(ToString(i * 20 + j + 2000), rnd.RandomString(980)));
3724
3930
  }
3725
- Flush();
3931
+ ASSERT_OK(Flush());
3726
3932
  ASSERT_OK(dbfull()->TEST_WaitForCompact());
3727
3933
  }
3728
3934
 
@@ -3823,6 +4029,59 @@ TEST_F(DBTest, DISABLED_RateLimitingTest) {
3823
4029
  ASSERT_LT(ratio, 0.6);
3824
4030
  }
3825
4031
 
4032
+ // This is a mocked customed rate limiter without implementing optional APIs
4033
+ // (e.g, RateLimiter::GetTotalPendingRequests())
4034
+ class MockedRateLimiterWithNoOptionalAPIImpl : public RateLimiter {
4035
+ public:
4036
+ MockedRateLimiterWithNoOptionalAPIImpl() {}
4037
+
4038
+ ~MockedRateLimiterWithNoOptionalAPIImpl() override {}
4039
+
4040
+ const char* Name() const override {
4041
+ return "MockedRateLimiterWithNoOptionalAPI";
4042
+ }
4043
+ void SetBytesPerSecond(int64_t bytes_per_second) override {
4044
+ (void)bytes_per_second;
4045
+ }
4046
+
4047
+ using RateLimiter::Request;
4048
+ void Request(const int64_t bytes, const Env::IOPriority pri,
4049
+ Statistics* stats) override {
4050
+ (void)bytes;
4051
+ (void)pri;
4052
+ (void)stats;
4053
+ }
4054
+
4055
+ int64_t GetSingleBurstBytes() const override { return 200; }
4056
+
4057
+ int64_t GetTotalBytesThrough(
4058
+ const Env::IOPriority pri = Env::IO_TOTAL) const override {
4059
+ (void)pri;
4060
+ return 0;
4061
+ }
4062
+
4063
+ int64_t GetTotalRequests(
4064
+ const Env::IOPriority pri = Env::IO_TOTAL) const override {
4065
+ (void)pri;
4066
+ return 0;
4067
+ }
4068
+
4069
+ int64_t GetBytesPerSecond() const override { return 0; }
4070
+ };
4071
+
4072
+ // To test that customed rate limiter not implementing optional APIs (e.g,
4073
+ // RateLimiter::GetTotalPendingRequests()) works fine with RocksDB basic
4074
+ // operations (e.g, Put, Get, Flush)
4075
+ TEST_F(DBTest, CustomedRateLimiterWithNoOptionalAPIImplTest) {
4076
+ Options options = CurrentOptions();
4077
+ options.rate_limiter.reset(new MockedRateLimiterWithNoOptionalAPIImpl());
4078
+ DestroyAndReopen(options);
4079
+ ASSERT_OK(Put("abc", "def"));
4080
+ ASSERT_EQ(Get("abc"), "def");
4081
+ ASSERT_OK(Flush());
4082
+ ASSERT_EQ(Get("abc"), "def");
4083
+ }
4084
+
3826
4085
  TEST_F(DBTest, TableOptionsSanitizeTest) {
3827
4086
  Options options = CurrentOptions();
3828
4087
  options.create_if_missing = true;
@@ -3910,7 +4169,7 @@ TEST_F(DBTest, SanitizeNumThreads) {
3910
4169
 
3911
4170
  ASSERT_OK(Put("abc", "def"));
3912
4171
  ASSERT_EQ("def", Get("abc"));
3913
- Flush();
4172
+ ASSERT_OK(Flush());
3914
4173
  ASSERT_EQ("def", Get("abc"));
3915
4174
  }
3916
4175
  }
@@ -3919,9 +4178,9 @@ TEST_F(DBTest, WriteSingleThreadEntry) {
3919
4178
  std::vector<port::Thread> threads;
3920
4179
  dbfull()->TEST_LockMutex();
3921
4180
  auto w = dbfull()->TEST_BeginWrite();
3922
- threads.emplace_back([&] { Put("a", "b"); });
4181
+ threads.emplace_back([&] { ASSERT_OK(Put("a", "b")); });
3923
4182
  env_->SleepForMicroseconds(10000);
3924
- threads.emplace_back([&] { Flush(); });
4183
+ threads.emplace_back([&] { ASSERT_OK(Flush()); });
3925
4184
  env_->SleepForMicroseconds(10000);
3926
4185
  dbfull()->TEST_UnlockMutex();
3927
4186
  dbfull()->TEST_LockMutex();
@@ -3949,7 +4208,8 @@ TEST_F(DBTest, ConcurrentFlushWAL) {
3949
4208
  threads.emplace_back([&] {
3950
4209
  for (size_t i = 0; i < cnt; i++) {
3951
4210
  auto istr = ToString(i);
3952
- db_->Put(wopt, db_->DefaultColumnFamily(), "a" + istr, "b" + istr);
4211
+ ASSERT_OK(db_->Put(wopt, db_->DefaultColumnFamily(), "a" + istr,
4212
+ "b" + istr));
3953
4213
  }
3954
4214
  });
3955
4215
  if (two_write_queues) {
@@ -3957,14 +4217,15 @@ TEST_F(DBTest, ConcurrentFlushWAL) {
3957
4217
  for (size_t i = cnt; i < 2 * cnt; i++) {
3958
4218
  auto istr = ToString(i);
3959
4219
  WriteBatch batch;
3960
- batch.Put("a" + istr, "b" + istr);
3961
- dbfull()->WriteImpl(wopt, &batch, nullptr, nullptr, 0, true);
4220
+ ASSERT_OK(batch.Put("a" + istr, "b" + istr));
4221
+ ASSERT_OK(
4222
+ dbfull()->WriteImpl(wopt, &batch, nullptr, nullptr, 0, true));
3962
4223
  }
3963
4224
  });
3964
4225
  }
3965
4226
  threads.emplace_back([&] {
3966
4227
  for (size_t i = 0; i < cnt * 100; i++) { // FlushWAL is faster than Put
3967
- db_->FlushWAL(false);
4228
+ ASSERT_OK(db_->FlushWAL(false));
3968
4229
  }
3969
4230
  });
3970
4231
  for (auto& t : threads) {
@@ -3984,6 +4245,39 @@ TEST_F(DBTest, ConcurrentFlushWAL) {
3984
4245
  }
3985
4246
  }
3986
4247
 
4248
+ // This test failure will be caught with a probability
4249
+ TEST_F(DBTest, ManualFlushWalAndWriteRace) {
4250
+ Options options;
4251
+ options.env = env_;
4252
+ options.manual_wal_flush = true;
4253
+ options.create_if_missing = true;
4254
+
4255
+ DestroyAndReopen(options);
4256
+
4257
+ WriteOptions wopts;
4258
+ wopts.sync = true;
4259
+
4260
+ port::Thread writeThread([&]() {
4261
+ for (int i = 0; i < 100; i++) {
4262
+ auto istr = ToString(i);
4263
+ ASSERT_OK(dbfull()->Put(wopts, "key_" + istr, "value_" + istr));
4264
+ }
4265
+ });
4266
+ port::Thread flushThread([&]() {
4267
+ for (int i = 0; i < 100; i++) {
4268
+ ASSERT_OK(dbfull()->FlushWAL(false));
4269
+ }
4270
+ });
4271
+
4272
+ writeThread.join();
4273
+ flushThread.join();
4274
+ ASSERT_OK(dbfull()->Put(wopts, "foo1", "value1"));
4275
+ ASSERT_OK(dbfull()->Put(wopts, "foo2", "value2"));
4276
+ Reopen(options);
4277
+ ASSERT_EQ("value1", Get("foo1"));
4278
+ ASSERT_EQ("value2", Get("foo2"));
4279
+ }
4280
+
3987
4281
  #ifndef ROCKSDB_LITE
3988
4282
  TEST_F(DBTest, DynamicMemtableOptions) {
3989
4283
  const uint64_t k64KB = 1 << 16;
@@ -4015,10 +4309,10 @@ TEST_F(DBTest, DynamicMemtableOptions) {
4015
4309
  // multiple memtables are flushed into a single L0 file. This race
4016
4310
  // condition affects assertion (A).
4017
4311
  if (i % kNumPutsBeforeWaitForFlush == kNumPutsBeforeWaitForFlush - 1) {
4018
- dbfull()->TEST_WaitForFlushMemTable();
4312
+ ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
4019
4313
  }
4020
4314
  }
4021
- dbfull()->TEST_WaitForFlushMemTable();
4315
+ ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
4022
4316
  };
4023
4317
 
4024
4318
  // Test write_buffer_size
@@ -4028,7 +4322,7 @@ TEST_F(DBTest, DynamicMemtableOptions) {
4028
4322
  ASSERT_GT(SizeAtLevel(0), k64KB - k5KB * 2);
4029
4323
 
4030
4324
  // Clean up L0
4031
- dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr);
4325
+ ASSERT_OK(dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr));
4032
4326
  ASSERT_EQ(NumTableFilesAtLevel(0), 0);
4033
4327
 
4034
4328
  // Increase buffer size
@@ -4094,7 +4388,7 @@ TEST_F(DBTest, DynamicMemtableOptions) {
4094
4388
  {"max_write_buffer_number", "8"},
4095
4389
  }));
4096
4390
  // Clean up memtable and L0
4097
- dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr);
4391
+ ASSERT_OK(dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr));
4098
4392
 
4099
4393
  sleeping_task_low.Reset();
4100
4394
  env_->Schedule(&test::SleepingBackgroundTask::DoSleepTask, &sleeping_task_low,
@@ -4117,7 +4411,7 @@ TEST_F(DBTest, DynamicMemtableOptions) {
4117
4411
  {"max_write_buffer_number", "4"},
4118
4412
  }));
4119
4413
  // Clean up memtable and L0
4120
- dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr);
4414
+ ASSERT_OK(dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr));
4121
4415
 
4122
4416
  sleeping_task_low.Reset();
4123
4417
  env_->Schedule(&test::SleepingBackgroundTask::DoSleepTask, &sleeping_task_low,
@@ -4217,7 +4511,7 @@ TEST_F(DBTest, GetThreadStatus) {
4217
4511
  true);
4218
4512
  }
4219
4513
  }
4220
- db_->DropColumnFamily(handles_[2]);
4514
+ ASSERT_OK(db_->DropColumnFamily(handles_[2]));
4221
4515
  delete handles_[2];
4222
4516
  handles_.erase(handles_.begin() + 2);
4223
4517
  env_->GetThreadStatusUpdater()->TEST_VerifyColumnFamilyInfoMap(handles_,
@@ -4259,17 +4553,19 @@ TEST_F(DBTest, ThreadStatusFlush) {
4259
4553
  VerifyOperationCount(env_, ThreadStatus::OP_FLUSH, 0);
4260
4554
 
4261
4555
  uint64_t num_running_flushes = 0;
4262
- db_->GetIntProperty(DB::Properties::kNumRunningFlushes, &num_running_flushes);
4556
+ ASSERT_TRUE(db_->GetIntProperty(DB::Properties::kNumRunningFlushes,
4557
+ &num_running_flushes));
4263
4558
  ASSERT_EQ(num_running_flushes, 0);
4264
4559
 
4265
- Put(1, "k1", std::string(100000, 'x')); // Fill memtable
4266
- Put(1, "k2", std::string(100000, 'y')); // Trigger flush
4560
+ ASSERT_OK(Put(1, "k1", std::string(100000, 'x'))); // Fill memtable
4561
+ ASSERT_OK(Put(1, "k2", std::string(100000, 'y'))); // Trigger flush
4267
4562
 
4268
4563
  // The first sync point is to make sure there's one flush job
4269
4564
  // running when we perform VerifyOperationCount().
4270
4565
  TEST_SYNC_POINT("DBTest::ThreadStatusFlush:1");
4271
4566
  VerifyOperationCount(env_, ThreadStatus::OP_FLUSH, 1);
4272
- db_->GetIntProperty(DB::Properties::kNumRunningFlushes, &num_running_flushes);
4567
+ ASSERT_TRUE(db_->GetIntProperty(DB::Properties::kNumRunningFlushes,
4568
+ &num_running_flushes));
4273
4569
  ASSERT_EQ(num_running_flushes, 1);
4274
4570
  // This second sync point is to ensure the flush job will not
4275
4571
  // be completed until we already perform VerifyOperationCount().
@@ -4314,13 +4610,13 @@ TEST_P(DBTestWithParam, ThreadStatusSingleCompaction) {
4314
4610
  ASSERT_OK(Put(ToString(key + file * kEntriesPerBuffer),
4315
4611
  rnd.RandomString(kTestValueSize)));
4316
4612
  }
4317
- Flush();
4613
+ ASSERT_OK(Flush());
4318
4614
  }
4319
4615
  // This makes sure a compaction won't be scheduled until
4320
4616
  // we have done with the above Put Phase.
4321
4617
  uint64_t num_running_compactions = 0;
4322
- db_->GetIntProperty(DB::Properties::kNumRunningCompactions,
4323
- &num_running_compactions);
4618
+ ASSERT_TRUE(db_->GetIntProperty(DB::Properties::kNumRunningCompactions,
4619
+ &num_running_compactions));
4324
4620
  ASSERT_EQ(num_running_compactions, 0);
4325
4621
  TEST_SYNC_POINT("DBTest::ThreadStatusSingleCompaction:0");
4326
4622
  ASSERT_GE(NumTableFilesAtLevel(0),
@@ -4336,8 +4632,8 @@ TEST_P(DBTestWithParam, ThreadStatusSingleCompaction) {
4336
4632
  // If thread tracking is not enabled, compaction count should be 0.
4337
4633
  VerifyOperationCount(env_, ThreadStatus::OP_COMPACTION, 0);
4338
4634
  }
4339
- db_->GetIntProperty(DB::Properties::kNumRunningCompactions,
4340
- &num_running_compactions);
4635
+ ASSERT_TRUE(db_->GetIntProperty(DB::Properties::kNumRunningCompactions,
4636
+ &num_running_compactions));
4341
4637
  ASSERT_EQ(num_running_compactions, 1);
4342
4638
  // TODO(yhchiang): adding assert to verify each compaction stage.
4343
4639
  TEST_SYNC_POINT("DBTest::ThreadStatusSingleCompaction:2");
@@ -4383,7 +4679,9 @@ TEST_P(DBTestWithParam, PreShutdownManualCompaction) {
4383
4679
  MakeTables(1, "a", "z", 1);
4384
4680
  ASSERT_EQ("1,0,2", FilesPerLevel(1));
4385
4681
  CancelAllBackgroundWork(db_);
4386
- db_->CompactRange(CompactRangeOptions(), handles_[1], nullptr, nullptr);
4682
+ ASSERT_TRUE(
4683
+ db_->CompactRange(CompactRangeOptions(), handles_[1], nullptr, nullptr)
4684
+ .IsShutdownInProgress());
4387
4685
  ASSERT_EQ("1,0,2", FilesPerLevel(1));
4388
4686
 
4389
4687
  if (iter == 0) {
@@ -4463,7 +4761,7 @@ TEST_P(DBTestWithParam, PreShutdownMultipleCompaction) {
4463
4761
  ASSERT_OK(Put(ToString(key++), rnd.RandomString(kTestValueSize)));
4464
4762
  }
4465
4763
 
4466
- Status s = env_->GetThreadList(&thread_list);
4764
+ ASSERT_OK(env_->GetThreadList(&thread_list));
4467
4765
  for (auto thread : thread_list) {
4468
4766
  operation_count[thread.operation_type]++;
4469
4767
  }
@@ -4483,12 +4781,12 @@ TEST_P(DBTestWithParam, PreShutdownMultipleCompaction) {
4483
4781
  ASSERT_GE(operation_count[ThreadStatus::OP_COMPACTION], 1);
4484
4782
  CancelAllBackgroundWork(db_);
4485
4783
  TEST_SYNC_POINT("DBTest::PreShutdownMultipleCompaction:VerifyPreshutdown");
4486
- dbfull()->TEST_WaitForCompact();
4784
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
4487
4785
  // Record the number of compactions at a time.
4488
4786
  for (int i = 0; i < ThreadStatus::NUM_OP_TYPES; ++i) {
4489
4787
  operation_count[i] = 0;
4490
4788
  }
4491
- Status s = env_->GetThreadList(&thread_list);
4789
+ ASSERT_OK(env_->GetThreadList(&thread_list));
4492
4790
  for (auto thread : thread_list) {
4493
4791
  operation_count[thread.operation_type]++;
4494
4792
  }
@@ -4550,7 +4848,7 @@ TEST_P(DBTestWithParam, PreShutdownCompactionMiddle) {
4550
4848
  ASSERT_OK(Put(ToString(key++), rnd.RandomString(kTestValueSize)));
4551
4849
  }
4552
4850
 
4553
- Status s = env_->GetThreadList(&thread_list);
4851
+ ASSERT_OK(env_->GetThreadList(&thread_list));
4554
4852
  for (auto thread : thread_list) {
4555
4853
  operation_count[thread.operation_type]++;
4556
4854
  }
@@ -4570,12 +4868,12 @@ TEST_P(DBTestWithParam, PreShutdownCompactionMiddle) {
4570
4868
  CancelAllBackgroundWork(db_);
4571
4869
  TEST_SYNC_POINT("DBTest::PreShutdownCompactionMiddle:Preshutdown");
4572
4870
  TEST_SYNC_POINT("DBTest::PreShutdownCompactionMiddle:VerifyPreshutdown");
4573
- dbfull()->TEST_WaitForCompact();
4871
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
4574
4872
  // Record the number of compactions at a time.
4575
4873
  for (int i = 0; i < ThreadStatus::NUM_OP_TYPES; ++i) {
4576
4874
  operation_count[i] = 0;
4577
4875
  }
4578
- Status s = env_->GetThreadList(&thread_list);
4876
+ ASSERT_OK(env_->GetThreadList(&thread_list));
4579
4877
  for (auto thread : thread_list) {
4580
4878
  operation_count[thread.operation_type]++;
4581
4879
  }
@@ -4635,8 +4933,8 @@ TEST_F(DBTest, DynamicLevelCompressionPerLevel) {
4635
4933
  for (int i = 0; i < 20; i++) {
4636
4934
  ASSERT_OK(Put(Key(keys[i]), CompressibleString(&rnd, 4000)));
4637
4935
  }
4638
- Flush();
4639
- dbfull()->TEST_WaitForCompact();
4936
+ ASSERT_OK(Flush());
4937
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
4640
4938
 
4641
4939
  ASSERT_EQ(NumTableFilesAtLevel(1), 0);
4642
4940
  ASSERT_EQ(NumTableFilesAtLevel(2), 0);
@@ -4648,10 +4946,11 @@ TEST_F(DBTest, DynamicLevelCompressionPerLevel) {
4648
4946
  for (int i = 21; i < 120; i++) {
4649
4947
  ASSERT_OK(Put(Key(keys[i]), CompressibleString(&rnd, 4000)));
4650
4948
  }
4651
- Flush();
4652
- dbfull()->TEST_WaitForCompact();
4949
+ ASSERT_OK(Flush());
4950
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
4653
4951
  ASSERT_EQ(NumTableFilesAtLevel(1), 0);
4654
4952
  ASSERT_EQ(NumTableFilesAtLevel(2), 0);
4953
+
4655
4954
  ASSERT_LT(SizeAtLevel(0) + SizeAtLevel(3) + SizeAtLevel(4),
4656
4955
  120U * 4000U + 50U * 24);
4657
4956
  // Make sure data in files in L3 is not compacted by removing all files
@@ -4698,7 +4997,7 @@ TEST_F(DBTest, DynamicLevelCompressionPerLevel2) {
4698
4997
  options.level0_stop_writes_trigger = 2;
4699
4998
  options.soft_pending_compaction_bytes_limit = 1024 * 1024;
4700
4999
  options.target_file_size_base = 20;
4701
-
5000
+ options.env = env_;
4702
5001
  options.level_compaction_dynamic_level_bytes = true;
4703
5002
  options.max_bytes_for_level_base = 200;
4704
5003
  options.max_bytes_for_level_multiplier = 8;
@@ -4737,14 +5036,14 @@ TEST_F(DBTest, DynamicLevelCompressionPerLevel2) {
4737
5036
  std::string value = rnd.RandomString(200);
4738
5037
  ASSERT_OK(Put(Key(keys[i]), value));
4739
5038
  if (i % 25 == 24) {
4740
- Flush();
4741
- dbfull()->TEST_WaitForCompact();
5039
+ ASSERT_OK(Flush());
5040
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
4742
5041
  }
4743
5042
  }
4744
5043
 
4745
- Flush();
4746
- dbfull()->TEST_WaitForFlushMemTable();
4747
- dbfull()->TEST_WaitForCompact();
5044
+ ASSERT_OK(Flush());
5045
+ ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
5046
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
4748
5047
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
4749
5048
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->ClearAllCallBacks();
4750
5049
 
@@ -4782,8 +5081,8 @@ TEST_F(DBTest, DynamicLevelCompressionPerLevel2) {
4782
5081
  std::string value = rnd.RandomString(200);
4783
5082
  ASSERT_OK(Put(Key(keys[i]), value));
4784
5083
  if (i % 100 == 99) {
4785
- Flush();
4786
- dbfull()->TEST_WaitForCompact();
5084
+ ASSERT_OK(Flush());
5085
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
4787
5086
  }
4788
5087
  }
4789
5088
 
@@ -4833,7 +5132,7 @@ TEST_F(DBTest, DynamicCompactionOptions) {
4833
5132
  for (int i = 0; i < size; i++) {
4834
5133
  ASSERT_OK(Put(Key(start + stride * i), rnd.RandomString(1024)));
4835
5134
  }
4836
- dbfull()->TEST_WaitForFlushMemTable();
5135
+ ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
4837
5136
  };
4838
5137
 
4839
5138
  // Write 3 files that have the same key range.
@@ -4844,7 +5143,7 @@ TEST_F(DBTest, DynamicCompactionOptions) {
4844
5143
  gen_l0_kb(0, 64, 1);
4845
5144
  ASSERT_EQ(NumTableFilesAtLevel(0), 2);
4846
5145
  gen_l0_kb(0, 64, 1);
4847
- dbfull()->TEST_WaitForCompact();
5146
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
4848
5147
  ASSERT_EQ("0,1", FilesPerLevel());
4849
5148
  std::vector<LiveFileMetaData> metadata;
4850
5149
  db_->GetLiveFilesMetaData(&metadata);
@@ -4863,7 +5162,7 @@ TEST_F(DBTest, DynamicCompactionOptions) {
4863
5162
  gen_l0_kb(0, 64, 1);
4864
5163
  ASSERT_EQ("1,1", FilesPerLevel());
4865
5164
  gen_l0_kb(0, 64, 1);
4866
- dbfull()->TEST_WaitForCompact();
5165
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
4867
5166
  ASSERT_EQ("0,2", FilesPerLevel());
4868
5167
  metadata.clear();
4869
5168
  db_->GetLiveFilesMetaData(&metadata);
@@ -4885,7 +5184,7 @@ TEST_F(DBTest, DynamicCompactionOptions) {
4885
5184
  for (int i = 0; i < 96; ++i) {
4886
5185
  gen_l0_kb(i, 64, 96);
4887
5186
  }
4888
- dbfull()->TEST_WaitForCompact();
5187
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
4889
5188
  ASSERT_GT(SizeAtLevel(1), k1MB / 2);
4890
5189
  ASSERT_LT(SizeAtLevel(1), k1MB + k1MB / 2);
4891
5190
 
@@ -4906,7 +5205,7 @@ TEST_F(DBTest, DynamicCompactionOptions) {
4906
5205
  for (int i = 0; i < 20; ++i) {
4907
5206
  gen_l0_kb(i, 64, 32);
4908
5207
  }
4909
- dbfull()->TEST_WaitForCompact();
5208
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
4910
5209
  uint64_t total_size = SizeAtLevel(1) + SizeAtLevel(2) + SizeAtLevel(3);
4911
5210
  ASSERT_TRUE(total_size < k128KB * 7 * 1.5);
4912
5211
 
@@ -4914,8 +5213,8 @@ TEST_F(DBTest, DynamicCompactionOptions) {
4914
5213
  // Clean up memtable and L0. Block compaction threads. If continue to write
4915
5214
  // and flush memtables. We should see put stop after 8 memtable flushes
4916
5215
  // since level0_stop_writes_trigger = 8
4917
- dbfull()->TEST_FlushMemTable(true, true);
4918
- dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr);
5216
+ ASSERT_OK(dbfull()->TEST_FlushMemTable(true, true));
5217
+ ASSERT_OK(dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr));
4919
5218
  // Block compaction
4920
5219
  test::SleepingBackgroundTask sleeping_task_low;
4921
5220
  env_->Schedule(&test::SleepingBackgroundTask::DoSleepTask, &sleeping_task_low,
@@ -4927,7 +5226,7 @@ TEST_F(DBTest, DynamicCompactionOptions) {
4927
5226
  WriteOptions wo;
4928
5227
  while (count < 64) {
4929
5228
  ASSERT_OK(Put(Key(count), rnd.RandomString(1024), wo));
4930
- dbfull()->TEST_FlushMemTable(true, true);
5229
+ ASSERT_OK(dbfull()->TEST_FlushMemTable(true, true));
4931
5230
  count++;
4932
5231
  if (dbfull()->TEST_write_controler().IsStopped()) {
4933
5232
  sleeping_task_low.WakeUp();
@@ -4943,8 +5242,8 @@ TEST_F(DBTest, DynamicCompactionOptions) {
4943
5242
  // Block compaction thread again. Perform the put and memtable flushes
4944
5243
  // until we see the stop after 6 memtable flushes.
4945
5244
  ASSERT_OK(dbfull()->SetOptions({{"level0_stop_writes_trigger", "6"}}));
4946
- dbfull()->TEST_FlushMemTable(true);
4947
- dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr);
5245
+ ASSERT_OK(dbfull()->TEST_FlushMemTable(true));
5246
+ ASSERT_OK(dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr));
4948
5247
  ASSERT_EQ(NumTableFilesAtLevel(0), 0);
4949
5248
 
4950
5249
  // Block compaction again
@@ -4955,7 +5254,7 @@ TEST_F(DBTest, DynamicCompactionOptions) {
4955
5254
  count = 0;
4956
5255
  while (count < 64) {
4957
5256
  ASSERT_OK(Put(Key(count), rnd.RandomString(1024), wo));
4958
- dbfull()->TEST_FlushMemTable(true, true);
5257
+ ASSERT_OK(dbfull()->TEST_FlushMemTable(true, true));
4959
5258
  count++;
4960
5259
  if (dbfull()->TEST_write_controler().IsStopped()) {
4961
5260
  sleeping_task_low.WakeUp();
@@ -4972,29 +5271,29 @@ TEST_F(DBTest, DynamicCompactionOptions) {
4972
5271
  // disabled, then TEST_WaitForCompact will be waiting for nothing. Number of
4973
5272
  // L0 files do not change after the call.
4974
5273
  ASSERT_OK(dbfull()->SetOptions({{"disable_auto_compactions", "true"}}));
4975
- dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr);
5274
+ ASSERT_OK(dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr));
4976
5275
  ASSERT_EQ(NumTableFilesAtLevel(0), 0);
4977
5276
 
4978
5277
  for (int i = 0; i < 4; ++i) {
4979
5278
  ASSERT_OK(Put(Key(i), rnd.RandomString(1024)));
4980
5279
  // Wait for compaction so that put won't stop
4981
- dbfull()->TEST_FlushMemTable(true);
5280
+ ASSERT_OK(dbfull()->TEST_FlushMemTable(true));
4982
5281
  }
4983
- dbfull()->TEST_WaitForCompact();
5282
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
4984
5283
  ASSERT_EQ(NumTableFilesAtLevel(0), 4);
4985
5284
 
4986
5285
  // Enable auto compaction and perform the same test, # of L0 files should be
4987
5286
  // reduced after compaction.
4988
5287
  ASSERT_OK(dbfull()->SetOptions({{"disable_auto_compactions", "false"}}));
4989
- dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr);
5288
+ ASSERT_OK(dbfull()->CompactRange(CompactRangeOptions(), nullptr, nullptr));
4990
5289
  ASSERT_EQ(NumTableFilesAtLevel(0), 0);
4991
5290
 
4992
5291
  for (int i = 0; i < 4; ++i) {
4993
5292
  ASSERT_OK(Put(Key(i), rnd.RandomString(1024)));
4994
5293
  // Wait for compaction so that put won't stop
4995
- dbfull()->TEST_FlushMemTable(true);
5294
+ ASSERT_OK(dbfull()->TEST_FlushMemTable(true));
4996
5295
  }
4997
- dbfull()->TEST_WaitForCompact();
5296
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
4998
5297
  ASSERT_LT(NumTableFilesAtLevel(0), 4);
4999
5298
  }
5000
5299
 
@@ -5180,8 +5479,8 @@ TEST_F(DBTest, FileCreationRandomFailure) {
5180
5479
  }
5181
5480
 
5182
5481
  // If rocksdb does not do the correct job, internal assert will fail here.
5183
- dbfull()->TEST_WaitForFlushMemTable();
5184
- dbfull()->TEST_WaitForCompact();
5482
+ ASSERT_TRUE(dbfull()->TEST_WaitForFlushMemTable().IsIOError());
5483
+ ASSERT_TRUE(dbfull()->TEST_WaitForCompact().IsIOError());
5185
5484
 
5186
5485
  // verify we have the latest successful update
5187
5486
  for (int k = 0; k < kTestSize; ++k) {
@@ -5235,14 +5534,14 @@ TEST_F(DBTest, DynamicMiscOptions) {
5235
5534
 
5236
5535
  ASSERT_OK(dbfull()->SetOptions({{"max_sequential_skip_in_iterations", "4"}}));
5237
5536
  // Clear memtable and make new option effective
5238
- dbfull()->TEST_FlushMemTable(true);
5537
+ ASSERT_OK(dbfull()->TEST_FlushMemTable(true));
5239
5538
  // Trigger reseek
5240
5539
  assert_reseek_count(200, 1);
5241
5540
 
5242
5541
  ASSERT_OK(
5243
5542
  dbfull()->SetOptions({{"max_sequential_skip_in_iterations", "16"}}));
5244
5543
  // Clear memtable and make new option effective
5245
- dbfull()->TEST_FlushMemTable(true);
5544
+ ASSERT_OK(dbfull()->TEST_FlushMemTable(true));
5246
5545
  // No reseek
5247
5546
  assert_reseek_count(300, 1);
5248
5547
 
@@ -5296,41 +5595,45 @@ TEST_F(DBTest, DynamicMiscOptions) {
5296
5595
  #endif // ROCKSDB_LITE
5297
5596
 
5298
5597
  TEST_F(DBTest, L0L1L2AndUpHitCounter) {
5598
+ const int kNumLevels = 3;
5599
+ const int kNumKeysPerLevel = 10000;
5600
+ const int kNumKeysPerDb = kNumLevels * kNumKeysPerLevel;
5601
+
5299
5602
  Options options = CurrentOptions();
5300
- options.write_buffer_size = 32 * 1024;
5301
- options.target_file_size_base = 32 * 1024;
5302
- options.level0_file_num_compaction_trigger = 2;
5303
- options.level0_slowdown_writes_trigger = 2;
5304
- options.level0_stop_writes_trigger = 4;
5305
- options.max_bytes_for_level_base = 64 * 1024;
5306
- options.max_write_buffer_number = 2;
5307
- options.max_background_compactions = 8;
5308
- options.max_background_flushes = 8;
5309
5603
  options.statistics = ROCKSDB_NAMESPACE::CreateDBStatistics();
5310
- CreateAndReopenWithCF({"mypikachu"}, options);
5604
+ Reopen(options);
5311
5605
 
5312
- int numkeys = 20000;
5313
- for (int i = 0; i < numkeys; i++) {
5314
- ASSERT_OK(Put(1, Key(i), "val"));
5606
+ // After the below loop there will be one file on each of L0, L1, and L2.
5607
+ int key = 0;
5608
+ for (int output_level = kNumLevels - 1; output_level >= 0; --output_level) {
5609
+ for (int i = 0; i < kNumKeysPerLevel; ++i) {
5610
+ ASSERT_OK(Put(Key(key), "val"));
5611
+ key++;
5612
+ }
5613
+ ASSERT_OK(Flush());
5614
+ for (int input_level = 0; input_level < output_level; ++input_level) {
5615
+ // `TEST_CompactRange(input_level, ...)` compacts from `input_level` to
5616
+ // `input_level + 1`.
5617
+ ASSERT_OK(dbfull()->TEST_CompactRange(input_level, nullptr, nullptr));
5618
+ }
5315
5619
  }
5620
+ assert(key == kNumKeysPerDb);
5621
+
5316
5622
  ASSERT_EQ(0, TestGetTickerCount(options, GET_HIT_L0));
5317
5623
  ASSERT_EQ(0, TestGetTickerCount(options, GET_HIT_L1));
5318
5624
  ASSERT_EQ(0, TestGetTickerCount(options, GET_HIT_L2_AND_UP));
5319
5625
 
5320
- ASSERT_OK(Flush(1));
5321
- dbfull()->TEST_WaitForCompact();
5322
-
5323
- for (int i = 0; i < numkeys; i++) {
5324
- ASSERT_EQ(Get(1, Key(i)), "val");
5626
+ for (int i = 0; i < kNumKeysPerDb; i++) {
5627
+ ASSERT_EQ(Get(Key(i)), "val");
5325
5628
  }
5326
5629
 
5327
- ASSERT_GT(TestGetTickerCount(options, GET_HIT_L0), 100);
5328
- ASSERT_GT(TestGetTickerCount(options, GET_HIT_L1), 100);
5329
- ASSERT_GT(TestGetTickerCount(options, GET_HIT_L2_AND_UP), 100);
5630
+ ASSERT_EQ(kNumKeysPerLevel, TestGetTickerCount(options, GET_HIT_L0));
5631
+ ASSERT_EQ(kNumKeysPerLevel, TestGetTickerCount(options, GET_HIT_L1));
5632
+ ASSERT_EQ(kNumKeysPerLevel, TestGetTickerCount(options, GET_HIT_L2_AND_UP));
5330
5633
 
5331
- ASSERT_EQ(numkeys, TestGetTickerCount(options, GET_HIT_L0) +
5332
- TestGetTickerCount(options, GET_HIT_L1) +
5333
- TestGetTickerCount(options, GET_HIT_L2_AND_UP));
5634
+ ASSERT_EQ(kNumKeysPerDb, TestGetTickerCount(options, GET_HIT_L0) +
5635
+ TestGetTickerCount(options, GET_HIT_L1) +
5636
+ TestGetTickerCount(options, GET_HIT_L2_AND_UP));
5334
5637
  }
5335
5638
 
5336
5639
  TEST_F(DBTest, EncodeDecompressedBlockSizeTest) {
@@ -5401,12 +5704,20 @@ TEST_F(DBTest, CloseSpeedup) {
5401
5704
  &sleeping_task_high, Env::Priority::HIGH);
5402
5705
 
5403
5706
  std::vector<std::string> filenames;
5404
- env_->GetChildren(dbname_, &filenames);
5707
+ ASSERT_OK(env_->GetChildren(dbname_, &filenames));
5708
+ // In Windows, LOCK file cannot be deleted because it is locked by db_test
5709
+ // After closing db_test, the LOCK file is unlocked and can be deleted
5405
5710
  // Delete archival files.
5711
+ bool deleteDir = true;
5406
5712
  for (size_t i = 0; i < filenames.size(); ++i) {
5407
- env_->DeleteFile(dbname_ + "/" + filenames[i]);
5713
+ Status s = env_->DeleteFile(dbname_ + "/" + filenames[i]);
5714
+ if (!s.ok()) {
5715
+ deleteDir = false;
5716
+ }
5717
+ }
5718
+ if (deleteDir) {
5719
+ ASSERT_OK(env_->DeleteDir(dbname_));
5408
5720
  }
5409
- env_->DeleteDir(dbname_);
5410
5721
  DestroyAndReopen(options);
5411
5722
 
5412
5723
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
@@ -5470,7 +5781,7 @@ TEST_F(DBTest, MergeTestTime) {
5470
5781
  // NOTE: Presumed unnecessary and removed: resetting mock time in env
5471
5782
 
5472
5783
  ASSERT_EQ(TestGetTickerCount(options, MERGE_OPERATION_TOTAL_TIME), 0);
5473
- db_->Put(WriteOptions(), "foo", one);
5784
+ ASSERT_OK(db_->Put(WriteOptions(), "foo", one));
5474
5785
  ASSERT_OK(Flush());
5475
5786
  ASSERT_OK(db_->Merge(WriteOptions(), "foo", two));
5476
5787
  ASSERT_OK(Flush());
@@ -5481,7 +5792,7 @@ TEST_F(DBTest, MergeTestTime) {
5481
5792
  opt.verify_checksums = true;
5482
5793
  opt.snapshot = nullptr;
5483
5794
  std::string result;
5484
- db_->Get(opt, "foo", &result);
5795
+ ASSERT_OK(db_->Get(opt, "foo", &result));
5485
5796
 
5486
5797
  ASSERT_EQ(2000000, TestGetTickerCount(options, MERGE_OPERATION_TOTAL_TIME));
5487
5798
 
@@ -5517,7 +5828,7 @@ TEST_P(DBTestWithParam, MergeCompactionTimeTest) {
5517
5828
  ASSERT_OK(db_->Merge(WriteOptions(), "foo", "TEST"));
5518
5829
  ASSERT_OK(Flush());
5519
5830
  }
5520
- dbfull()->TEST_WaitForFlushMemTable();
5831
+ ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
5521
5832
 
5522
5833
  CompactRangeOptions cro;
5523
5834
  cro.exclusive_manual_compaction = exclusive_manual_compaction_;
@@ -5543,10 +5854,10 @@ TEST_P(DBTestWithParam, FilterCompactionTimeTest) {
5543
5854
  // put some data
5544
5855
  for (int table = 0; table < 4; ++table) {
5545
5856
  for (int i = 0; i < 10 + table; ++i) {
5546
- Put(ToString(table * 100 + i), "val");
5857
+ ASSERT_OK(Put(ToString(table * 100 + i), "val"));
5547
5858
  ++n;
5548
5859
  }
5549
- Flush();
5860
+ ASSERT_OK(Flush());
5550
5861
  }
5551
5862
 
5552
5863
  CompactRangeOptions cro;
@@ -5558,6 +5869,7 @@ TEST_P(DBTestWithParam, FilterCompactionTimeTest) {
5558
5869
 
5559
5870
  Iterator* itr = db_->NewIterator(ReadOptions());
5560
5871
  itr->SeekToFirst();
5872
+ ASSERT_OK(itr->status());
5561
5873
  ASSERT_EQ(uint64_t{n} * 1000000U,
5562
5874
  TestGetTickerCount(options, FILTER_OPERATION_TOTAL_TIME));
5563
5875
  delete itr;
@@ -5572,7 +5884,7 @@ TEST_F(DBTest, TestLogCleanup) {
5572
5884
  Reopen(options);
5573
5885
 
5574
5886
  for (int i = 0; i < 100000; ++i) {
5575
- Put(Key(i), "val");
5887
+ ASSERT_OK(Put(Key(i), "val"));
5576
5888
  // only 2 memtables will be alive, so logs_to_free needs to always be below
5577
5889
  // 2
5578
5890
  ASSERT_LT(dbfull()->TEST_LogsToFreeSize(), static_cast<size_t>(3));
@@ -5613,8 +5925,8 @@ TEST_F(DBTest, DISABLED_SuggestCompactRangeTest) {
5613
5925
  };
5614
5926
 
5615
5927
  Options options = CurrentOptions();
5616
- options.memtable_factory.reset(
5617
- new SpecialSkipListFactory(DBTestBase::kNumKeysByGenerateNewRandomFile));
5928
+ options.memtable_factory.reset(test::NewSpecialSkipListFactory(
5929
+ DBTestBase::kNumKeysByGenerateNewRandomFile));
5618
5930
  options.compaction_style = kCompactionStyleLevel;
5619
5931
  options.compaction_filter_factory.reset(
5620
5932
  new CompactionFilterFactoryGetContext());
@@ -5670,7 +5982,7 @@ TEST_F(DBTest, DISABLED_SuggestCompactRangeTest) {
5670
5982
  // compact it three times
5671
5983
  for (int i = 0; i < 3; ++i) {
5672
5984
  ASSERT_OK(experimental::SuggestCompactRange(db_, nullptr, nullptr));
5673
- dbfull()->TEST_WaitForCompact();
5985
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
5674
5986
  }
5675
5987
 
5676
5988
  // All files are compacted
@@ -5683,7 +5995,7 @@ TEST_F(DBTest, DISABLED_SuggestCompactRangeTest) {
5683
5995
  // nonoverlapping with the file on level 0
5684
5996
  Slice start("a"), end("b");
5685
5997
  ASSERT_OK(experimental::SuggestCompactRange(db_, &start, &end));
5686
- dbfull()->TEST_WaitForCompact();
5998
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
5687
5999
 
5688
6000
  // should not compact the level 0 file
5689
6001
  ASSERT_EQ(1, NumTableFilesAtLevel(0));
@@ -5691,7 +6003,7 @@ TEST_F(DBTest, DISABLED_SuggestCompactRangeTest) {
5691
6003
  start = Slice("j");
5692
6004
  end = Slice("m");
5693
6005
  ASSERT_OK(experimental::SuggestCompactRange(db_, &start, &end));
5694
- dbfull()->TEST_WaitForCompact();
6006
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
5695
6007
  ASSERT_TRUE(CompactionFilterFactoryGetContext::IsManual(
5696
6008
  options.compaction_filter_factory.get()));
5697
6009
 
@@ -5779,7 +6091,7 @@ TEST_F(DBTest, CompactRangeWithEmptyBottomLevel) {
5779
6091
  Random rnd(301);
5780
6092
  for (int i = 0; i < kNumL0Files; ++i) {
5781
6093
  ASSERT_OK(Put(Key(0), rnd.RandomString(1024)));
5782
- Flush();
6094
+ ASSERT_OK(Flush());
5783
6095
  }
5784
6096
  ASSERT_EQ(NumTableFilesAtLevel(0), kNumL0Files);
5785
6097
  ASSERT_EQ(NumTableFilesAtLevel(1), 0);
@@ -5843,7 +6155,7 @@ TEST_F(DBTest, AutomaticConflictsWithManualCompaction) {
5843
6155
  }
5844
6156
  ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->DisableProcessing();
5845
6157
  manual_compaction_thread.join();
5846
- dbfull()->TEST_WaitForCompact();
6158
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
5847
6159
  }
5848
6160
 
5849
6161
  #ifndef ROCKSDB_LITE
@@ -5883,6 +6195,7 @@ TEST_F(DBTest, CompactFilesShouldTriggerAutoCompaction) {
5883
6195
  port::Thread manual_compaction_thread([&]() {
5884
6196
  auto s = db_->CompactFiles(CompactionOptions(),
5885
6197
  db_->DefaultColumnFamily(), input_files, 0);
6198
+ ASSERT_OK(s);
5886
6199
  });
5887
6200
 
5888
6201
  TEST_SYNC_POINT(
@@ -5901,7 +6214,7 @@ TEST_F(DBTest, CompactFilesShouldTriggerAutoCompaction) {
5901
6214
  "DBTest::CompactFilesShouldTriggerAutoCompaction:End");
5902
6215
 
5903
6216
  manual_compaction_thread.join();
5904
- dbfull()->TEST_WaitForCompact();
6217
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
5905
6218
 
5906
6219
  db_->GetColumnFamilyMetaData(db_->DefaultColumnFamily(), &cf_meta_data);
5907
6220
  ASSERT_LE(cf_meta_data.levels[0].files.size(),
@@ -5926,7 +6239,7 @@ TEST_F(DBTest, LargeBatchWithColumnFamilies) {
5926
6239
  for (;;) {
5927
6240
  std::string data(3000, j++ % 127 + 20);
5928
6241
  data += ToString(j);
5929
- batch.Put(handles_[0], Slice(data), Slice(data));
6242
+ ASSERT_OK(batch.Put(handles_[0], Slice(data), Slice(data)));
5930
6243
  if (batch.GetDataSize() > write_size) {
5931
6244
  break;
5932
6245
  }
@@ -6019,7 +6332,7 @@ TEST_F(DBTest, DelayedWriteRate) {
6019
6332
  options.level0_stop_writes_trigger = 999999;
6020
6333
  options.delayed_write_rate = 20000000; // Start with 200MB/s
6021
6334
  options.memtable_factory.reset(
6022
- new SpecialSkipListFactory(kEntriesPerMemTable));
6335
+ test::NewSpecialSkipListFactory(kEntriesPerMemTable));
6023
6336
 
6024
6337
  SetTimeElapseOnlySleepOnReopen(&options);
6025
6338
  CreateAndReopenWithCF({"pikachu"}, options);
@@ -6030,14 +6343,14 @@ TEST_F(DBTest, DelayedWriteRate) {
6030
6343
  Env::Priority::LOW);
6031
6344
 
6032
6345
  for (int i = 0; i < 3; i++) {
6033
- Put(Key(i), std::string(10000, 'x'));
6034
- Flush();
6346
+ ASSERT_OK(Put(Key(i), std::string(10000, 'x')));
6347
+ ASSERT_OK(Flush());
6035
6348
  }
6036
6349
 
6037
6350
  // These writes will be slowed down to 1KB/s
6038
6351
  uint64_t estimated_sleep_time = 0;
6039
6352
  Random rnd(301);
6040
- Put("", "");
6353
+ ASSERT_OK(Put("", ""));
6041
6354
  uint64_t cur_rate = options.delayed_write_rate;
6042
6355
  for (int i = 0; i < kTotalFlushes; i++) {
6043
6356
  uint64_t size_memtable = 0;
@@ -6046,14 +6359,14 @@ TEST_F(DBTest, DelayedWriteRate) {
6046
6359
  // Spread the size range to more.
6047
6360
  size_t entry_size = rand_num * rand_num * rand_num;
6048
6361
  WriteOptions wo;
6049
- Put(Key(i), std::string(entry_size, 'x'), wo);
6362
+ ASSERT_OK(Put(Key(i), std::string(entry_size, 'x'), wo));
6050
6363
  size_memtable += entry_size + 18;
6051
6364
  // Occasionally sleep a while
6052
6365
  if (rnd.Uniform(20) == 6) {
6053
6366
  env_->SleepForMicroseconds(2666);
6054
6367
  }
6055
6368
  }
6056
- dbfull()->TEST_WaitForFlushMemTable();
6369
+ ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
6057
6370
  estimated_sleep_time += size_memtable * 1000000u / cur_rate;
6058
6371
  // Slow down twice. One for memtable switch and one for flush finishes.
6059
6372
  cur_rate = static_cast<uint64_t>(static_cast<double>(cur_rate) *
@@ -6082,7 +6395,7 @@ TEST_F(DBTest, HardLimit) {
6082
6395
  options.max_bytes_for_level_base = 10000000000u;
6083
6396
  options.max_background_compactions = 1;
6084
6397
  options.memtable_factory.reset(
6085
- new SpecialSkipListFactory(KNumKeysByGenerateNewFile - 1));
6398
+ test::NewSpecialSkipListFactory(KNumKeysByGenerateNewFile - 1));
6086
6399
 
6087
6400
  env_->SetBackgroundThreads(1, Env::LOW);
6088
6401
  test::SleepingBackgroundTask sleeping_task_low;
@@ -6103,14 +6416,14 @@ TEST_F(DBTest, HardLimit) {
6103
6416
  int key_idx = 0;
6104
6417
  for (int num = 0; num < 5; num++) {
6105
6418
  GenerateNewFile(&rnd, &key_idx, true);
6106
- dbfull()->TEST_WaitForFlushMemTable();
6419
+ ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
6107
6420
  }
6108
6421
 
6109
6422
  ASSERT_EQ(0, callback_count.load());
6110
6423
 
6111
6424
  for (int num = 0; num < 5; num++) {
6112
6425
  GenerateNewFile(&rnd, &key_idx, true);
6113
- dbfull()->TEST_WaitForFlushMemTable();
6426
+ ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
6114
6427
  }
6115
6428
  ASSERT_GE(callback_count.load(), 1);
6116
6429
 
@@ -6192,25 +6505,25 @@ TEST_F(DBTest, SoftLimit) {
6192
6505
 
6193
6506
  // Generating 360KB in Level 3
6194
6507
  for (int i = 0; i < 72; i++) {
6195
- Put(Key(i), std::string(5000, 'x'));
6508
+ ASSERT_OK(Put(Key(i), std::string(5000, 'x')));
6196
6509
  if (i % 10 == 0) {
6197
- dbfull()->TEST_FlushMemTable(true, true);
6510
+ ASSERT_OK(dbfull()->TEST_FlushMemTable(true, true));
6198
6511
  }
6199
6512
  }
6200
- dbfull()->TEST_WaitForCompact();
6513
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
6201
6514
  MoveFilesToLevel(3);
6202
6515
 
6203
6516
  // Generating 360KB in Level 2
6204
6517
  for (int i = 0; i < 72; i++) {
6205
- Put(Key(i), std::string(5000, 'x'));
6518
+ ASSERT_OK(Put(Key(i), std::string(5000, 'x')));
6206
6519
  if (i % 10 == 0) {
6207
- dbfull()->TEST_FlushMemTable(true, true);
6520
+ ASSERT_OK(dbfull()->TEST_FlushMemTable(true, true));
6208
6521
  }
6209
6522
  }
6210
- dbfull()->TEST_WaitForCompact();
6523
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
6211
6524
  MoveFilesToLevel(2);
6212
6525
 
6213
- Put(Key(0), "");
6526
+ ASSERT_OK(Put(Key(0), ""));
6214
6527
 
6215
6528
  test::SleepingBackgroundTask sleeping_task_low;
6216
6529
  // Block compactions
@@ -6220,11 +6533,11 @@ TEST_F(DBTest, SoftLimit) {
6220
6533
 
6221
6534
  // Create 3 L0 files, making score of L0 to be 3.
6222
6535
  for (int i = 0; i < 3; i++) {
6223
- Put(Key(i), std::string(5000, 'x'));
6224
- Put(Key(100 - i), std::string(5000, 'x'));
6536
+ ASSERT_OK(Put(Key(i), std::string(5000, 'x')));
6537
+ ASSERT_OK(Put(Key(100 - i), std::string(5000, 'x')));
6225
6538
  // Flush the file. File size is around 30KB.
6226
6539
  InstallFlushCallback();
6227
- dbfull()->TEST_FlushMemTable(true, true);
6540
+ ASSERT_OK(dbfull()->TEST_FlushMemTable(true, true));
6228
6541
  WaitForFlush();
6229
6542
  }
6230
6543
  ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
@@ -6233,9 +6546,13 @@ TEST_F(DBTest, SoftLimit) {
6233
6546
  sleeping_task_low.WakeUp();
6234
6547
  sleeping_task_low.WaitUntilDone();
6235
6548
  sleeping_task_low.Reset();
6236
- dbfull()->TEST_WaitForCompact();
6549
+ ASSERT_OK(dbfull()->TEST_WaitForCompact());
6237
6550
 
6238
6551
  // Now there is one L1 file but doesn't trigger soft_rate_limit
6552
+ //
6553
+ // TODO: soft_rate_limit is depreciated. If this test
6554
+ // relies on soft_rate_limit, then we need to change the test.
6555
+ //
6239
6556
  // The L1 file size is around 30KB.
6240
6557
  ASSERT_EQ(NumTableFilesAtLevel(1), 1);
6241
6558
  ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay());
@@ -6255,11 +6572,11 @@ TEST_F(DBTest, SoftLimit) {
6255
6572
  sleeping_task_low.WaitUntilSleeping();
6256
6573
  // Create 3 L0 files, making score of L0 to be 3
6257
6574
  for (int i = 0; i < 3; i++) {
6258
- Put(Key(10 + i), std::string(5000, 'x'));
6259
- Put(Key(90 - i), std::string(5000, 'x'));
6575
+ ASSERT_OK(Put(Key(10 + i), std::string(5000, 'x')));
6576
+ ASSERT_OK(Put(Key(90 - i), std::string(5000, 'x')));
6260
6577
  // Flush the file. File size is around 30KB.
6261
6578
  InstallFlushCallback();
6262
- dbfull()->TEST_FlushMemTable(true, true);
6579
+ ASSERT_OK(dbfull()->TEST_FlushMemTable(true, true));
6263
6580
  WaitForFlush();
6264
6581
  }
6265
6582
 
@@ -6278,11 +6595,11 @@ TEST_F(DBTest, SoftLimit) {
6278
6595
 
6279
6596
  // Create 3 L0 files, making score of L0 to be 3, higher than L0.
6280
6597
  for (int i = 0; i < 3; i++) {
6281
- Put(Key(20 + i), std::string(5000, 'x'));
6282
- Put(Key(80 - i), std::string(5000, 'x'));
6598
+ ASSERT_OK(Put(Key(20 + i), std::string(5000, 'x')));
6599
+ ASSERT_OK(Put(Key(80 - i), std::string(5000, 'x')));
6283
6600
  // Flush the file. File size is around 30KB.
6284
6601
  InstallFlushCallback();
6285
- dbfull()->TEST_FlushMemTable(true, true);
6602
+ ASSERT_OK(dbfull()->TEST_FlushMemTable(true, true));
6286
6603
  WaitForFlush();
6287
6604
  }
6288
6605
  // Wake up sleep task to enable compaction to run and waits
@@ -6310,8 +6627,8 @@ TEST_F(DBTest, SoftLimit) {
6310
6627
  {"max_bytes_for_level_base", "5000"},
6311
6628
  }));
6312
6629
 
6313
- Put("", "");
6314
- Flush();
6630
+ ASSERT_OK(Put("", ""));
6631
+ ASSERT_OK(Flush());
6315
6632
  ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
6316
6633
  ASSERT_TRUE(listener->CheckCondition(WriteStallCondition::kDelayed));
6317
6634
 
@@ -6331,7 +6648,7 @@ TEST_F(DBTest, LastWriteBufferDelay) {
6331
6648
  options.disable_auto_compactions = true;
6332
6649
  int kNumKeysPerMemtable = 3;
6333
6650
  options.memtable_factory.reset(
6334
- new SpecialSkipListFactory(kNumKeysPerMemtable));
6651
+ test::NewSpecialSkipListFactory(kNumKeysPerMemtable));
6335
6652
 
6336
6653
  Reopen(options);
6337
6654
  test::SleepingBackgroundTask sleeping_task;
@@ -6344,12 +6661,12 @@ TEST_F(DBTest, LastWriteBufferDelay) {
6344
6661
  for (int i = 0; i < 3; i++) {
6345
6662
  // Fill one mem table
6346
6663
  for (int j = 0; j < kNumKeysPerMemtable; j++) {
6347
- Put(Key(j), "");
6664
+ ASSERT_OK(Put(Key(j), ""));
6348
6665
  }
6349
6666
  ASSERT_TRUE(!dbfull()->TEST_write_controler().NeedsDelay());
6350
6667
  }
6351
6668
  // Inserting a new entry would create a new mem table, triggering slow down.
6352
- Put(Key(0), "");
6669
+ ASSERT_OK(Put(Key(0), ""));
6353
6670
  ASSERT_TRUE(dbfull()->TEST_write_controler().NeedsDelay());
6354
6671
 
6355
6672
  sleeping_task.WakeUp();
@@ -6494,18 +6811,18 @@ TEST_F(DBTest, PauseBackgroundWorkTest) {
6494
6811
 
6495
6812
  std::vector<port::Thread> threads;
6496
6813
  std::atomic<bool> done(false);
6497
- db_->PauseBackgroundWork();
6814
+ ASSERT_OK(db_->PauseBackgroundWork());
6498
6815
  threads.emplace_back([&]() {
6499
6816
  Random rnd(301);
6500
6817
  for (int i = 0; i < 10000; ++i) {
6501
- Put(rnd.RandomString(10), rnd.RandomString(10));
6818
+ ASSERT_OK(Put(rnd.RandomString(10), rnd.RandomString(10)));
6502
6819
  }
6503
6820
  done.store(true);
6504
6821
  });
6505
6822
  env_->SleepForMicroseconds(200000);
6506
6823
  // make sure the thread is not done
6507
6824
  ASSERT_FALSE(done.load());
6508
- db_->ContinueBackgroundWork();
6825
+ ASSERT_OK(db_->ContinueBackgroundWork());
6509
6826
  for (auto& t : threads) {
6510
6827
  t.join();
6511
6828
  }
@@ -6540,6 +6857,7 @@ TEST_F(DBTest, ThreadLocalPtrDeadlock) {
6540
6857
  {
6541
6858
  port::Thread tmp_thread([&] {
6542
6859
  auto it = db_->NewIterator(ReadOptions());
6860
+ ASSERT_OK(it->status());
6543
6861
  delete it;
6544
6862
  });
6545
6863
  tmp_thread.join();
@@ -6631,7 +6949,7 @@ TEST_F(DBTest, CreationTimeOfOldestFile) {
6631
6949
  ASSERT_OK(
6632
6950
  Put(Key(i * kNumKeysPerFile + j), rnd.RandomString(kValueSize)));
6633
6951
  }
6634
- Flush();
6952
+ ASSERT_OK(Flush());
6635
6953
  }
6636
6954
 
6637
6955
  // At this point there should be 2 files, one with file_creation_time = 0 and
@@ -6656,7 +6974,7 @@ TEST_F(DBTest, CreationTimeOfOldestFile) {
6656
6974
  ASSERT_OK(
6657
6975
  Put(Key(i * kNumKeysPerFile + j), rnd.RandomString(kValueSize)));
6658
6976
  }
6659
- Flush();
6977
+ ASSERT_OK(Flush());
6660
6978
  }
6661
6979
 
6662
6980
  // At this point there should be 2 files with non-zero file creation time.
@@ -6683,20 +7001,19 @@ TEST_F(DBTest, MemoryUsageWithMaxWriteBufferSizeToMaintain) {
6683
7001
  Reopen(options);
6684
7002
  Random rnd(301);
6685
7003
  bool memory_limit_exceeded = false;
6686
- uint64_t size_all_mem_table = 0;
6687
- uint64_t cur_active_mem = 0;
7004
+
7005
+ ColumnFamilyData* cfd =
7006
+ static_cast<ColumnFamilyHandleImpl*>(db_->DefaultColumnFamily())->cfd();
7007
+
6688
7008
  for (int i = 0; i < 1000; i++) {
6689
7009
  std::string value = rnd.RandomString(1000);
6690
7010
  ASSERT_OK(Put("keykey_" + std::to_string(i), value));
6691
7011
 
6692
- dbfull()->TEST_WaitForFlushMemTable();
7012
+ ASSERT_OK(dbfull()->TEST_WaitForFlushMemTable());
6693
7013
 
6694
- ASSERT_TRUE(db_->GetIntProperty(db_->DefaultColumnFamily(),
6695
- DB::Properties::kSizeAllMemTables,
6696
- &size_all_mem_table));
6697
- ASSERT_TRUE(db_->GetIntProperty(db_->DefaultColumnFamily(),
6698
- DB::Properties::kCurSizeActiveMemTable,
6699
- &cur_active_mem));
7014
+ const uint64_t cur_active_mem = cfd->mem()->ApproximateMemoryUsage();
7015
+ const uint64_t size_all_mem_table =
7016
+ cur_active_mem + cfd->imm()->ApproximateMemoryUsage();
6700
7017
 
6701
7018
  // Errors out if memory usage keeps on increasing beyond the limit.
6702
7019
  // Once memory limit exceeds, memory_limit_exceeded is set and if
@@ -6706,8 +7023,9 @@ TEST_F(DBTest, MemoryUsageWithMaxWriteBufferSizeToMaintain) {
6706
7023
  if ((size_all_mem_table > cur_active_mem) &&
6707
7024
  (cur_active_mem >=
6708
7025
  static_cast<uint64_t>(options.max_write_buffer_size_to_maintain)) &&
6709
- (size_all_mem_table > options.max_write_buffer_size_to_maintain +
6710
- options.write_buffer_size)) {
7026
+ (size_all_mem_table >
7027
+ static_cast<uint64_t>(options.max_write_buffer_size_to_maintain) +
7028
+ options.write_buffer_size)) {
6711
7029
  ASSERT_FALSE(memory_limit_exceeded);
6712
7030
  memory_limit_exceeded = true;
6713
7031
  } else {
@@ -6720,14 +7038,6 @@ TEST_F(DBTest, MemoryUsageWithMaxWriteBufferSizeToMaintain) {
6720
7038
 
6721
7039
  } // namespace ROCKSDB_NAMESPACE
6722
7040
 
6723
- #ifdef ROCKSDB_UNITTESTS_WITH_CUSTOM_OBJECTS_FROM_STATIC_LIBS
6724
- extern "C" {
6725
- void RegisterCustomObjects(int argc, char** argv);
6726
- }
6727
- #else
6728
- void RegisterCustomObjects(int /*argc*/, char** /*argv*/) {}
6729
- #endif // !ROCKSDB_UNITTESTS_WITH_CUSTOM_OBJECTS_FROM_STATIC_LIBS
6730
-
6731
7041
  int main(int argc, char** argv) {
6732
7042
  ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
6733
7043
  ::testing::InitGoogleTest(&argc, argv);