@nxtedition/rocksdb 6.0.1 → 6.0.2

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 (310) hide show
  1. package/BUILDING.md +2 -2
  2. package/binding.cc +14 -17
  3. package/deps/rocksdb/build_version.cc +4 -10
  4. package/deps/rocksdb/rocksdb/CMakeLists.txt +17 -3
  5. package/deps/rocksdb/rocksdb/Makefile +57 -86
  6. package/deps/rocksdb/rocksdb/TARGETS +4 -0
  7. package/deps/rocksdb/rocksdb/cache/cache_test.cc +29 -17
  8. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +511 -0
  9. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +299 -0
  10. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +3 -0
  11. package/deps/rocksdb/rocksdb/cache/lru_cache.h +7 -0
  12. package/deps/rocksdb/rocksdb/common.mk +30 -0
  13. package/deps/rocksdb/rocksdb/crash_test.mk +3 -3
  14. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +1 -1
  15. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +3 -3
  16. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -7
  17. package/deps/rocksdb/rocksdb/db/builder.cc +11 -4
  18. package/deps/rocksdb/rocksdb/db/c.cc +45 -0
  19. package/deps/rocksdb/rocksdb/db/c_test.c +25 -2
  20. package/deps/rocksdb/rocksdb/db/column_family.cc +4 -3
  21. package/deps/rocksdb/rocksdb/db/column_family_test.cc +23 -22
  22. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +11 -11
  23. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +2 -2
  24. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +36 -10
  25. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +4 -1
  26. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +3 -2
  27. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +25 -10
  28. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +6 -0
  29. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +3 -3
  30. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +69 -14
  31. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +7 -7
  32. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +1 -1
  33. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +21 -21
  34. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +1 -1
  35. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +135 -32
  36. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +1 -1
  37. package/deps/rocksdb/rocksdb/db/convenience.cc +8 -6
  38. package/deps/rocksdb/rocksdb/db/corruption_test.cc +209 -38
  39. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +2 -2
  40. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +2 -2
  41. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +28 -25
  42. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +85 -138
  43. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +68 -3
  44. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +38 -13
  45. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +1 -1
  46. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1 -1
  47. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +9 -8
  48. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +1 -1
  49. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +5 -4
  50. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +5 -4
  51. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +2 -2
  52. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +9 -3
  53. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +6 -3
  54. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +26 -18
  55. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +8 -7
  56. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +8 -8
  57. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +6 -3
  58. package/deps/rocksdb/rocksdb/db/db_kv_checksum_test.cc +2 -2
  59. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +6 -6
  60. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +2 -2
  61. package/deps/rocksdb/rocksdb/db/db_options_test.cc +12 -12
  62. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +16 -15
  63. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +6 -4
  64. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +15 -14
  65. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +6 -6
  66. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +68 -7
  67. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +6 -5
  68. package/deps/rocksdb/rocksdb/db/db_test.cc +44 -42
  69. package/deps/rocksdb/rocksdb/db/db_test2.cc +23 -19
  70. package/deps/rocksdb/rocksdb/db/db_test_util.cc +95 -17
  71. package/deps/rocksdb/rocksdb/db/db_test_util.h +48 -0
  72. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +1 -1
  73. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +7 -7
  74. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +4 -4
  75. package/deps/rocksdb/rocksdb/db/db_write_test.cc +6 -6
  76. package/deps/rocksdb/rocksdb/db/dbformat.h +2 -1
  77. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +1 -1
  78. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +8 -8
  79. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +34 -12
  80. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +3 -0
  81. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +7 -7
  82. package/deps/rocksdb/rocksdb/db/file_indexer.h +1 -4
  83. package/deps/rocksdb/rocksdb/db/flush_job.cc +18 -4
  84. package/deps/rocksdb/rocksdb/db/flush_job.h +4 -0
  85. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +98 -30
  86. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +1 -1
  87. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +3 -0
  88. package/deps/rocksdb/rocksdb/db/internal_stats.cc +12 -12
  89. package/deps/rocksdb/rocksdb/db/listener_test.cc +4 -3
  90. package/deps/rocksdb/rocksdb/db/memtable.cc +2 -2
  91. package/deps/rocksdb/rocksdb/db/memtable_list.h +1 -1
  92. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +37 -25
  93. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +1 -1
  94. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +18 -18
  95. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +6 -6
  96. package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -1
  97. package/deps/rocksdb/rocksdb/db/repair.cc +1 -1
  98. package/deps/rocksdb/rocksdb/db/repair_test.cc +5 -5
  99. package/deps/rocksdb/rocksdb/db/snapshot_checker.h +1 -2
  100. package/deps/rocksdb/rocksdb/db/table_cache.cc +2 -4
  101. package/deps/rocksdb/rocksdb/db/version_builder.cc +1 -1
  102. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +3 -5
  103. package/deps/rocksdb/rocksdb/db/version_edit.cc +2 -2
  104. package/deps/rocksdb/rocksdb/db/version_set.cc +2 -2
  105. package/deps/rocksdb/rocksdb/db/version_set.h +3 -3
  106. package/deps/rocksdb/rocksdb/db/wal_edit.h +2 -1
  107. package/deps/rocksdb/rocksdb/db/wal_manager.cc +2 -3
  108. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +1 -1
  109. package/deps/rocksdb/rocksdb/db/write_batch.cc +178 -30
  110. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +6 -6
  111. package/deps/rocksdb/rocksdb/db/write_controller.h +1 -1
  112. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +0 -2
  113. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +7 -6
  114. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +2 -1
  115. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +4 -3
  116. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +31 -6
  117. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.cc +4 -1
  118. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.cc +0 -10
  119. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +45 -42
  120. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +359 -275
  121. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +53 -3
  122. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +0 -12
  123. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +13 -11
  124. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +276 -109
  125. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +63 -0
  126. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +45 -54
  127. package/deps/rocksdb/rocksdb/env/composite_env.cc +87 -14
  128. package/deps/rocksdb/rocksdb/env/env.cc +0 -60
  129. package/deps/rocksdb/rocksdb/env/env_encryption.cc +9 -0
  130. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +1 -1
  131. package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -5
  132. package/deps/rocksdb/rocksdb/env/env_test.cc +18 -5
  133. package/deps/rocksdb/rocksdb/env/fs_posix.cc +17 -12
  134. package/deps/rocksdb/rocksdb/env/io_posix.cc +39 -37
  135. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +9 -9
  136. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +1 -1
  137. package/deps/rocksdb/rocksdb/file/file_util.h +2 -0
  138. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +5 -2
  139. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +7 -0
  140. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +69 -45
  141. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +3 -1
  142. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +35 -0
  143. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +5 -5
  144. package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +59 -2
  145. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +1 -0
  146. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +2 -1
  147. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +46 -44
  148. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +1 -1
  149. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +2 -4
  150. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +3 -0
  151. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +28 -3
  152. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +91 -40
  153. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -2
  154. package/deps/rocksdb/rocksdb/include/rocksdb/unique_id.h +22 -13
  155. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +9 -0
  156. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +4 -0
  157. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +25 -0
  158. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +189 -103
  159. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +14 -0
  160. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  161. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +18 -4
  162. package/deps/rocksdb/rocksdb/memory/arena.h +1 -1
  163. package/deps/rocksdb/rocksdb/memory/concurrent_arena.cc +1 -5
  164. package/deps/rocksdb/rocksdb/memory/concurrent_arena.h +1 -5
  165. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +6 -8
  166. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +1 -1
  167. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +1 -1
  168. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +5 -3
  169. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +266 -45
  170. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +2 -1
  171. package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +1 -4
  172. package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +4 -4
  173. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +2 -8
  174. package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +2 -2
  175. package/deps/rocksdb/rocksdb/monitoring/perf_level.cc +1 -5
  176. package/deps/rocksdb/rocksdb/monitoring/perf_level_imp.h +1 -5
  177. package/deps/rocksdb/rocksdb/monitoring/persistent_stats_history.cc +2 -2
  178. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +2 -1
  179. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +1 -1
  180. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +3 -3
  181. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +2 -2
  182. package/deps/rocksdb/rocksdb/options/cf_options.cc +34 -38
  183. package/deps/rocksdb/rocksdb/options/configurable.cc +9 -27
  184. package/deps/rocksdb/rocksdb/options/configurable_test.cc +1 -1
  185. package/deps/rocksdb/rocksdb/options/customizable.cc +3 -1
  186. package/deps/rocksdb/rocksdb/options/customizable_test.cc +379 -318
  187. package/deps/rocksdb/rocksdb/options/db_options.cc +38 -17
  188. package/deps/rocksdb/rocksdb/options/db_options.h +1 -0
  189. package/deps/rocksdb/rocksdb/options/options_helper.cc +82 -39
  190. package/deps/rocksdb/rocksdb/options/options_parser.cc +10 -10
  191. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +6 -3
  192. package/deps/rocksdb/rocksdb/options/options_test.cc +115 -59
  193. package/deps/rocksdb/rocksdb/port/port_posix.h +0 -15
  194. package/deps/rocksdb/rocksdb/port/win/env_win.cc +5 -4
  195. package/deps/rocksdb/rocksdb/port/win/env_win.h +2 -2
  196. package/deps/rocksdb/rocksdb/port/win/port_win.h +0 -31
  197. package/deps/rocksdb/rocksdb/rocksdb.pc.in +11 -0
  198. package/deps/rocksdb/rocksdb/src.mk +2 -0
  199. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  200. package/deps/rocksdb/rocksdb/table/block_based/block.cc +4 -2
  201. package/deps/rocksdb/rocksdb/table/block_based/block.h +21 -25
  202. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +3 -4
  203. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +14 -4
  204. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +52 -15
  205. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +1 -1
  206. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +85 -41
  207. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +42 -72
  208. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +7 -5
  209. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +2 -1
  210. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +1 -1
  211. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +33 -17
  212. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +2 -1
  213. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +2 -2
  214. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -1
  215. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +2 -1
  216. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +2 -1
  217. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +6 -3
  218. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +4 -4
  219. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +5 -5
  220. package/deps/rocksdb/rocksdb/table/cleanable_test.cc +113 -0
  221. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +1 -1
  222. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +1 -1
  223. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +1 -1
  224. package/deps/rocksdb/rocksdb/table/format.cc +22 -20
  225. package/deps/rocksdb/rocksdb/table/iterator.cc +1 -81
  226. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +2 -2
  227. package/deps/rocksdb/rocksdb/table/multiget_context.h +14 -11
  228. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +0 -3
  229. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +12 -1
  230. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +4 -4
  231. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +1 -1
  232. package/deps/rocksdb/rocksdb/table/table_properties.cc +3 -5
  233. package/deps/rocksdb/rocksdb/table/table_test.cc +202 -78
  234. package/deps/rocksdb/rocksdb/table/unique_id.cc +57 -25
  235. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +34 -4
  236. package/deps/rocksdb/rocksdb/test_util/testutil.cc +1 -1
  237. package/deps/rocksdb/rocksdb/test_util/testutil.h +11 -8
  238. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +8 -4
  239. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.h +17 -0
  240. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +11 -9
  241. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +3 -3
  242. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +254 -98
  243. package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +4 -4
  244. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +186 -42
  245. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +75 -49
  246. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +9 -8
  247. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +4 -1
  248. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +2 -2
  249. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +17 -3
  250. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +1 -1
  251. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +1 -1
  252. package/deps/rocksdb/rocksdb/util/autovector_test.cc +4 -4
  253. package/deps/rocksdb/rocksdb/util/bloom_test.cc +14 -8
  254. package/deps/rocksdb/rocksdb/util/build_version.cc.in +5 -6
  255. package/deps/rocksdb/rocksdb/util/cleanable.cc +180 -0
  256. package/deps/rocksdb/rocksdb/util/comparator.cc +5 -3
  257. package/deps/rocksdb/rocksdb/util/compression.h +7 -7
  258. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +148 -0
  259. package/deps/rocksdb/rocksdb/util/filelock_test.cc +2 -2
  260. package/deps/rocksdb/rocksdb/util/filter_bench.cc +12 -4
  261. package/deps/rocksdb/rocksdb/util/heap.h +5 -3
  262. package/deps/rocksdb/rocksdb/util/random.cc +1 -5
  263. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +12 -9
  264. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +1 -1
  265. package/deps/rocksdb/rocksdb/util/ribbon_alg.h +1 -1
  266. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +2 -4
  267. package/deps/rocksdb/rocksdb/util/slice.cc +8 -9
  268. package/deps/rocksdb/rocksdb/util/string_util.cc +3 -2
  269. package/deps/rocksdb/rocksdb/util/string_util.h +0 -13
  270. package/deps/rocksdb/rocksdb/util/thread_local.cc +4 -23
  271. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +99 -22
  272. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_impl.h +7 -0
  273. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +102 -59
  274. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +38 -36
  275. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -2
  276. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +28 -0
  277. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +3 -0
  278. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -1
  279. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +71 -0
  280. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +71 -0
  281. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +1 -1
  282. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +5 -5
  283. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +3 -3
  284. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.cc +0 -13
  285. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +40 -0
  286. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.cc +10 -8
  287. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.h +4 -2
  288. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +17 -0
  289. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +7 -7
  290. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +8 -1
  291. package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +5 -1
  292. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +21 -15
  293. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +2 -2
  294. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +69 -11
  295. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +22 -9
  296. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +26 -5
  297. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +17 -4
  298. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +19 -16
  299. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +7 -3
  300. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +3 -2
  301. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +2 -2
  302. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +2 -2
  303. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +6 -6
  304. package/deps/rocksdb/rocksdb.gyp +8 -2
  305. package/package.json +1 -1
  306. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  307. package/prebuilds/linux-x64/node.napi.node +0 -0
  308. package/deps/rocksdb/rocksdb/python.mk +0 -9
  309. package/prebuilds/darwin-x64/node.napi.node +0 -0
  310. package/prebuilds/linux-arm64/node.napi.node +0 -0
@@ -111,6 +111,7 @@ class MultiOpsTxnsStressTest : public StressTest {
111
111
  public:
112
112
  class Record {
113
113
  public:
114
+ static constexpr uint32_t kMetadataPrefix = 0;
114
115
  static constexpr uint32_t kPrimaryIndexId = 1;
115
116
  static constexpr uint32_t kSecondaryIndexId = 2;
116
117
 
@@ -261,6 +262,13 @@ class MultiOpsTxnsStressTest : public StressTest {
261
262
  ThreadState* thread,
262
263
  const std::vector<int>& rand_column_families) override;
263
264
 
265
+ void RegisterAdditionalListeners() override;
266
+
267
+ #ifndef ROCKSDB_LITE
268
+ void PrepareTxnDbOptions(SharedState* /*shared*/,
269
+ TransactionDBOptions& txn_db_opts) override;
270
+ #endif // !ROCKSDB_LITE
271
+
264
272
  Status PrimaryKeyUpdateTxn(ThreadState* thread, uint32_t old_a,
265
273
  uint32_t old_a_pos, uint32_t new_a);
266
274
 
@@ -280,7 +288,17 @@ class MultiOpsTxnsStressTest : public StressTest {
280
288
  VerifyDb(thread);
281
289
  }
282
290
 
291
+ void VerifyPkSkFast(int job_id);
292
+
283
293
  protected:
294
+ class Counter {
295
+ public:
296
+ uint64_t Next() { return value_.fetch_add(1); }
297
+
298
+ private:
299
+ std::atomic<uint64_t> value_ = Env::Default()->NowNanos();
300
+ };
301
+
284
302
  using KeySet = std::set<uint32_t>;
285
303
  class KeyGenerator {
286
304
  public:
@@ -330,9 +348,21 @@ class MultiOpsTxnsStressTest : public StressTest {
330
348
 
331
349
  uint32_t GenerateNextC(ThreadState* thread);
332
350
 
351
+ #ifndef ROCKSDB_LITE
352
+ // Some applications, e.g. MyRocks writes a KV pair to the database via
353
+ // commit-time-write-batch (ctwb) in additional to the transaction's regular
354
+ // write batch. The key is usually constant representing some system
355
+ // metadata, while the value is monoticailly increasing which represents the
356
+ // actual value of the metadata. Method WriteToCommitTimeWriteBatch()
357
+ // emulates this scenario.
358
+ Status WriteToCommitTimeWriteBatch(Transaction& txn);
359
+ #endif //! ROCKSDB_LITE
360
+
333
361
  std::vector<std::unique_ptr<KeyGenerator>> key_gen_for_a_;
334
362
  std::vector<std::unique_ptr<KeyGenerator>> key_gen_for_c_;
335
363
 
364
+ Counter counter_{};
365
+
336
366
  private:
337
367
  struct KeySpaces {
338
368
  uint32_t lb_a = 0;
@@ -370,5 +400,38 @@ class InvariantChecker {
370
400
  "MultiOpsTxnsStressTest::Record::c_ must be 4 bytes");
371
401
  };
372
402
 
403
+ class MultiOpsTxnsStressListener : public EventListener {
404
+ public:
405
+ explicit MultiOpsTxnsStressListener(MultiOpsTxnsStressTest* stress_test)
406
+ : stress_test_(stress_test) {
407
+ assert(stress_test_);
408
+ }
409
+
410
+ #ifndef ROCKSDB_LITE
411
+ ~MultiOpsTxnsStressListener() override {}
412
+
413
+ void OnFlushCompleted(DB* db, const FlushJobInfo& info) override {
414
+ assert(db);
415
+ #ifdef NDEBUG
416
+ (void)db;
417
+ #endif
418
+ assert(info.cf_id == 0);
419
+ stress_test_->VerifyPkSkFast(info.job_id);
420
+ }
421
+
422
+ void OnCompactionCompleted(DB* db, const CompactionJobInfo& info) override {
423
+ assert(db);
424
+ #ifdef NDEBUG
425
+ (void)db;
426
+ #endif
427
+ assert(info.cf_id == 0);
428
+ stress_test_->VerifyPkSkFast(info.job_id);
429
+ }
430
+ #endif //! ROCKSDB_LITE
431
+
432
+ private:
433
+ MultiOpsTxnsStressTest* const stress_test_ = nullptr;
434
+ };
435
+
373
436
  } // namespace ROCKSDB_NAMESPACE
374
437
  #endif // GFLAGS
@@ -9,9 +9,8 @@
9
9
 
10
10
  #ifdef GFLAGS
11
11
  #include "db_stress_tool/db_stress_common.h"
12
- #ifndef NDEBUG
13
12
  #include "utilities/fault_injection_fs.h"
14
- #endif // NDEBUG
13
+ #include "rocksdb/utilities/transaction_db.h"
15
14
 
16
15
  namespace ROCKSDB_NAMESPACE {
17
16
  class NonBatchedOpsStressTest : public StressTest {
@@ -84,8 +83,8 @@ class NonBatchedOpsStressTest : public StressTest {
84
83
  // move to the next item in the iterator
85
84
  s = Status::NotFound();
86
85
  }
87
- VerifyValue(static_cast<int>(cf), i, options, shared, from_db, s,
88
- true);
86
+ VerifyOrSyncValue(static_cast<int>(cf), i, options, shared, from_db,
87
+ s, true);
89
88
  if (from_db.length()) {
90
89
  PrintKeyValue(static_cast<int>(cf), static_cast<uint32_t>(i),
91
90
  from_db.data(), from_db.length());
@@ -101,8 +100,8 @@ class NonBatchedOpsStressTest : public StressTest {
101
100
  std::string keystr = Key(i);
102
101
  Slice k = keystr;
103
102
  Status s = db_->Get(options, column_families_[cf], k, &from_db);
104
- VerifyValue(static_cast<int>(cf), i, options, shared, from_db, s,
105
- true);
103
+ VerifyOrSyncValue(static_cast<int>(cf), i, options, shared, from_db,
104
+ s, true);
106
105
  if (from_db.length()) {
107
106
  PrintKeyValue(static_cast<int>(cf), static_cast<uint32_t>(i),
108
107
  from_db.data(), from_db.length());
@@ -130,8 +129,8 @@ class NonBatchedOpsStressTest : public StressTest {
130
129
  for (size_t j = 0; j < batch_size; ++j) {
131
130
  Status s = statuses[j];
132
131
  std::string from_db = values[j].ToString();
133
- VerifyValue(static_cast<int>(cf), i + j, options, shared, from_db,
134
- s, true);
132
+ VerifyOrSyncValue(static_cast<int>(cf), i + j, options, shared,
133
+ from_db, s, true);
135
134
  if (from_db.length()) {
136
135
  PrintKeyValue(static_cast<int>(cf), static_cast<uint32_t>(i + j),
137
136
  from_db.data(), from_db.length());
@@ -174,8 +173,8 @@ class NonBatchedOpsStressTest : public StressTest {
174
173
  if (number_of_operands) {
175
174
  from_db = values[number_of_operands - 1].ToString();
176
175
  }
177
- VerifyValue(static_cast<int>(cf), i, options, shared, from_db, s,
178
- true);
176
+ VerifyOrSyncValue(static_cast<int>(cf), i, options, shared, from_db,
177
+ s, true);
179
178
  if (from_db.length()) {
180
179
  PrintKeyValue(static_cast<int>(cf), static_cast<uint32_t>(i),
181
180
  from_db.data(), from_db.length());
@@ -190,7 +189,8 @@ class NonBatchedOpsStressTest : public StressTest {
190
189
  if (thread->rand.OneInOpt(FLAGS_clear_column_family_one_in)) {
191
190
  // drop column family and then create it again (can't drop default)
192
191
  int cf = thread->rand.Next() % (FLAGS_column_families - 1) + 1;
193
- std::string new_name = ToString(new_column_family_name_.fetch_add(1));
192
+ std::string new_name =
193
+ std::to_string(new_column_family_name_.fetch_add(1));
194
194
  {
195
195
  MutexLock l(thread->shared->GetMutex());
196
196
  fprintf(
@@ -233,20 +233,15 @@ class NonBatchedOpsStressTest : public StressTest {
233
233
  std::string from_db;
234
234
  int error_count = 0;
235
235
 
236
- #ifndef NDEBUG
237
236
  if (fault_fs_guard) {
238
237
  fault_fs_guard->EnableErrorInjection();
239
238
  SharedState::ignore_read_error = false;
240
239
  }
241
- #endif // NDEBUG
242
240
  Status s = db_->Get(read_opts, cfh, key, &from_db);
243
- #ifndef NDEBUG
244
241
  if (fault_fs_guard) {
245
242
  error_count = fault_fs_guard->GetAndResetErrorCount();
246
243
  }
247
- #endif // NDEBUG
248
244
  if (s.ok()) {
249
- #ifndef NDEBUG
250
245
  if (fault_fs_guard) {
251
246
  if (error_count && !SharedState::ignore_read_error) {
252
247
  // Grab mutex so multiple thread don't try to print the
@@ -258,7 +253,6 @@ class NonBatchedOpsStressTest : public StressTest {
258
253
  std::terminate();
259
254
  }
260
255
  }
261
- #endif // NDEBUG
262
256
  // found case
263
257
  thread->stats.AddGets(1, 1);
264
258
  } else if (s.IsNotFound()) {
@@ -272,11 +266,9 @@ class NonBatchedOpsStressTest : public StressTest {
272
266
  thread->stats.AddVerifiedErrors(1);
273
267
  }
274
268
  }
275
- #ifndef NDEBUG
276
269
  if (fault_fs_guard) {
277
270
  fault_fs_guard->DisableErrorInjection();
278
271
  }
279
- #endif // NDEBUG
280
272
  return s;
281
273
  }
282
274
 
@@ -364,19 +356,15 @@ class NonBatchedOpsStressTest : public StressTest {
364
356
  }
365
357
 
366
358
  if (!use_txn) {
367
- #ifndef NDEBUG
368
359
  if (fault_fs_guard) {
369
360
  fault_fs_guard->EnableErrorInjection();
370
361
  SharedState::ignore_read_error = false;
371
362
  }
372
- #endif // NDEBUG
373
363
  db_->MultiGet(readoptionscopy, cfh, num_keys, keys.data(), values.data(),
374
364
  statuses.data());
375
- #ifndef NDEBUG
376
365
  if (fault_fs_guard) {
377
366
  error_count = fault_fs_guard->GetAndResetErrorCount();
378
367
  }
379
- #endif // NDEBUG
380
368
  } else {
381
369
  #ifndef ROCKSDB_LITE
382
370
  txn->MultiGet(readoptionscopy, cfh, num_keys, keys.data(), values.data(),
@@ -384,7 +372,6 @@ class NonBatchedOpsStressTest : public StressTest {
384
372
  #endif
385
373
  }
386
374
 
387
- #ifndef NDEBUG
388
375
  if (fault_fs_guard && error_count && !SharedState::ignore_read_error) {
389
376
  int stat_nok = 0;
390
377
  for (const auto& s : statuses) {
@@ -408,7 +395,6 @@ class NonBatchedOpsStressTest : public StressTest {
408
395
  if (fault_fs_guard) {
409
396
  fault_fs_guard->DisableErrorInjection();
410
397
  }
411
- #endif // NDEBUG
412
398
 
413
399
  for (size_t i = 0; i < statuses.size(); ++i) {
414
400
  Status s = statuses[i];
@@ -562,8 +548,8 @@ class NonBatchedOpsStressTest : public StressTest {
562
548
  Slice k = key_str2;
563
549
  std::string from_db;
564
550
  Status s = db_->Get(read_opts, cfh, k, &from_db);
565
- if (!VerifyValue(rand_column_family, rand_key, read_opts, shared, from_db,
566
- s, true)) {
551
+ if (!VerifyOrSyncValue(rand_column_family, rand_key, read_opts, shared,
552
+ from_db, s, true)) {
567
553
  return s;
568
554
  }
569
555
  }
@@ -631,33 +617,14 @@ class NonBatchedOpsStressTest : public StressTest {
631
617
  Status TestDelete(ThreadState* thread, WriteOptions& write_opts,
632
618
  const std::vector<int>& rand_column_families,
633
619
  const std::vector<int64_t>& rand_keys,
634
- std::unique_ptr<MutexLock>& lock) override {
620
+ std::unique_ptr<MutexLock>& /* lock */) override {
635
621
  int64_t rand_key = rand_keys[0];
636
622
  int rand_column_family = rand_column_families[0];
637
623
  auto shared = thread->shared;
638
- int64_t max_key = shared->GetMaxKey();
639
624
 
640
625
  // OPERATION delete
641
- // If the chosen key does not allow overwrite and it does not exist,
642
- // choose another key.
643
- std::string write_ts_str;
644
- Slice write_ts;
645
- while (!shared->AllowsOverwrite(rand_key) &&
646
- !shared->Exists(rand_column_family, rand_key)) {
647
- lock.reset();
648
- rand_key = thread->rand.Next() % max_key;
649
- rand_column_family = thread->rand.Next() % FLAGS_column_families;
650
- lock.reset(
651
- new MutexLock(shared->GetMutexForKey(rand_column_family, rand_key)));
652
- if (FLAGS_user_timestamp_size > 0) {
653
- write_ts_str = NowNanosStr();
654
- write_ts = write_ts_str;
655
- }
656
- }
657
- if (write_ts.size() == 0 && FLAGS_user_timestamp_size) {
658
- write_ts_str = NowNanosStr();
659
- write_ts = write_ts_str;
660
- }
626
+ std::string write_ts_str = NowNanosStr();
627
+ Slice write_ts = write_ts_str;
661
628
 
662
629
  std::string key_str = Key(rand_key);
663
630
  Slice key = key_str;
@@ -823,7 +790,7 @@ class NonBatchedOpsStressTest : public StressTest {
823
790
  const std::vector<int64_t>& rand_keys,
824
791
  std::unique_ptr<MutexLock>& lock) override {
825
792
  const std::string sst_filename =
826
- FLAGS_db + "/." + ToString(thread->tid) + ".sst";
793
+ FLAGS_db + "/." + std::to_string(thread->tid) + ".sst";
827
794
  Status s;
828
795
  if (db_stress_env->FileExists(sst_filename).ok()) {
829
796
  // Maybe we terminated abnormally before, so cleanup to give this file
@@ -882,16 +849,24 @@ class NonBatchedOpsStressTest : public StressTest {
882
849
  }
883
850
  #endif // ROCKSDB_LITE
884
851
 
885
- bool VerifyValue(int cf, int64_t key, const ReadOptions& /*opts*/,
886
- SharedState* shared, const std::string& value_from_db,
887
- const Status& s, bool strict = false) const {
852
+ bool VerifyOrSyncValue(int cf, int64_t key, const ReadOptions& /*opts*/,
853
+ SharedState* shared, const std::string& value_from_db,
854
+ const Status& s, bool strict = false) const {
888
855
  if (shared->HasVerificationFailedYet()) {
889
856
  return false;
890
857
  }
891
858
  // compare value_from_db with the value in the shared state
892
- char value[kValueMaxLen];
893
859
  uint32_t value_base = shared->Get(cf, key);
894
860
  if (value_base == SharedState::UNKNOWN_SENTINEL) {
861
+ if (s.ok()) {
862
+ // Value exists in db, update state to reflect that
863
+ Slice slice(value_from_db);
864
+ value_base = GetValueBase(slice);
865
+ shared->Put(cf, key, value_base, false);
866
+ } else if (s.IsNotFound()) {
867
+ // Value doesn't exist in db, update state to reflect that
868
+ shared->SingleDelete(cf, key, false);
869
+ }
895
870
  return true;
896
871
  }
897
872
  if (value_base == SharedState::DELETION_SENTINEL && !strict) {
@@ -899,6 +874,7 @@ class NonBatchedOpsStressTest : public StressTest {
899
874
  }
900
875
 
901
876
  if (s.ok()) {
877
+ char value[kValueMaxLen];
902
878
  if (value_base == SharedState::DELETION_SENTINEL) {
903
879
  VerificationAbort(shared, "Unexpected value found", cf, key);
904
880
  return false;
@@ -921,6 +897,21 @@ class NonBatchedOpsStressTest : public StressTest {
921
897
  }
922
898
  return true;
923
899
  }
900
+
901
+ #ifndef ROCKSDB_LITE
902
+ void PrepareTxnDbOptions(SharedState* shared,
903
+ TransactionDBOptions& txn_db_opts) override {
904
+ txn_db_opts.rollback_deletion_type_callback =
905
+ [shared](TransactionDB*, ColumnFamilyHandle*, const Slice& key) {
906
+ assert(shared);
907
+ uint64_t key_num = 0;
908
+ bool ok = GetIntVal(key.ToString(), &key_num);
909
+ assert(ok);
910
+ (void)ok;
911
+ return !shared->AllowsOverwrite(key_num);
912
+ };
913
+ }
914
+ #endif // ROCKSDB_LITE
924
915
  };
925
916
 
926
917
  StressTest* CreateNonBatchedOpsStressTest() {
@@ -5,6 +5,7 @@
5
5
  //
6
6
  #include "env/composite_env_wrapper.h"
7
7
  #include "rocksdb/utilities/options_type.h"
8
+ #include "util/string_util.h"
8
9
 
9
10
  namespace ROCKSDB_NAMESPACE {
10
11
  namespace {
@@ -382,19 +383,49 @@ Status CompositeEnv::NewDirectory(const std::string& name,
382
383
  }
383
384
 
384
385
  namespace {
385
- static std::unordered_map<std::string, OptionTypeInfo>
386
- composite_env_wrapper_type_info = {
386
+ static std::unordered_map<std::string, OptionTypeInfo> env_wrapper_type_info = {
387
387
  #ifndef ROCKSDB_LITE
388
- {"target",
389
- {0, OptionType::kCustomizable, OptionVerificationType::kByName,
390
- OptionTypeFlags::kDontSerialize | OptionTypeFlags::kRawPointer,
391
- [](const ConfigOptions& opts, const std::string& /*name*/,
392
- const std::string& value, void* addr) {
393
- auto target = static_cast<EnvWrapper::Target*>(addr);
394
- return Env::CreateFromString(opts, value, &(target->env),
395
- &(target->guard));
396
- },
397
- nullptr, nullptr}},
388
+ {"target",
389
+ OptionTypeInfo(0, OptionType::kUnknown, OptionVerificationType::kByName,
390
+ OptionTypeFlags::kDontSerialize)
391
+ .SetParseFunc([](const ConfigOptions& opts,
392
+ const std::string& /*name*/, const std::string& value,
393
+ void* addr) {
394
+ auto target = static_cast<EnvWrapper::Target*>(addr);
395
+ return Env::CreateFromString(opts, value, &(target->env),
396
+ &(target->guard));
397
+ })
398
+ .SetEqualsFunc([](const ConfigOptions& opts,
399
+ const std::string& /*name*/, const void* addr1,
400
+ const void* addr2, std::string* mismatch) {
401
+ const auto target1 = static_cast<const EnvWrapper::Target*>(addr1);
402
+ const auto target2 = static_cast<const EnvWrapper::Target*>(addr2);
403
+ if (target1->env != nullptr) {
404
+ return target1->env->AreEquivalent(opts, target2->env, mismatch);
405
+ } else {
406
+ return (target2->env == nullptr);
407
+ }
408
+ })
409
+ .SetPrepareFunc([](const ConfigOptions& opts,
410
+ const std::string& /*name*/, void* addr) {
411
+ auto target = static_cast<EnvWrapper::Target*>(addr);
412
+ if (target->guard.get() != nullptr) {
413
+ target->env = target->guard.get();
414
+ } else if (target->env == nullptr) {
415
+ target->env = Env::Default();
416
+ }
417
+ return target->env->PrepareOptions(opts);
418
+ })
419
+ .SetValidateFunc([](const DBOptions& db_opts,
420
+ const ColumnFamilyOptions& cf_opts,
421
+ const std::string& /*name*/, const void* addr) {
422
+ const auto target = static_cast<const EnvWrapper::Target*>(addr);
423
+ if (target->env == nullptr) {
424
+ return Status::InvalidArgument("Target Env not specified");
425
+ } else {
426
+ return target->env->ValidateOptions(db_opts, cf_opts);
427
+ }
428
+ })},
398
429
  #endif // ROCKSDB_LITE
399
430
  };
400
431
  static std::unordered_map<std::string, OptionTypeInfo>
@@ -425,7 +456,7 @@ CompositeEnvWrapper::CompositeEnvWrapper(Env* env,
425
456
  const std::shared_ptr<FileSystem>& fs,
426
457
  const std::shared_ptr<SystemClock>& sc)
427
458
  : CompositeEnv(fs, sc), target_(env) {
428
- RegisterOptions("", &target_, &composite_env_wrapper_type_info);
459
+ RegisterOptions("", &target_, &env_wrapper_type_info);
429
460
  RegisterOptions("", &file_system_, &composite_fs_wrapper_type_info);
430
461
  RegisterOptions("", &system_clock_, &composite_clock_wrapper_type_info);
431
462
  }
@@ -434,7 +465,7 @@ CompositeEnvWrapper::CompositeEnvWrapper(const std::shared_ptr<Env>& env,
434
465
  const std::shared_ptr<FileSystem>& fs,
435
466
  const std::shared_ptr<SystemClock>& sc)
436
467
  : CompositeEnv(fs, sc), target_(env) {
437
- RegisterOptions("", &target_, &composite_env_wrapper_type_info);
468
+ RegisterOptions("", &target_, &env_wrapper_type_info);
438
469
  RegisterOptions("", &file_system_, &composite_fs_wrapper_type_info);
439
470
  RegisterOptions("", &system_clock_, &composite_clock_wrapper_type_info);
440
471
  }
@@ -461,4 +492,46 @@ std::string CompositeEnvWrapper::SerializeOptions(
461
492
  return options;
462
493
  }
463
494
  #endif // ROCKSDB_LITE
495
+
496
+ EnvWrapper::EnvWrapper(Env* t) : target_(t) {
497
+ RegisterOptions("", &target_, &env_wrapper_type_info);
498
+ }
499
+
500
+ EnvWrapper::EnvWrapper(std::unique_ptr<Env>&& t) : target_(std::move(t)) {
501
+ RegisterOptions("", &target_, &env_wrapper_type_info);
502
+ }
503
+
504
+ EnvWrapper::EnvWrapper(const std::shared_ptr<Env>& t) : target_(t) {
505
+ RegisterOptions("", &target_, &env_wrapper_type_info);
506
+ }
507
+
508
+ EnvWrapper::~EnvWrapper() {}
509
+
510
+ Status EnvWrapper::PrepareOptions(const ConfigOptions& options) {
511
+ target_.Prepare();
512
+ return Env::PrepareOptions(options);
513
+ }
514
+
515
+ #ifndef ROCKSDB_LITE
516
+ std::string EnvWrapper::SerializeOptions(const ConfigOptions& config_options,
517
+ const std::string& header) const {
518
+ auto parent = Env::SerializeOptions(config_options, "");
519
+ if (config_options.IsShallow() || target_.env == nullptr ||
520
+ target_.env == Env::Default()) {
521
+ return parent;
522
+ } else {
523
+ std::string result = header;
524
+ if (!StartsWith(parent, OptionTypeInfo::kIdPropName())) {
525
+ result.append(OptionTypeInfo::kIdPropName()).append("=");
526
+ }
527
+ result.append(parent);
528
+ if (!EndsWith(result, config_options.delimiter)) {
529
+ result.append(config_options.delimiter);
530
+ }
531
+ result.append("target=").append(target_.env->ToString(config_options));
532
+ return result;
533
+ }
534
+ }
535
+ #endif // ROCKSDB_LITE
536
+
464
537
  } // namespace ROCKSDB_NAMESPACE
@@ -26,7 +26,6 @@
26
26
  #include "rocksdb/utilities/object_registry.h"
27
27
  #include "rocksdb/utilities/options_type.h"
28
28
  #include "util/autovector.h"
29
- #include "util/string_util.h"
30
29
 
31
30
  namespace ROCKSDB_NAMESPACE {
32
31
  namespace {
@@ -1084,65 +1083,6 @@ Status ReadFileToString(Env* env, const std::string& fname, std::string* data) {
1084
1083
  return ReadFileToString(fs.get(), fname, data);
1085
1084
  }
1086
1085
 
1087
- namespace {
1088
- static std::unordered_map<std::string, OptionTypeInfo> env_wrapper_type_info = {
1089
- #ifndef ROCKSDB_LITE
1090
- {"target",
1091
- {0, OptionType::kCustomizable, OptionVerificationType::kByName,
1092
- OptionTypeFlags::kDontSerialize | OptionTypeFlags::kRawPointer,
1093
- [](const ConfigOptions& opts, const std::string& /*name*/,
1094
- const std::string& value, void* addr) {
1095
- EnvWrapper::Target* target = static_cast<EnvWrapper::Target*>(addr);
1096
- return Env::CreateFromString(opts, value, &(target->env),
1097
- &(target->guard));
1098
- },
1099
- nullptr, nullptr}},
1100
- #endif // ROCKSDB_LITE
1101
- };
1102
- } // namespace
1103
-
1104
- EnvWrapper::EnvWrapper(Env* t) : target_(t) {
1105
- RegisterOptions("", &target_, &env_wrapper_type_info);
1106
- }
1107
-
1108
- EnvWrapper::EnvWrapper(std::unique_ptr<Env>&& t) : target_(std::move(t)) {
1109
- RegisterOptions("", &target_, &env_wrapper_type_info);
1110
- }
1111
-
1112
- EnvWrapper::EnvWrapper(const std::shared_ptr<Env>& t) : target_(t) {
1113
- RegisterOptions("", &target_, &env_wrapper_type_info);
1114
- }
1115
-
1116
- EnvWrapper::~EnvWrapper() {
1117
- }
1118
-
1119
- Status EnvWrapper::PrepareOptions(const ConfigOptions& options) {
1120
- target_.Prepare();
1121
- return Env::PrepareOptions(options);
1122
- }
1123
-
1124
- #ifndef ROCKSDB_LITE
1125
- std::string EnvWrapper::SerializeOptions(const ConfigOptions& config_options,
1126
- const std::string& header) const {
1127
- auto parent = Env::SerializeOptions(config_options, "");
1128
- if (config_options.IsShallow() || target_.env == nullptr ||
1129
- target_.env == Env::Default()) {
1130
- return parent;
1131
- } else {
1132
- std::string result = header;
1133
- if (!StartsWith(parent, OptionTypeInfo::kIdPropName())) {
1134
- result.append(OptionTypeInfo::kIdPropName()).append("=");
1135
- }
1136
- result.append(parent);
1137
- if (!EndsWith(result, config_options.delimiter)) {
1138
- result.append(config_options.delimiter);
1139
- }
1140
- result.append("target=").append(target_.env->ToString(config_options));
1141
- return result;
1142
- }
1143
- }
1144
- #endif // ROCKSDB_LITE
1145
-
1146
1086
  namespace { // anonymous namespace
1147
1087
 
1148
1088
  void AssignEnvOptions(EnvOptions* env_options, const DBOptions& options) {
@@ -1139,6 +1139,15 @@ CTREncryptionProvider::CTREncryptionProvider(
1139
1139
  RegisterOptions("Cipher", &cipher_, &ctr_encryption_provider_type_info);
1140
1140
  }
1141
1141
 
1142
+ bool CTREncryptionProvider::IsInstanceOf(const std::string& name) const {
1143
+ // Special case for test purposes.
1144
+ if (name == "1://test" && cipher_ != nullptr) {
1145
+ return cipher_->IsInstanceOf(ROT13BlockCipher::kClassName());
1146
+ } else {
1147
+ return EncryptionProvider::IsInstanceOf(name);
1148
+ }
1149
+ }
1150
+
1142
1151
  // GetPrefixLength returns the length of the prefix that is added to every file
1143
1152
  // and used for storing encryption options.
1144
1153
  // For optimal performance, the prefix length should be a multiple of
@@ -66,7 +66,7 @@ class CTREncryptionProvider : public EncryptionProvider {
66
66
 
67
67
  static const char* kClassName() { return "CTR"; }
68
68
  const char* Name() const override { return kClassName(); }
69
-
69
+ bool IsInstanceOf(const std::string& name) const override;
70
70
  // GetPrefixLength returns the length of the prefix that is added to every
71
71
  // file
72
72
  // and used for storing encryption options.
@@ -130,8 +130,8 @@ class PosixDynamicLibrary : public DynamicLibrary {
130
130
  class PosixClock : public SystemClock {
131
131
  public:
132
132
  static const char* kClassName() { return "PosixClock"; }
133
- const char* Name() const override { return kClassName(); }
134
- const char* NickName() const override { return kDefaultName(); }
133
+ const char* Name() const override { return kDefaultName(); }
134
+ const char* NickName() const override { return kClassName(); }
135
135
 
136
136
  uint64_t NowMicros() override {
137
137
  struct timeval tv;
@@ -488,6 +488,7 @@ Env* Env::Default() {
488
488
  CompressionContextCache::InitSingleton();
489
489
  INIT_SYNC_POINT_SINGLETONS();
490
490
  // ~PosixEnv must be called on exit
491
+ //**TODO: Can we make this a STATIC_AVOID_DESTRUCTION?
491
492
  static PosixEnv default_env;
492
493
  return &default_env;
493
494
  }
@@ -496,9 +497,9 @@ Env* Env::Default() {
496
497
  // Default Posix SystemClock
497
498
  //
498
499
  const std::shared_ptr<SystemClock>& SystemClock::Default() {
499
- static std::shared_ptr<SystemClock> default_clock =
500
- std::make_shared<PosixClock>();
501
- return default_clock;
500
+ STATIC_AVOID_DESTRUCTION(std::shared_ptr<SystemClock>, instance)
501
+ (std::make_shared<PosixClock>());
502
+ return instance;
502
503
  }
503
504
  } // namespace ROCKSDB_NAMESPACE
504
505