@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
@@ -14,16 +14,39 @@
14
14
  #include <cstring>
15
15
  #include <unordered_map>
16
16
 
17
- #include "options/configurable_helper.h"
18
- #include "options/customizable_helper.h"
17
+ #include "db/db_test_util.h"
19
18
  #include "options/options_helper.h"
20
19
  #include "options/options_parser.h"
20
+ #include "port/stack_trace.h"
21
21
  #include "rocksdb/convenience.h"
22
+ #include "rocksdb/env_encryption.h"
23
+ #include "rocksdb/file_checksum.h"
24
+ #include "rocksdb/filter_policy.h"
25
+ #include "rocksdb/flush_block_policy.h"
26
+ #include "rocksdb/memory_allocator.h"
27
+ #include "rocksdb/rate_limiter.h"
28
+ #include "rocksdb/secondary_cache.h"
29
+ #include "rocksdb/slice_transform.h"
30
+ #include "rocksdb/sst_partitioner.h"
31
+ #include "rocksdb/statistics.h"
32
+ #include "rocksdb/utilities/customizable_util.h"
22
33
  #include "rocksdb/utilities/object_registry.h"
23
34
  #include "rocksdb/utilities/options_type.h"
35
+ #include "table/block_based/filter_policy_internal.h"
36
+ #include "table/block_based/flush_block_policy.h"
24
37
  #include "table/mock_table.h"
38
+ #include "test_util/mock_time_env.h"
25
39
  #include "test_util/testharness.h"
26
40
  #include "test_util/testutil.h"
41
+ #include "util/file_checksum_helper.h"
42
+ #include "util/rate_limiter.h"
43
+ #include "util/string_util.h"
44
+ #include "utilities/compaction_filters/remove_emptyvalue_compactionfilter.h"
45
+ #include "utilities/memory_allocators.h"
46
+ #include "utilities/merge_operators/bytesxor.h"
47
+ #include "utilities/merge_operators/sortlist.h"
48
+ #include "utilities/merge_operators/string_append/stringappend.h"
49
+ #include "utilities/merge_operators/string_append/stringappend2.h"
27
50
 
28
51
  #ifndef GFLAGS
29
52
  bool FLAGS_enable_print = false;
@@ -34,6 +57,7 @@ DEFINE_bool(enable_print, false, "Print options generated to console.");
34
57
  #endif // GFLAGS
35
58
 
36
59
  namespace ROCKSDB_NAMESPACE {
60
+ namespace {
37
61
  class StringLogger : public Logger {
38
62
  public:
39
63
  using Logger::Logv;
@@ -55,11 +79,11 @@ class TestCustomizable : public Customizable {
55
79
  // Method to allow CheckedCast to work for this class
56
80
  static const char* kClassName() {
57
81
  return "TestCustomizable";
58
- ;
59
82
  }
60
83
 
61
84
  const char* Name() const override { return name_.c_str(); }
62
85
  static const char* Type() { return "test.custom"; }
86
+ #ifndef ROCKSDB_LITE
63
87
  static Status CreateFromString(const ConfigOptions& opts,
64
88
  const std::string& value,
65
89
  std::unique_ptr<TestCustomizable>* result);
@@ -69,6 +93,7 @@ class TestCustomizable : public Customizable {
69
93
  static Status CreateFromString(const ConfigOptions& opts,
70
94
  const std::string& value,
71
95
  TestCustomizable** result);
96
+ #endif // ROCKSDB_LITE
72
97
  bool IsInstanceOf(const std::string& name) const override {
73
98
  if (name == kClassName()) {
74
99
  return true;
@@ -82,6 +107,7 @@ class TestCustomizable : public Customizable {
82
107
  };
83
108
 
84
109
  struct AOptions {
110
+ static const char* kName() { return "A"; }
85
111
  int i = 0;
86
112
  bool b = false;
87
113
  };
@@ -90,16 +116,18 @@ static std::unordered_map<std::string, OptionTypeInfo> a_option_info = {
90
116
  #ifndef ROCKSDB_LITE
91
117
  {"int",
92
118
  {offsetof(struct AOptions, i), OptionType::kInt,
93
- OptionVerificationType::kNormal, OptionTypeFlags::kNone}},
119
+ OptionVerificationType::kNormal, OptionTypeFlags::kMutable}},
94
120
  {"bool",
95
121
  {offsetof(struct AOptions, b), OptionType::kBoolean,
96
122
  OptionVerificationType::kNormal, OptionTypeFlags::kNone}},
97
123
  #endif // ROCKSDB_LITE
98
124
  };
125
+
99
126
  class ACustomizable : public TestCustomizable {
100
127
  public:
101
- ACustomizable(const std::string& id) : TestCustomizable("A"), id_(id) {
102
- ConfigurableHelper::RegisterOptions(*this, "A", &opts_, &a_option_info);
128
+ explicit ACustomizable(const std::string& id)
129
+ : TestCustomizable("A"), id_(id) {
130
+ RegisterOptions(&opts_, &a_option_info);
103
131
  }
104
132
  std::string GetId() const override { return id_; }
105
133
  static const char* kClassName() { return "A"; }
@@ -109,19 +137,6 @@ class ACustomizable : public TestCustomizable {
109
137
  const std::string id_;
110
138
  };
111
139
 
112
- #ifndef ROCKSDB_LITE
113
- static int A_count = 0;
114
- const FactoryFunc<TestCustomizable>& a_func =
115
- ObjectLibrary::Default()->Register<TestCustomizable>(
116
- "A.*",
117
- [](const std::string& name, std::unique_ptr<TestCustomizable>* guard,
118
- std::string* /* msg */) {
119
- guard->reset(new ACustomizable(name));
120
- A_count++;
121
- return guard->get();
122
- });
123
- #endif // ROCKSDB_LITE
124
-
125
140
  struct BOptions {
126
141
  std::string s;
127
142
  bool b = false;
@@ -141,8 +156,8 @@ static std::unordered_map<std::string, OptionTypeInfo> b_option_info = {
141
156
  class BCustomizable : public TestCustomizable {
142
157
  private:
143
158
  public:
144
- BCustomizable(const std::string& name) : TestCustomizable(name) {
145
- ConfigurableHelper::RegisterOptions(*this, name, &opts_, &b_option_info);
159
+ explicit BCustomizable(const std::string& name) : TestCustomizable(name) {
160
+ RegisterOptions(name, &opts_, &b_option_info);
146
161
  }
147
162
  static const char* kClassName() { return "B"; }
148
163
 
@@ -150,6 +165,7 @@ class BCustomizable : public TestCustomizable {
150
165
  BOptions opts_;
151
166
  };
152
167
 
168
+ #ifndef ROCKSDB_LITE
153
169
  static bool LoadSharedB(const std::string& id,
154
170
  std::shared_ptr<TestCustomizable>* result) {
155
171
  if (id == "B") {
@@ -162,6 +178,89 @@ static bool LoadSharedB(const std::string& id,
162
178
  return false;
163
179
  }
164
180
  }
181
+
182
+ static int A_count = 0;
183
+ static int RegisterCustomTestObjects(ObjectLibrary& library,
184
+ const std::string& /*arg*/) {
185
+ library.AddFactory<TestCustomizable>(
186
+ ObjectLibrary::PatternEntry("A", true).AddSeparator("_"),
187
+ [](const std::string& name, std::unique_ptr<TestCustomizable>* guard,
188
+ std::string* /* msg */) {
189
+ guard->reset(new ACustomizable(name));
190
+ A_count++;
191
+ return guard->get();
192
+ });
193
+
194
+ library.AddFactory<TestCustomizable>(
195
+ "S", [](const std::string& name,
196
+ std::unique_ptr<TestCustomizable>* /* guard */,
197
+ std::string* /* msg */) { return new BCustomizable(name); });
198
+ size_t num_types;
199
+ return static_cast<int>(library.GetFactoryCount(&num_types));
200
+ }
201
+ #endif // ROCKSDB_LITE
202
+
203
+ struct SimpleOptions {
204
+ static const char* kName() { return "simple"; }
205
+ bool b = true;
206
+ std::unique_ptr<TestCustomizable> cu;
207
+ std::shared_ptr<TestCustomizable> cs;
208
+ TestCustomizable* cp = nullptr;
209
+ };
210
+
211
+ static std::unordered_map<std::string, OptionTypeInfo> simple_option_info = {
212
+ #ifndef ROCKSDB_LITE
213
+ {"bool",
214
+ {offsetof(struct SimpleOptions, b), OptionType::kBoolean,
215
+ OptionVerificationType::kNormal, OptionTypeFlags::kNone}},
216
+ {"unique",
217
+ OptionTypeInfo::AsCustomUniquePtr<TestCustomizable>(
218
+ offsetof(struct SimpleOptions, cu), OptionVerificationType::kNormal,
219
+ OptionTypeFlags::kAllowNull)},
220
+ {"shared",
221
+ OptionTypeInfo::AsCustomSharedPtr<TestCustomizable>(
222
+ offsetof(struct SimpleOptions, cs), OptionVerificationType::kNormal,
223
+ OptionTypeFlags::kAllowNull)},
224
+ {"pointer",
225
+ OptionTypeInfo::AsCustomRawPtr<TestCustomizable>(
226
+ offsetof(struct SimpleOptions, cp), OptionVerificationType::kNormal,
227
+ OptionTypeFlags::kAllowNull)},
228
+ #endif // ROCKSDB_LITE
229
+ };
230
+
231
+ class SimpleConfigurable : public Configurable {
232
+ private:
233
+ SimpleOptions simple_;
234
+
235
+ public:
236
+ SimpleConfigurable() { RegisterOptions(&simple_, &simple_option_info); }
237
+
238
+ explicit SimpleConfigurable(
239
+ const std::unordered_map<std::string, OptionTypeInfo>* map) {
240
+ RegisterOptions(&simple_, map);
241
+ }
242
+ };
243
+
244
+ #ifndef ROCKSDB_LITE
245
+ static void GetMapFromProperties(
246
+ const std::string& props,
247
+ std::unordered_map<std::string, std::string>* map) {
248
+ std::istringstream iss(props);
249
+ std::unordered_map<std::string, std::string> copy_map;
250
+ std::string line;
251
+ map->clear();
252
+ for (int line_num = 0; std::getline(iss, line); line_num++) {
253
+ std::string name;
254
+ std::string value;
255
+ ASSERT_OK(
256
+ RocksDBOptionsParser::ParseStatement(&name, &value, line, line_num));
257
+ (*map)[name] = value;
258
+ }
259
+ }
260
+ #endif // ROCKSDB_LITE
261
+ } // namespace
262
+
263
+ #ifndef ROCKSDB_LITE
165
264
  Status TestCustomizable::CreateFromString(
166
265
  const ConfigOptions& config_options, const std::string& value,
167
266
  std::shared_ptr<TestCustomizable>* result) {
@@ -206,57 +305,19 @@ Status TestCustomizable::CreateFromString(const ConfigOptions& config_options,
206
305
  },
207
306
  result);
208
307
  }
209
-
210
- #ifndef ROCKSDB_LITE
211
- const FactoryFunc<TestCustomizable>& s_func =
212
- ObjectLibrary::Default()->Register<TestCustomizable>(
213
- "S", [](const std::string& name,
214
- std::unique_ptr<TestCustomizable>* /* guard */,
215
- std::string* /* msg */) { return new BCustomizable(name); });
216
308
  #endif // ROCKSDB_LITE
217
309
 
218
- struct SimpleOptions {
219
- bool b = true;
220
- std::unique_ptr<TestCustomizable> cu;
221
- std::shared_ptr<TestCustomizable> cs;
222
- TestCustomizable* cp = nullptr;
223
- };
224
-
225
- static std::unordered_map<std::string, OptionTypeInfo> simple_option_info = {
310
+ class CustomizableTest : public testing::Test {
311
+ public:
312
+ CustomizableTest() {
313
+ config_options_.invoke_prepare_options = false;
226
314
  #ifndef ROCKSDB_LITE
227
- {"bool",
228
- {offsetof(struct SimpleOptions, b), OptionType::kBoolean,
229
- OptionVerificationType::kNormal, OptionTypeFlags::kNone}},
230
- {"unique", OptionTypeInfo::AsCustomUniquePtr<TestCustomizable>(
231
- offsetof(struct SimpleOptions, cu),
232
- OptionVerificationType::kNormal, OptionTypeFlags::kNone)},
233
- {"shared", OptionTypeInfo::AsCustomSharedPtr<TestCustomizable>(
234
- offsetof(struct SimpleOptions, cs),
235
- OptionVerificationType::kNormal, OptionTypeFlags::kNone)},
236
- {"pointer", OptionTypeInfo::AsCustomRawPtr<TestCustomizable>(
237
- offsetof(struct SimpleOptions, cp),
238
- OptionVerificationType::kNormal, OptionTypeFlags::kNone)},
315
+ // GetOptionsFromMap is not supported in ROCKSDB_LITE
316
+ config_options_.registry->AddLibrary("CustomizableTest",
317
+ RegisterCustomTestObjects, "");
239
318
  #endif // ROCKSDB_LITE
240
- };
241
-
242
- class SimpleConfigurable : public Configurable {
243
- private:
244
- SimpleOptions simple_;
245
-
246
- public:
247
- SimpleConfigurable() {
248
- ConfigurableHelper::RegisterOptions(*this, "simple", &simple_,
249
- &simple_option_info);
250
- }
251
-
252
- SimpleConfigurable(
253
- const std::unordered_map<std::string, OptionTypeInfo>* map) {
254
- ConfigurableHelper::RegisterOptions(*this, "simple", &simple_, map);
255
319
  }
256
- };
257
320
 
258
- class CustomizableTest : public testing::Test {
259
- public:
260
321
  ConfigOptions config_options_;
261
322
  };
262
323
 
@@ -266,15 +327,15 @@ class CustomizableTest : public testing::Test {
266
327
  // - a XXX.id option
267
328
  // - a property with a name
268
329
  TEST_F(CustomizableTest, CreateByNameTest) {
269
- ObjectLibrary::Default()->Register<TestCustomizable>(
270
- "TEST.*",
330
+ ObjectLibrary::Default()->AddFactory<TestCustomizable>(
331
+ ObjectLibrary::PatternEntry("TEST", false).AddSeparator("_"),
271
332
  [](const std::string& name, std::unique_ptr<TestCustomizable>* guard,
272
333
  std::string* /* msg */) {
273
334
  guard->reset(new TestCustomizable(name));
274
335
  return guard->get();
275
336
  });
276
337
  std::unique_ptr<Configurable> configurable(new SimpleConfigurable());
277
- SimpleOptions* simple = configurable->GetOptions<SimpleOptions>("simple");
338
+ SimpleOptions* simple = configurable->GetOptions<SimpleOptions>();
278
339
  ASSERT_NE(simple, nullptr);
279
340
  ASSERT_OK(
280
341
  configurable->ConfigureFromString(config_options_, "unique={id=TEST_1}"));
@@ -302,7 +363,7 @@ TEST_F(CustomizableTest, SimpleConfigureTest) {
302
363
  };
303
364
  std::unique_ptr<Configurable> configurable(new SimpleConfigurable());
304
365
  ASSERT_OK(configurable->ConfigureFromMap(config_options_, opt_map));
305
- SimpleOptions* simple = configurable->GetOptions<SimpleOptions>("simple");
366
+ SimpleOptions* simple = configurable->GetOptions<SimpleOptions>();
306
367
  ASSERT_NE(simple, nullptr);
307
368
  ASSERT_NE(simple->cu, nullptr);
308
369
  ASSERT_EQ(simple->cu->GetId(), "A");
@@ -315,22 +376,6 @@ TEST_F(CustomizableTest, SimpleConfigureTest) {
315
376
  configurable->AreEquivalent(config_options_, copy.get(), &mismatch));
316
377
  }
317
378
 
318
- static void GetMapFromProperties(
319
- const std::string& props,
320
- std::unordered_map<std::string, std::string>* map) {
321
- std::istringstream iss(props);
322
- std::unordered_map<std::string, std::string> copy_map;
323
- std::string line;
324
- map->clear();
325
- for (int line_num = 0; std::getline(iss, line); line_num++) {
326
- std::string name;
327
- std::string value;
328
- ASSERT_OK(
329
- RocksDBOptionsParser::ParseStatement(&name, &value, line, line_num));
330
- (*map)[name] = value;
331
- }
332
- }
333
-
334
379
  TEST_F(CustomizableTest, ConfigureFromPropsTest) {
335
380
  std::unordered_map<std::string, std::string> opt_map = {
336
381
  {"unique.id", "A"}, {"unique.A.int", "1"}, {"unique.A.bool", "true"},
@@ -338,7 +383,7 @@ TEST_F(CustomizableTest, ConfigureFromPropsTest) {
338
383
  };
339
384
  std::unique_ptr<Configurable> configurable(new SimpleConfigurable());
340
385
  ASSERT_OK(configurable->ConfigureFromMap(config_options_, opt_map));
341
- SimpleOptions* simple = configurable->GetOptions<SimpleOptions>("simple");
386
+ SimpleOptions* simple = configurable->GetOptions<SimpleOptions>();
342
387
  ASSERT_NE(simple, nullptr);
343
388
  ASSERT_NE(simple->cu, nullptr);
344
389
  ASSERT_EQ(simple->cu->GetId(), "A");
@@ -361,7 +406,7 @@ TEST_F(CustomizableTest, ConfigureFromShortTest) {
361
406
  };
362
407
  std::unique_ptr<Configurable> configurable(new SimpleConfigurable());
363
408
  ASSERT_OK(configurable->ConfigureFromMap(config_options_, opt_map));
364
- SimpleOptions* simple = configurable->GetOptions<SimpleOptions>("simple");
409
+ SimpleOptions* simple = configurable->GetOptions<SimpleOptions>();
365
410
  ASSERT_NE(simple, nullptr);
366
411
  ASSERT_NE(simple->cu, nullptr);
367
412
  ASSERT_EQ(simple->cu->GetId(), "A");
@@ -374,13 +419,12 @@ TEST_F(CustomizableTest, AreEquivalentOptionsTest) {
374
419
  };
375
420
  std::string mismatch;
376
421
  ConfigOptions config_options = config_options_;
377
- config_options.invoke_prepare_options = false;
378
422
  std::unique_ptr<Configurable> c1(new SimpleConfigurable());
379
423
  std::unique_ptr<Configurable> c2(new SimpleConfigurable());
380
424
  ASSERT_OK(c1->ConfigureFromMap(config_options, opt_map));
381
425
  ASSERT_OK(c2->ConfigureFromMap(config_options, opt_map));
382
426
  ASSERT_TRUE(c1->AreEquivalent(config_options, c2.get(), &mismatch));
383
- SimpleOptions* simple = c1->GetOptions<SimpleOptions>("simple");
427
+ SimpleOptions* simple = c1->GetOptions<SimpleOptions>();
384
428
  ASSERT_TRUE(
385
429
  simple->cu->AreEquivalent(config_options, simple->cs.get(), &mismatch));
386
430
  ASSERT_OK(simple->cu->ConfigureOption(config_options, "int", "2"));
@@ -404,7 +448,7 @@ TEST_F(CustomizableTest, AreEquivalentOptionsTest) {
404
448
  // Tests that we can initialize a customizable from its options
405
449
  TEST_F(CustomizableTest, ConfigureStandaloneCustomTest) {
406
450
  std::unique_ptr<TestCustomizable> base, copy;
407
- auto registry = ObjectRegistry::NewInstance();
451
+ const auto& registry = config_options_.registry;
408
452
  ASSERT_OK(registry->NewUniqueObject<TestCustomizable>("A", &base));
409
453
  ASSERT_OK(registry->NewUniqueObject<TestCustomizable>("A", &copy));
410
454
  ASSERT_OK(base->ConfigureFromString(config_options_, "int=33;bool=true"));
@@ -446,12 +490,61 @@ TEST_F(CustomizableTest, BadOptionTest) {
446
490
  ASSERT_OK(c1->ConfigureFromString(ignore, "shared.id=A;A.string=s}"));
447
491
  }
448
492
 
493
+ TEST_F(CustomizableTest, FailingFactoryTest) {
494
+ std::shared_ptr<ObjectRegistry> registry = ObjectRegistry::NewInstance();
495
+ std::unique_ptr<Configurable> c1(new SimpleConfigurable());
496
+ ConfigOptions ignore = config_options_;
497
+
498
+ Status s;
499
+ ignore.registry->AddLibrary("failing")->AddFactory<TestCustomizable>(
500
+ "failing",
501
+ [](const std::string& /*uri*/,
502
+ std::unique_ptr<TestCustomizable>* /*guard */, std::string* errmsg) {
503
+ *errmsg = "Bad Factory";
504
+ return nullptr;
505
+ });
506
+
507
+ // If we are ignoring unknown and unsupported options, will see
508
+ // different errors for failing versus missing
509
+ ignore.ignore_unknown_options = false;
510
+ ignore.ignore_unsupported_options = false;
511
+ s = c1->ConfigureFromString(ignore, "shared.id=failing");
512
+ ASSERT_TRUE(s.IsInvalidArgument());
513
+ s = c1->ConfigureFromString(ignore, "unique.id=failing");
514
+ ASSERT_TRUE(s.IsInvalidArgument());
515
+ s = c1->ConfigureFromString(ignore, "shared.id=missing");
516
+ ASSERT_TRUE(s.IsNotSupported());
517
+ s = c1->ConfigureFromString(ignore, "unique.id=missing");
518
+ ASSERT_TRUE(s.IsNotSupported());
519
+
520
+ // If we are ignoring unsupported options, will see
521
+ // errors for failing but not missing
522
+ ignore.ignore_unknown_options = false;
523
+ ignore.ignore_unsupported_options = true;
524
+ s = c1->ConfigureFromString(ignore, "shared.id=failing");
525
+ ASSERT_TRUE(s.IsInvalidArgument());
526
+ s = c1->ConfigureFromString(ignore, "unique.id=failing");
527
+ ASSERT_TRUE(s.IsInvalidArgument());
528
+
529
+ ASSERT_OK(c1->ConfigureFromString(ignore, "shared.id=missing"));
530
+ ASSERT_OK(c1->ConfigureFromString(ignore, "unique.id=missing"));
531
+
532
+ // If we are ignoring unknown options, will see no errors
533
+ // for failing or missing
534
+ ignore.ignore_unknown_options = true;
535
+ ignore.ignore_unsupported_options = false;
536
+ ASSERT_OK(c1->ConfigureFromString(ignore, "shared.id=failing"));
537
+ ASSERT_OK(c1->ConfigureFromString(ignore, "unique.id=failing"));
538
+ ASSERT_OK(c1->ConfigureFromString(ignore, "shared.id=missing"));
539
+ ASSERT_OK(c1->ConfigureFromString(ignore, "unique.id=missing"));
540
+ }
541
+
449
542
  // Tests that different IDs lead to different objects
450
543
  TEST_F(CustomizableTest, UniqueIdTest) {
451
544
  std::unique_ptr<Configurable> base(new SimpleConfigurable());
452
545
  ASSERT_OK(base->ConfigureFromString(config_options_,
453
546
  "unique={id=A_1;int=1;bool=true}"));
454
- SimpleOptions* simple = base->GetOptions<SimpleOptions>("simple");
547
+ SimpleOptions* simple = base->GetOptions<SimpleOptions>();
455
548
  ASSERT_NE(simple, nullptr);
456
549
  ASSERT_NE(simple->cu, nullptr);
457
550
  ASSERT_EQ(simple->cu->GetId(), std::string("A_1"));
@@ -468,11 +561,13 @@ TEST_F(CustomizableTest, UniqueIdTest) {
468
561
  }
469
562
 
470
563
  TEST_F(CustomizableTest, IsInstanceOfTest) {
471
- std::shared_ptr<TestCustomizable> tc = std::make_shared<ACustomizable>("A");
564
+ std::shared_ptr<TestCustomizable> tc = std::make_shared<ACustomizable>("A_1");
472
565
 
566
+ ASSERT_EQ(tc->GetId(), std::string("A_1"));
473
567
  ASSERT_TRUE(tc->IsInstanceOf("A"));
474
568
  ASSERT_TRUE(tc->IsInstanceOf("TestCustomizable"));
475
569
  ASSERT_FALSE(tc->IsInstanceOf("B"));
570
+ ASSERT_FALSE(tc->IsInstanceOf("A_1"));
476
571
  ASSERT_EQ(tc->CheckedCast<ACustomizable>(), tc.get());
477
572
  ASSERT_EQ(tc->CheckedCast<TestCustomizable>(), tc.get());
478
573
  ASSERT_EQ(tc->CheckedCast<BCustomizable>(), nullptr);
@@ -486,6 +581,88 @@ TEST_F(CustomizableTest, IsInstanceOfTest) {
486
581
  ASSERT_EQ(tc->CheckedCast<ACustomizable>(), nullptr);
487
582
  }
488
583
 
584
+ TEST_F(CustomizableTest, PrepareOptionsTest) {
585
+ static std::unordered_map<std::string, OptionTypeInfo> p_option_info = {
586
+ #ifndef ROCKSDB_LITE
587
+ {"can_prepare",
588
+ {0, OptionType::kBoolean, OptionVerificationType::kNormal,
589
+ OptionTypeFlags::kNone}},
590
+ #endif // ROCKSDB_LITE
591
+ };
592
+
593
+ class PrepareCustomizable : public TestCustomizable {
594
+ public:
595
+ bool can_prepare_ = true;
596
+
597
+ PrepareCustomizable() : TestCustomizable("P") {
598
+ RegisterOptions("Prepare", &can_prepare_, &p_option_info);
599
+ }
600
+
601
+ Status PrepareOptions(const ConfigOptions& opts) override {
602
+ if (!can_prepare_) {
603
+ return Status::InvalidArgument("Cannot Prepare");
604
+ } else {
605
+ return TestCustomizable::PrepareOptions(opts);
606
+ }
607
+ }
608
+ };
609
+
610
+ ObjectLibrary::Default()->AddFactory<TestCustomizable>(
611
+ "P",
612
+ [](const std::string& /*name*/, std::unique_ptr<TestCustomizable>* guard,
613
+ std::string* /* msg */) {
614
+ guard->reset(new PrepareCustomizable());
615
+ return guard->get();
616
+ });
617
+
618
+ std::unique_ptr<Configurable> base(new SimpleConfigurable());
619
+ ConfigOptions prepared(config_options_);
620
+ prepared.invoke_prepare_options = true;
621
+
622
+ ASSERT_OK(base->ConfigureFromString(
623
+ prepared, "unique=A_1; shared={id=B;string=s}; pointer.id=S"));
624
+ SimpleOptions* simple = base->GetOptions<SimpleOptions>();
625
+ ASSERT_NE(simple, nullptr);
626
+ ASSERT_NE(simple->cu, nullptr);
627
+ ASSERT_NE(simple->cs, nullptr);
628
+ ASSERT_NE(simple->cp, nullptr);
629
+ delete simple->cp;
630
+ base.reset(new SimpleConfigurable());
631
+ ASSERT_OK(base->ConfigureFromString(
632
+ config_options_, "unique=A_1; shared={id=B;string=s}; pointer.id=S"));
633
+
634
+ simple = base->GetOptions<SimpleOptions>();
635
+ ASSERT_NE(simple, nullptr);
636
+ ASSERT_NE(simple->cu, nullptr);
637
+ ASSERT_NE(simple->cs, nullptr);
638
+ ASSERT_NE(simple->cp, nullptr);
639
+
640
+ ASSERT_OK(base->PrepareOptions(config_options_));
641
+ delete simple->cp;
642
+ base.reset(new SimpleConfigurable());
643
+ simple = base->GetOptions<SimpleOptions>();
644
+ ASSERT_NE(simple, nullptr);
645
+
646
+ ASSERT_NOK(
647
+ base->ConfigureFromString(prepared, "unique={id=P; can_prepare=false}"));
648
+ ASSERT_EQ(simple->cu, nullptr);
649
+
650
+ ASSERT_OK(
651
+ base->ConfigureFromString(prepared, "unique={id=P; can_prepare=true}"));
652
+ ASSERT_NE(simple->cu, nullptr);
653
+
654
+ ASSERT_OK(base->ConfigureFromString(config_options_,
655
+ "unique={id=P; can_prepare=true}"));
656
+ ASSERT_NE(simple->cu, nullptr);
657
+ ASSERT_OK(simple->cu->PrepareOptions(prepared));
658
+
659
+ ASSERT_OK(base->ConfigureFromString(config_options_,
660
+ "unique={id=P; can_prepare=false}"));
661
+ ASSERT_NE(simple->cu, nullptr);
662
+ ASSERT_NOK(simple->cu->PrepareOptions(prepared));
663
+ }
664
+
665
+ namespace {
489
666
  static std::unordered_map<std::string, OptionTypeInfo> inner_option_info = {
490
667
  #ifndef ROCKSDB_LITE
491
668
  {"inner",
@@ -494,23 +671,168 @@ static std::unordered_map<std::string, OptionTypeInfo> inner_option_info = {
494
671
  #endif // ROCKSDB_LITE
495
672
  };
496
673
 
497
- class ShallowCustomizable : public Customizable {
674
+ struct InnerOptions {
675
+ static const char* kName() { return "InnerOptions"; }
676
+ std::shared_ptr<Customizable> inner;
677
+ };
678
+
679
+ class InnerCustomizable : public Customizable {
498
680
  public:
499
- ShallowCustomizable() {
500
- inner_ = std::make_shared<ACustomizable>("a");
501
- ConfigurableHelper::RegisterOptions(*this, "inner", &inner_,
502
- &inner_option_info);
503
- };
504
- static const char* kClassName() { return "shallow"; }
681
+ explicit InnerCustomizable(const std::shared_ptr<Customizable>& w) {
682
+ iopts_.inner = w;
683
+ RegisterOptions(&iopts_, &inner_option_info);
684
+ }
685
+ static const char* kClassName() { return "Inner"; }
686
+ const char* Name() const override { return kClassName(); }
687
+
688
+ bool IsInstanceOf(const std::string& name) const override {
689
+ if (name == kClassName()) {
690
+ return true;
691
+ } else {
692
+ return Customizable::IsInstanceOf(name);
693
+ }
694
+ }
695
+
696
+ protected:
697
+ const Customizable* Inner() const override { return iopts_.inner.get(); }
698
+
699
+ private:
700
+ InnerOptions iopts_;
701
+ };
702
+
703
+ struct WrappedOptions1 {
704
+ static const char* kName() { return "WrappedOptions1"; }
705
+ int i = 42;
706
+ };
707
+
708
+ class WrappedCustomizable1 : public InnerCustomizable {
709
+ public:
710
+ explicit WrappedCustomizable1(const std::shared_ptr<Customizable>& w)
711
+ : InnerCustomizable(w) {
712
+ RegisterOptions(&wopts_, nullptr);
713
+ }
714
+ const char* Name() const override { return kClassName(); }
715
+ static const char* kClassName() { return "Wrapped1"; }
716
+
717
+ private:
718
+ WrappedOptions1 wopts_;
719
+ };
720
+
721
+ struct WrappedOptions2 {
722
+ static const char* kName() { return "WrappedOptions2"; }
723
+ std::string s = "42";
724
+ };
725
+ class WrappedCustomizable2 : public InnerCustomizable {
726
+ public:
727
+ explicit WrappedCustomizable2(const std::shared_ptr<Customizable>& w)
728
+ : InnerCustomizable(w) {}
729
+ const void* GetOptionsPtr(const std::string& name) const override {
730
+ if (name == WrappedOptions2::kName()) {
731
+ return &wopts_;
732
+ } else {
733
+ return InnerCustomizable::GetOptionsPtr(name);
734
+ }
735
+ }
736
+
505
737
  const char* Name() const override { return kClassName(); }
738
+ static const char* kClassName() { return "Wrapped2"; }
506
739
 
507
740
  private:
508
- std::shared_ptr<TestCustomizable> inner_;
741
+ WrappedOptions2 wopts_;
509
742
  };
743
+ } // namespace
744
+
745
+ TEST_F(CustomizableTest, WrappedInnerTest) {
746
+ std::shared_ptr<TestCustomizable> ac =
747
+ std::make_shared<TestCustomizable>("A");
748
+
749
+ ASSERT_TRUE(ac->IsInstanceOf("A"));
750
+ ASSERT_TRUE(ac->IsInstanceOf("TestCustomizable"));
751
+ ASSERT_EQ(ac->CheckedCast<TestCustomizable>(), ac.get());
752
+ ASSERT_EQ(ac->CheckedCast<InnerCustomizable>(), nullptr);
753
+ ASSERT_EQ(ac->CheckedCast<WrappedCustomizable1>(), nullptr);
754
+ ASSERT_EQ(ac->CheckedCast<WrappedCustomizable2>(), nullptr);
755
+ std::shared_ptr<Customizable> wc1 =
756
+ std::make_shared<WrappedCustomizable1>(ac);
757
+
758
+ ASSERT_TRUE(wc1->IsInstanceOf(WrappedCustomizable1::kClassName()));
759
+ ASSERT_EQ(wc1->CheckedCast<WrappedCustomizable1>(), wc1.get());
760
+ ASSERT_EQ(wc1->CheckedCast<WrappedCustomizable2>(), nullptr);
761
+ ASSERT_EQ(wc1->CheckedCast<InnerCustomizable>(), wc1.get());
762
+ ASSERT_EQ(wc1->CheckedCast<TestCustomizable>(), ac.get());
763
+
764
+ std::shared_ptr<Customizable> wc2 =
765
+ std::make_shared<WrappedCustomizable2>(wc1);
766
+ ASSERT_TRUE(wc2->IsInstanceOf(WrappedCustomizable2::kClassName()));
767
+ ASSERT_EQ(wc2->CheckedCast<WrappedCustomizable2>(), wc2.get());
768
+ ASSERT_EQ(wc2->CheckedCast<WrappedCustomizable1>(), wc1.get());
769
+ ASSERT_EQ(wc2->CheckedCast<InnerCustomizable>(), wc2.get());
770
+ ASSERT_EQ(wc2->CheckedCast<TestCustomizable>(), ac.get());
771
+ }
772
+
773
+ TEST_F(CustomizableTest, CustomizableInnerTest) {
774
+ std::shared_ptr<Customizable> c =
775
+ std::make_shared<InnerCustomizable>(std::make_shared<ACustomizable>("a"));
776
+ std::shared_ptr<Customizable> wc1 = std::make_shared<WrappedCustomizable1>(c);
777
+ std::shared_ptr<Customizable> wc2 = std::make_shared<WrappedCustomizable2>(c);
778
+ auto inner = c->GetOptions<InnerOptions>();
779
+ ASSERT_NE(inner, nullptr);
780
+
781
+ auto aopts = c->GetOptions<AOptions>();
782
+ ASSERT_NE(aopts, nullptr);
783
+ ASSERT_EQ(aopts, wc1->GetOptions<AOptions>());
784
+ ASSERT_EQ(aopts, wc2->GetOptions<AOptions>());
785
+ auto w1opts = wc1->GetOptions<WrappedOptions1>();
786
+ ASSERT_NE(w1opts, nullptr);
787
+ ASSERT_EQ(c->GetOptions<WrappedOptions1>(), nullptr);
788
+ ASSERT_EQ(wc2->GetOptions<WrappedOptions1>(), nullptr);
789
+
790
+ auto w2opts = wc2->GetOptions<WrappedOptions2>();
791
+ ASSERT_NE(w2opts, nullptr);
792
+ ASSERT_EQ(c->GetOptions<WrappedOptions2>(), nullptr);
793
+ ASSERT_EQ(wc1->GetOptions<WrappedOptions2>(), nullptr);
794
+ }
795
+
796
+ TEST_F(CustomizableTest, CopyObjectTest) {
797
+ class CopyCustomizable : public Customizable {
798
+ public:
799
+ CopyCustomizable() : prepared_(0), validated_(0) {}
800
+ const char* Name() const override { return "CopyCustomizable"; }
801
+
802
+ Status PrepareOptions(const ConfigOptions& options) override {
803
+ prepared_++;
804
+ return Customizable::PrepareOptions(options);
805
+ }
806
+ Status ValidateOptions(const DBOptions& db_opts,
807
+ const ColumnFamilyOptions& cf_opts) const override {
808
+ validated_++;
809
+ return Customizable::ValidateOptions(db_opts, cf_opts);
810
+ }
811
+ int prepared_;
812
+ mutable int validated_;
813
+ };
814
+
815
+ CopyCustomizable c1;
816
+ ConfigOptions config_options;
817
+ Options options;
818
+
819
+ ASSERT_OK(c1.PrepareOptions(config_options));
820
+ ASSERT_OK(c1.ValidateOptions(options, options));
821
+ ASSERT_EQ(c1.prepared_, 1);
822
+ ASSERT_EQ(c1.validated_, 1);
823
+ CopyCustomizable c2 = c1;
824
+ ASSERT_OK(c1.PrepareOptions(config_options));
825
+ ASSERT_OK(c1.ValidateOptions(options, options));
826
+ ASSERT_EQ(c2.prepared_, 1);
827
+ ASSERT_EQ(c2.validated_, 1);
828
+ ASSERT_EQ(c1.prepared_, 2);
829
+ ASSERT_EQ(c1.validated_, 2);
830
+ }
510
831
 
511
832
  TEST_F(CustomizableTest, TestStringDepth) {
512
833
  ConfigOptions shallow = config_options_;
513
- std::unique_ptr<Configurable> c(new ShallowCustomizable());
834
+ std::unique_ptr<Configurable> c(
835
+ new InnerCustomizable(std::make_shared<ACustomizable>("a")));
514
836
  std::string opt_str;
515
837
  shallow.depth = ConfigOptions::Depth::kDepthShallow;
516
838
  ASSERT_OK(c->GetOptionString(shallow, &opt_str));
@@ -521,69 +843,203 @@ TEST_F(CustomizableTest, TestStringDepth) {
521
843
  }
522
844
 
523
845
  // Tests that we only get a new customizable when it changes
524
- TEST_F(CustomizableTest, NewCustomizableTest) {
846
+ TEST_F(CustomizableTest, NewUniqueCustomizableTest) {
525
847
  std::unique_ptr<Configurable> base(new SimpleConfigurable());
526
848
  A_count = 0;
527
849
  ASSERT_OK(base->ConfigureFromString(config_options_,
528
850
  "unique={id=A_1;int=1;bool=true}"));
529
- SimpleOptions* simple = base->GetOptions<SimpleOptions>("simple");
851
+ SimpleOptions* simple = base->GetOptions<SimpleOptions>();
530
852
  ASSERT_NE(simple, nullptr);
531
853
  ASSERT_NE(simple->cu, nullptr);
532
854
  ASSERT_EQ(A_count, 1); // Created one A
533
855
  ASSERT_OK(base->ConfigureFromString(config_options_,
534
856
  "unique={id=A_1;int=1;bool=false}"));
535
857
  ASSERT_EQ(A_count, 2); // Create another A_1
858
+ ASSERT_OK(base->ConfigureFromString(config_options_, "unique={id=}"));
859
+ ASSERT_EQ(simple->cu, nullptr);
860
+ ASSERT_EQ(A_count, 2);
536
861
  ASSERT_OK(base->ConfigureFromString(config_options_,
537
862
  "unique={id=A_2;int=1;bool=false}"));
538
863
  ASSERT_EQ(A_count, 3); // Created another A
539
- ASSERT_OK(base->ConfigureFromString(config_options_, "unique="));
864
+ ASSERT_OK(base->ConfigureFromString(config_options_, "unique.id="));
865
+ ASSERT_EQ(simple->cu, nullptr);
866
+ ASSERT_OK(base->ConfigureFromString(config_options_, "unique=nullptr"));
867
+ ASSERT_EQ(simple->cu, nullptr);
868
+ ASSERT_OK(base->ConfigureFromString(config_options_, "unique.id=nullptr"));
540
869
  ASSERT_EQ(simple->cu, nullptr);
541
870
  ASSERT_EQ(A_count, 3);
542
871
  }
543
872
 
544
- TEST_F(CustomizableTest, IgnoreUnknownObjects) {
545
- ConfigOptions ignore = config_options_;
546
- std::shared_ptr<TestCustomizable> shared;
547
- std::unique_ptr<TestCustomizable> unique;
548
- TestCustomizable* pointer = nullptr;
549
- ignore.ignore_unsupported_options = false;
550
- ASSERT_NOK(
551
- LoadSharedObject<TestCustomizable>(ignore, "Unknown", nullptr, &shared));
552
- ASSERT_NOK(
553
- LoadUniqueObject<TestCustomizable>(ignore, "Unknown", nullptr, &unique));
554
- ASSERT_NOK(
555
- LoadStaticObject<TestCustomizable>(ignore, "Unknown", nullptr, &pointer));
556
- ASSERT_EQ(shared.get(), nullptr);
557
- ASSERT_EQ(unique.get(), nullptr);
558
- ASSERT_EQ(pointer, nullptr);
559
- ignore.ignore_unsupported_options = true;
560
- ASSERT_OK(
561
- LoadSharedObject<TestCustomizable>(ignore, "Unknown", nullptr, &shared));
562
- ASSERT_OK(
563
- LoadUniqueObject<TestCustomizable>(ignore, "Unknown", nullptr, &unique));
564
- ASSERT_OK(
565
- LoadStaticObject<TestCustomizable>(ignore, "Unknown", nullptr, &pointer));
566
- ASSERT_EQ(shared.get(), nullptr);
567
- ASSERT_EQ(unique.get(), nullptr);
568
- ASSERT_EQ(pointer, nullptr);
569
- ASSERT_OK(LoadSharedObject<TestCustomizable>(ignore, "id=Unknown", nullptr,
570
- &shared));
571
- ASSERT_OK(LoadUniqueObject<TestCustomizable>(ignore, "id=Unknown", nullptr,
572
- &unique));
573
- ASSERT_OK(LoadStaticObject<TestCustomizable>(ignore, "id=Unknown", nullptr,
574
- &pointer));
575
- ASSERT_EQ(shared.get(), nullptr);
576
- ASSERT_EQ(unique.get(), nullptr);
577
- ASSERT_EQ(pointer, nullptr);
578
- ASSERT_OK(LoadSharedObject<TestCustomizable>(ignore, "id=Unknown;option=bad",
579
- nullptr, &shared));
580
- ASSERT_OK(LoadUniqueObject<TestCustomizable>(ignore, "id=Unknown;option=bad",
581
- nullptr, &unique));
582
- ASSERT_OK(LoadStaticObject<TestCustomizable>(ignore, "id=Unknown;option=bad",
583
- nullptr, &pointer));
584
- ASSERT_EQ(shared.get(), nullptr);
585
- ASSERT_EQ(unique.get(), nullptr);
586
- ASSERT_EQ(pointer, nullptr);
873
+ TEST_F(CustomizableTest, NewEmptyUniqueTest) {
874
+ std::unique_ptr<Configurable> base(new SimpleConfigurable());
875
+ SimpleOptions* simple = base->GetOptions<SimpleOptions>();
876
+ ASSERT_EQ(simple->cu, nullptr);
877
+ simple->cu.reset(new BCustomizable("B"));
878
+
879
+ ASSERT_OK(base->ConfigureFromString(config_options_, "unique={id=}"));
880
+ ASSERT_EQ(simple->cu, nullptr);
881
+ simple->cu.reset(new BCustomizable("B"));
882
+
883
+ ASSERT_OK(base->ConfigureFromString(config_options_, "unique={id=nullptr}"));
884
+ ASSERT_EQ(simple->cu, nullptr);
885
+ simple->cu.reset(new BCustomizable("B"));
886
+
887
+ ASSERT_OK(base->ConfigureFromString(config_options_, "unique.id="));
888
+ ASSERT_EQ(simple->cu, nullptr);
889
+ simple->cu.reset(new BCustomizable("B"));
890
+
891
+ ASSERT_OK(base->ConfigureFromString(config_options_, "unique=nullptr"));
892
+ ASSERT_EQ(simple->cu, nullptr);
893
+ simple->cu.reset(new BCustomizable("B"));
894
+
895
+ ASSERT_OK(base->ConfigureFromString(config_options_, "unique.id=nullptr"));
896
+ ASSERT_EQ(simple->cu, nullptr);
897
+ }
898
+
899
+ TEST_F(CustomizableTest, NewEmptySharedTest) {
900
+ std::unique_ptr<Configurable> base(new SimpleConfigurable());
901
+
902
+ SimpleOptions* simple = base->GetOptions<SimpleOptions>();
903
+ ASSERT_NE(simple, nullptr);
904
+ ASSERT_EQ(simple->cs, nullptr);
905
+ simple->cs.reset(new BCustomizable("B"));
906
+
907
+ ASSERT_OK(base->ConfigureFromString(config_options_, "shared={id=}"));
908
+ ASSERT_NE(simple, nullptr);
909
+ ASSERT_EQ(simple->cs, nullptr);
910
+ simple->cs.reset(new BCustomizable("B"));
911
+
912
+ ASSERT_OK(base->ConfigureFromString(config_options_, "shared={id=nullptr}"));
913
+ ASSERT_EQ(simple->cs, nullptr);
914
+ simple->cs.reset(new BCustomizable("B"));
915
+
916
+ ASSERT_OK(base->ConfigureFromString(config_options_, "shared.id="));
917
+ ASSERT_EQ(simple->cs, nullptr);
918
+ simple->cs.reset(new BCustomizable("B"));
919
+
920
+ ASSERT_OK(base->ConfigureFromString(config_options_, "shared.id=nullptr"));
921
+ ASSERT_EQ(simple->cs, nullptr);
922
+ simple->cs.reset(new BCustomizable("B"));
923
+
924
+ ASSERT_OK(base->ConfigureFromString(config_options_, "shared=nullptr"));
925
+ ASSERT_EQ(simple->cs, nullptr);
926
+ }
927
+
928
+ TEST_F(CustomizableTest, NewEmptyStaticTest) {
929
+ std::unique_ptr<Configurable> base(new SimpleConfigurable());
930
+ ASSERT_OK(base->ConfigureFromString(config_options_, "pointer={id=}"));
931
+ SimpleOptions* simple = base->GetOptions<SimpleOptions>();
932
+ ASSERT_NE(simple, nullptr);
933
+ ASSERT_EQ(simple->cp, nullptr);
934
+ ASSERT_OK(base->ConfigureFromString(config_options_, "pointer={id=nullptr}"));
935
+ ASSERT_EQ(simple->cp, nullptr);
936
+
937
+ ASSERT_OK(base->ConfigureFromString(config_options_, "pointer="));
938
+ ASSERT_EQ(simple->cp, nullptr);
939
+ ASSERT_OK(base->ConfigureFromString(config_options_, "pointer=nullptr"));
940
+ ASSERT_EQ(simple->cp, nullptr);
941
+
942
+ ASSERT_OK(base->ConfigureFromString(config_options_, "pointer.id="));
943
+ ASSERT_EQ(simple->cp, nullptr);
944
+ ASSERT_OK(base->ConfigureFromString(config_options_, "pointer.id=nullptr"));
945
+ ASSERT_EQ(simple->cp, nullptr);
946
+ }
947
+
948
+ namespace {
949
+ #ifndef ROCKSDB_LITE
950
+ static std::unordered_map<std::string, OptionTypeInfo> vector_option_info = {
951
+ {"vector",
952
+ OptionTypeInfo::Vector<std::shared_ptr<TestCustomizable>>(
953
+ 0, OptionVerificationType::kNormal,
954
+
955
+ OptionTypeFlags::kNone,
956
+
957
+ OptionTypeInfo::AsCustomSharedPtr<TestCustomizable>(
958
+ 0, OptionVerificationType::kNormal, OptionTypeFlags::kNone))},
959
+ };
960
+ class VectorConfigurable : public SimpleConfigurable {
961
+ public:
962
+ VectorConfigurable() { RegisterOptions("vector", &cv, &vector_option_info); }
963
+ std::vector<std::shared_ptr<TestCustomizable>> cv;
964
+ };
965
+ } // namespace
966
+
967
+ TEST_F(CustomizableTest, VectorConfigTest) {
968
+ VectorConfigurable orig, copy;
969
+ std::shared_ptr<TestCustomizable> c1, c2;
970
+ ASSERT_OK(TestCustomizable::CreateFromString(config_options_, "A", &c1));
971
+ ASSERT_OK(TestCustomizable::CreateFromString(config_options_, "B", &c2));
972
+ orig.cv.push_back(c1);
973
+ orig.cv.push_back(c2);
974
+ ASSERT_OK(orig.ConfigureFromString(config_options_, "unique=A2"));
975
+ std::string opt_str, mismatch;
976
+ ASSERT_OK(orig.GetOptionString(config_options_, &opt_str));
977
+ ASSERT_OK(copy.ConfigureFromString(config_options_, opt_str));
978
+ ASSERT_TRUE(orig.AreEquivalent(config_options_, &copy, &mismatch));
979
+ }
980
+
981
+ TEST_F(CustomizableTest, NoNameTest) {
982
+ // If Customizables are created without names, they are not
983
+ // part of the serialization (since they cannot be recreated)
984
+ VectorConfigurable orig, copy;
985
+ auto sopts = orig.GetOptions<SimpleOptions>();
986
+ auto copts = copy.GetOptions<SimpleOptions>();
987
+ sopts->cu.reset(new ACustomizable(""));
988
+ orig.cv.push_back(std::make_shared<ACustomizable>(""));
989
+ orig.cv.push_back(std::make_shared<ACustomizable>("A_1"));
990
+ std::string opt_str, mismatch;
991
+ ASSERT_OK(orig.GetOptionString(config_options_, &opt_str));
992
+ ASSERT_OK(copy.ConfigureFromString(config_options_, opt_str));
993
+ ASSERT_EQ(copy.cv.size(), 1U);
994
+ ASSERT_EQ(copy.cv[0]->GetId(), "A_1");
995
+ ASSERT_EQ(copts->cu, nullptr);
996
+ }
997
+
998
+ #endif // ROCKSDB_LITE
999
+
1000
+ TEST_F(CustomizableTest, IgnoreUnknownObjects) {
1001
+ ConfigOptions ignore = config_options_;
1002
+ std::shared_ptr<TestCustomizable> shared;
1003
+ std::unique_ptr<TestCustomizable> unique;
1004
+ TestCustomizable* pointer = nullptr;
1005
+ ignore.ignore_unsupported_options = false;
1006
+ ASSERT_NOK(
1007
+ LoadSharedObject<TestCustomizable>(ignore, "Unknown", nullptr, &shared));
1008
+ ASSERT_NOK(
1009
+ LoadUniqueObject<TestCustomizable>(ignore, "Unknown", nullptr, &unique));
1010
+ ASSERT_NOK(
1011
+ LoadStaticObject<TestCustomizable>(ignore, "Unknown", nullptr, &pointer));
1012
+ ASSERT_EQ(shared.get(), nullptr);
1013
+ ASSERT_EQ(unique.get(), nullptr);
1014
+ ASSERT_EQ(pointer, nullptr);
1015
+ ignore.ignore_unsupported_options = true;
1016
+ ASSERT_OK(
1017
+ LoadSharedObject<TestCustomizable>(ignore, "Unknown", nullptr, &shared));
1018
+ ASSERT_OK(
1019
+ LoadUniqueObject<TestCustomizable>(ignore, "Unknown", nullptr, &unique));
1020
+ ASSERT_OK(
1021
+ LoadStaticObject<TestCustomizable>(ignore, "Unknown", nullptr, &pointer));
1022
+ ASSERT_EQ(shared.get(), nullptr);
1023
+ ASSERT_EQ(unique.get(), nullptr);
1024
+ ASSERT_EQ(pointer, nullptr);
1025
+ ASSERT_OK(LoadSharedObject<TestCustomizable>(ignore, "id=Unknown", nullptr,
1026
+ &shared));
1027
+ ASSERT_OK(LoadUniqueObject<TestCustomizable>(ignore, "id=Unknown", nullptr,
1028
+ &unique));
1029
+ ASSERT_OK(LoadStaticObject<TestCustomizable>(ignore, "id=Unknown", nullptr,
1030
+ &pointer));
1031
+ ASSERT_EQ(shared.get(), nullptr);
1032
+ ASSERT_EQ(unique.get(), nullptr);
1033
+ ASSERT_EQ(pointer, nullptr);
1034
+ ASSERT_OK(LoadSharedObject<TestCustomizable>(ignore, "id=Unknown;option=bad",
1035
+ nullptr, &shared));
1036
+ ASSERT_OK(LoadUniqueObject<TestCustomizable>(ignore, "id=Unknown;option=bad",
1037
+ nullptr, &unique));
1038
+ ASSERT_OK(LoadStaticObject<TestCustomizable>(ignore, "id=Unknown;option=bad",
1039
+ nullptr, &pointer));
1040
+ ASSERT_EQ(shared.get(), nullptr);
1041
+ ASSERT_EQ(unique.get(), nullptr);
1042
+ ASSERT_EQ(pointer, nullptr);
587
1043
  }
588
1044
 
589
1045
  TEST_F(CustomizableTest, FactoryFunctionTest) {
@@ -600,9 +1056,9 @@ TEST_F(CustomizableTest, FactoryFunctionTest) {
600
1056
  ASSERT_NE(pointer, nullptr);
601
1057
  delete pointer;
602
1058
  pointer = nullptr;
603
- ASSERT_OK(TestCustomizable::CreateFromString(ignore, "", &shared));
604
- ASSERT_OK(TestCustomizable::CreateFromString(ignore, "", &unique));
605
- ASSERT_OK(TestCustomizable::CreateFromString(ignore, "", &pointer));
1059
+ ASSERT_OK(TestCustomizable::CreateFromString(ignore, "id=", &shared));
1060
+ ASSERT_OK(TestCustomizable::CreateFromString(ignore, "id=", &unique));
1061
+ ASSERT_OK(TestCustomizable::CreateFromString(ignore, "id=", &pointer));
606
1062
  ASSERT_EQ(shared.get(), nullptr);
607
1063
  ASSERT_EQ(unique.get(), nullptr);
608
1064
  ASSERT_EQ(pointer, nullptr);
@@ -613,11 +1069,1177 @@ TEST_F(CustomizableTest, FactoryFunctionTest) {
613
1069
  ASSERT_EQ(pointer, nullptr);
614
1070
  }
615
1071
 
1072
+ TEST_F(CustomizableTest, URLFactoryTest) {
1073
+ std::unique_ptr<TestCustomizable> unique;
1074
+ config_options_.registry->AddLibrary("URL")->AddFactory<TestCustomizable>(
1075
+ ObjectLibrary::PatternEntry("Z", false).AddSeparator(""),
1076
+ [](const std::string& name, std::unique_ptr<TestCustomizable>* guard,
1077
+ std::string* /* msg */) {
1078
+ guard->reset(new TestCustomizable(name));
1079
+ return guard->get();
1080
+ });
1081
+
1082
+ ConfigOptions ignore = config_options_;
1083
+ ignore.ignore_unsupported_options = false;
1084
+ ignore.ignore_unsupported_options = false;
1085
+ ASSERT_OK(TestCustomizable::CreateFromString(ignore, "Z=1;x=y", &unique));
1086
+ ASSERT_NE(unique, nullptr);
1087
+ ASSERT_EQ(unique->GetId(), "Z=1;x=y");
1088
+ ASSERT_OK(TestCustomizable::CreateFromString(ignore, "Z;x=y", &unique));
1089
+ ASSERT_NE(unique, nullptr);
1090
+ ASSERT_EQ(unique->GetId(), "Z;x=y");
1091
+ unique.reset();
1092
+ ASSERT_OK(TestCustomizable::CreateFromString(ignore, "Z=1?x=y", &unique));
1093
+ ASSERT_NE(unique, nullptr);
1094
+ ASSERT_EQ(unique->GetId(), "Z=1?x=y");
1095
+ }
1096
+
1097
+ TEST_F(CustomizableTest, MutableOptionsTest) {
1098
+ static std::unordered_map<std::string, OptionTypeInfo> mutable_option_info = {
1099
+ {"mutable",
1100
+ OptionTypeInfo::AsCustomSharedPtr<TestCustomizable>(
1101
+ 0, OptionVerificationType::kNormal, OptionTypeFlags::kMutable)}};
1102
+ static std::unordered_map<std::string, OptionTypeInfo> immutable_option_info =
1103
+ {{"immutable",
1104
+ OptionTypeInfo::AsCustomSharedPtr<TestCustomizable>(
1105
+ 0, OptionVerificationType::kNormal, OptionTypeFlags::kAllowNull)}};
1106
+
1107
+ class MutableCustomizable : public Customizable {
1108
+ private:
1109
+ std::shared_ptr<TestCustomizable> mutable_;
1110
+ std::shared_ptr<TestCustomizable> immutable_;
1111
+
1112
+ public:
1113
+ MutableCustomizable() {
1114
+ RegisterOptions("mutable", &mutable_, &mutable_option_info);
1115
+ RegisterOptions("immutable", &immutable_, &immutable_option_info);
1116
+ }
1117
+ const char* Name() const override { return "MutableCustomizable"; }
1118
+ };
1119
+ MutableCustomizable mc, mc2;
1120
+ std::string mismatch;
1121
+ std::string opt_str;
1122
+
1123
+ ConfigOptions options = config_options_;
1124
+ ASSERT_OK(mc.ConfigureOption(options, "mutable", "{id=B;}"));
1125
+ options.mutable_options_only = true;
1126
+ ASSERT_OK(mc.GetOptionString(options, &opt_str));
1127
+ ASSERT_OK(mc2.ConfigureFromString(options, opt_str));
1128
+ ASSERT_TRUE(mc.AreEquivalent(options, &mc2, &mismatch));
1129
+
1130
+ options.mutable_options_only = false;
1131
+ ASSERT_OK(mc.ConfigureOption(options, "immutable", "{id=A; int=10}"));
1132
+ auto* mm = mc.GetOptions<std::shared_ptr<TestCustomizable>>("mutable");
1133
+ auto* im = mc.GetOptions<std::shared_ptr<TestCustomizable>>("immutable");
1134
+ ASSERT_NE(mm, nullptr);
1135
+ ASSERT_NE(mm->get(), nullptr);
1136
+ ASSERT_NE(im, nullptr);
1137
+ ASSERT_NE(im->get(), nullptr);
1138
+
1139
+ // Now only deal with mutable options
1140
+ options.mutable_options_only = true;
1141
+
1142
+ // Setting nested immutable customizable options fails
1143
+ ASSERT_NOK(mc.ConfigureOption(options, "immutable", "{id=B;}"));
1144
+ ASSERT_NOK(mc.ConfigureOption(options, "immutable.id", "B"));
1145
+ ASSERT_NOK(mc.ConfigureOption(options, "immutable.bool", "true"));
1146
+ ASSERT_NOK(mc.ConfigureOption(options, "immutable", "bool=true"));
1147
+ ASSERT_NOK(mc.ConfigureOption(options, "immutable", "{int=11;bool=true}"));
1148
+ auto* im_a = im->get()->GetOptions<AOptions>("A");
1149
+ ASSERT_NE(im_a, nullptr);
1150
+ ASSERT_EQ(im_a->i, 10);
1151
+ ASSERT_EQ(im_a->b, false);
1152
+
1153
+ // Setting nested mutable customizable options succeeds but the object did not
1154
+ // change
1155
+ ASSERT_OK(mc.ConfigureOption(options, "immutable.int", "11"));
1156
+ ASSERT_EQ(im_a->i, 11);
1157
+ ASSERT_EQ(im_a, im->get()->GetOptions<AOptions>("A"));
1158
+
1159
+ // The mutable configurable itself can be changed
1160
+ ASSERT_OK(mc.ConfigureOption(options, "mutable.id", "A"));
1161
+ ASSERT_OK(mc.ConfigureOption(options, "mutable", "A"));
1162
+ ASSERT_OK(mc.ConfigureOption(options, "mutable", "{id=A}"));
1163
+ ASSERT_OK(mc.ConfigureOption(options, "mutable", "{bool=true}"));
1164
+
1165
+ // The Nested options in the mutable object can be changed
1166
+ ASSERT_OK(mc.ConfigureOption(options, "mutable", "{bool=true}"));
1167
+ auto* mm_a = mm->get()->GetOptions<AOptions>("A");
1168
+ ASSERT_EQ(mm_a->b, true);
1169
+ ASSERT_OK(mc.ConfigureOption(options, "mutable", "{int=22;bool=false}"));
1170
+ mm_a = mm->get()->GetOptions<AOptions>("A");
1171
+ ASSERT_EQ(mm_a->i, 22);
1172
+ ASSERT_EQ(mm_a->b, false);
1173
+
1174
+ // Only the mutable options should get serialized
1175
+ options.mutable_options_only = false;
1176
+ ASSERT_OK(mc.GetOptionString(options, &opt_str));
1177
+ ASSERT_OK(mc.ConfigureOption(options, "immutable", "{id=B;}"));
1178
+ options.mutable_options_only = true;
1179
+
1180
+ ASSERT_OK(mc.GetOptionString(options, &opt_str));
1181
+ ASSERT_OK(mc2.ConfigureFromString(options, opt_str));
1182
+ ASSERT_TRUE(mc.AreEquivalent(options, &mc2, &mismatch));
1183
+ options.mutable_options_only = false;
1184
+ ASSERT_FALSE(mc.AreEquivalent(options, &mc2, &mismatch));
1185
+ ASSERT_EQ(mismatch, "immutable");
1186
+ }
1187
+
1188
+ TEST_F(CustomizableTest, CustomManagedObjects) {
1189
+ std::shared_ptr<TestCustomizable> object1, object2;
1190
+ ASSERT_OK(LoadManagedObject<TestCustomizable>(
1191
+ config_options_, "id=A_1;int=1;bool=true", &object1));
1192
+ ASSERT_NE(object1, nullptr);
1193
+ ASSERT_OK(
1194
+ LoadManagedObject<TestCustomizable>(config_options_, "A_1", &object2));
1195
+ ASSERT_EQ(object1, object2);
1196
+ auto* opts = object2->GetOptions<AOptions>("A");
1197
+ ASSERT_NE(opts, nullptr);
1198
+ ASSERT_EQ(opts->i, 1);
1199
+ ASSERT_EQ(opts->b, true);
1200
+ ASSERT_OK(
1201
+ LoadManagedObject<TestCustomizable>(config_options_, "A_2", &object2));
1202
+ ASSERT_NE(object1, object2);
1203
+ object1.reset();
1204
+ ASSERT_OK(LoadManagedObject<TestCustomizable>(
1205
+ config_options_, "id=A_1;int=2;bool=false", &object1));
1206
+ opts = object1->GetOptions<AOptions>("A");
1207
+ ASSERT_NE(opts, nullptr);
1208
+ ASSERT_EQ(opts->i, 2);
1209
+ ASSERT_EQ(opts->b, false);
1210
+ }
1211
+
1212
+ TEST_F(CustomizableTest, CreateManagedObjects) {
1213
+ class ManagedCustomizable : public Customizable {
1214
+ public:
1215
+ static const char* Type() { return "ManagedCustomizable"; }
1216
+ static const char* kClassName() { return "Managed"; }
1217
+ const char* Name() const override { return kClassName(); }
1218
+ std::string GetId() const override { return id_; }
1219
+ ManagedCustomizable() { id_ = GenerateIndividualId(); }
1220
+ static Status CreateFromString(
1221
+ const ConfigOptions& opts, const std::string& value,
1222
+ std::shared_ptr<ManagedCustomizable>* result) {
1223
+ return LoadManagedObject<ManagedCustomizable>(opts, value, result);
1224
+ }
1225
+
1226
+ private:
1227
+ std::string id_;
1228
+ };
1229
+
1230
+ config_options_.registry->AddLibrary("Managed")
1231
+ ->AddFactory<ManagedCustomizable>(
1232
+ ObjectLibrary::PatternEntry::AsIndividualId(
1233
+ ManagedCustomizable::kClassName()),
1234
+ [](const std::string& /*name*/,
1235
+ std::unique_ptr<ManagedCustomizable>* guard,
1236
+ std::string* /* msg */) {
1237
+ guard->reset(new ManagedCustomizable());
1238
+ return guard->get();
1239
+ });
1240
+
1241
+ std::shared_ptr<ManagedCustomizable> mc1, mc2, mc3, obj;
1242
+ // Create a "deadbeef" customizable
1243
+ std::string deadbeef =
1244
+ std::string(ManagedCustomizable::kClassName()) + "@0xdeadbeef#0001";
1245
+ ASSERT_OK(
1246
+ ManagedCustomizable::CreateFromString(config_options_, deadbeef, &mc1));
1247
+ // Create an object with the base/class name
1248
+ ASSERT_OK(ManagedCustomizable::CreateFromString(
1249
+ config_options_, ManagedCustomizable::kClassName(), &mc2));
1250
+ // Creating another with the base name returns a different object
1251
+ ASSERT_OK(ManagedCustomizable::CreateFromString(
1252
+ config_options_, ManagedCustomizable::kClassName(), &mc3));
1253
+ // At this point, there should be 4 managed objects (deadbeef, mc1, 2, and 3)
1254
+ std::vector<std::shared_ptr<ManagedCustomizable>> objects;
1255
+ ASSERT_OK(config_options_.registry->ListManagedObjects(&objects));
1256
+ ASSERT_EQ(objects.size(), 4U);
1257
+ objects.clear();
1258
+ // Three separate object, none of them equal
1259
+ ASSERT_NE(mc1, mc2);
1260
+ ASSERT_NE(mc1, mc3);
1261
+ ASSERT_NE(mc2, mc3);
1262
+
1263
+ // Creating another object with "deadbeef" object
1264
+ ASSERT_OK(
1265
+ ManagedCustomizable::CreateFromString(config_options_, deadbeef, &obj));
1266
+ ASSERT_EQ(mc1, obj);
1267
+ // Create another with the IDs of the instances
1268
+ ASSERT_OK(ManagedCustomizable::CreateFromString(config_options_, mc1->GetId(),
1269
+ &obj));
1270
+ ASSERT_EQ(mc1, obj);
1271
+ ASSERT_OK(ManagedCustomizable::CreateFromString(config_options_, mc2->GetId(),
1272
+ &obj));
1273
+ ASSERT_EQ(mc2, obj);
1274
+ ASSERT_OK(ManagedCustomizable::CreateFromString(config_options_, mc3->GetId(),
1275
+ &obj));
1276
+ ASSERT_EQ(mc3, obj);
1277
+
1278
+ // Now get rid of deadbeef. 2 Objects left (m2+m3)
1279
+ mc1.reset();
1280
+ ASSERT_EQ(
1281
+ config_options_.registry->GetManagedObject<ManagedCustomizable>(deadbeef),
1282
+ nullptr);
1283
+ ASSERT_OK(config_options_.registry->ListManagedObjects(&objects));
1284
+ ASSERT_EQ(objects.size(), 2U);
1285
+ objects.clear();
1286
+
1287
+ // Associate deadbeef with #2
1288
+ ASSERT_OK(config_options_.registry->SetManagedObject(deadbeef, mc2));
1289
+ ASSERT_OK(
1290
+ ManagedCustomizable::CreateFromString(config_options_, deadbeef, &obj));
1291
+ ASSERT_EQ(mc2, obj);
1292
+ obj.reset();
1293
+
1294
+ // Get the ID of mc2 and then reset it. 1 Object left
1295
+ std::string mc2id = mc2->GetId();
1296
+ mc2.reset();
1297
+ ASSERT_EQ(
1298
+ config_options_.registry->GetManagedObject<ManagedCustomizable>(mc2id),
1299
+ nullptr);
1300
+ ASSERT_OK(config_options_.registry->ListManagedObjects(&objects));
1301
+ ASSERT_EQ(objects.size(), 1U);
1302
+ objects.clear();
1303
+
1304
+ // Create another object with the old mc2id.
1305
+ ASSERT_OK(
1306
+ ManagedCustomizable::CreateFromString(config_options_, mc2id, &mc2));
1307
+ ASSERT_OK(
1308
+ ManagedCustomizable::CreateFromString(config_options_, mc2id, &obj));
1309
+ ASSERT_EQ(mc2, obj);
1310
+
1311
+ // For good measure, create another deadbeef object
1312
+ ASSERT_OK(
1313
+ ManagedCustomizable::CreateFromString(config_options_, deadbeef, &mc1));
1314
+ ASSERT_OK(
1315
+ ManagedCustomizable::CreateFromString(config_options_, deadbeef, &obj));
1316
+ ASSERT_EQ(mc1, obj);
1317
+ }
1318
+
1319
+ #endif // !ROCKSDB_LITE
1320
+
1321
+ namespace {
1322
+ class TestSecondaryCache : public SecondaryCache {
1323
+ public:
1324
+ static const char* kClassName() { return "Test"; }
1325
+ const char* Name() const override { return kClassName(); }
1326
+ Status Insert(const Slice& /*key*/, void* /*value*/,
1327
+ const Cache::CacheItemHelper* /*helper*/) override {
1328
+ return Status::NotSupported();
1329
+ }
1330
+ std::unique_ptr<SecondaryCacheResultHandle> Lookup(
1331
+ const Slice& /*key*/, const Cache::CreateCallback& /*create_cb*/,
1332
+ bool /*wait*/, bool& is_in_sec_cache) override {
1333
+ is_in_sec_cache = true;
1334
+ return nullptr;
1335
+ }
1336
+ void Erase(const Slice& /*key*/) override {}
1337
+
1338
+ // Wait for a collection of handles to become ready
1339
+ void WaitAll(std::vector<SecondaryCacheResultHandle*> /*handles*/) override {}
1340
+
1341
+ std::string GetPrintableOptions() const override { return ""; }
1342
+ };
1343
+
1344
+ class TestStatistics : public StatisticsImpl {
1345
+ public:
1346
+ TestStatistics() : StatisticsImpl(nullptr) {}
1347
+ const char* Name() const override { return kClassName(); }
1348
+ static const char* kClassName() { return "Test"; }
1349
+ };
1350
+
1351
+ class TestFlushBlockPolicyFactory : public FlushBlockPolicyFactory {
1352
+ public:
1353
+ TestFlushBlockPolicyFactory() {}
1354
+
1355
+ static const char* kClassName() { return "TestFlushBlockPolicyFactory"; }
1356
+ const char* Name() const override { return kClassName(); }
1357
+
1358
+ FlushBlockPolicy* NewFlushBlockPolicy(
1359
+ const BlockBasedTableOptions& /*table_options*/,
1360
+ const BlockBuilder& /*data_block_builder*/) const override {
1361
+ return nullptr;
1362
+ }
1363
+ };
1364
+
1365
+ class MockSliceTransform : public SliceTransform {
1366
+ public:
1367
+ const char* Name() const override { return kClassName(); }
1368
+ static const char* kClassName() { return "Mock"; }
1369
+
1370
+ Slice Transform(const Slice& /*key*/) const override { return Slice(); }
1371
+
1372
+ bool InDomain(const Slice& /*key*/) const override { return false; }
1373
+
1374
+ bool InRange(const Slice& /*key*/) const override { return false; }
1375
+ };
1376
+
1377
+ class MockMemoryAllocator : public BaseMemoryAllocator {
1378
+ public:
1379
+ static const char* kClassName() { return "MockMemoryAllocator"; }
1380
+ const char* Name() const override { return kClassName(); }
1381
+ };
1382
+
1383
+ #ifndef ROCKSDB_LITE
1384
+ class MockEncryptionProvider : public EncryptionProvider {
1385
+ public:
1386
+ explicit MockEncryptionProvider(const std::string& id) : id_(id) {}
1387
+ static const char* kClassName() { return "Mock"; }
1388
+ const char* Name() const override { return kClassName(); }
1389
+ size_t GetPrefixLength() const override { return 0; }
1390
+ Status CreateNewPrefix(const std::string& /*fname*/, char* /*prefix*/,
1391
+ size_t /*prefixLength*/) const override {
1392
+ return Status::NotSupported();
1393
+ }
1394
+
1395
+ Status AddCipher(const std::string& /*descriptor*/, const char* /*cipher*/,
1396
+ size_t /*len*/, bool /*for_write*/) override {
1397
+ return Status::NotSupported();
1398
+ }
1399
+
1400
+ Status CreateCipherStream(
1401
+ const std::string& /*fname*/, const EnvOptions& /*options*/,
1402
+ Slice& /*prefix*/,
1403
+ std::unique_ptr<BlockAccessCipherStream>* /*result*/) override {
1404
+ return Status::NotSupported();
1405
+ }
1406
+ Status ValidateOptions(const DBOptions& db_opts,
1407
+ const ColumnFamilyOptions& cf_opts) const override {
1408
+ if (EndsWith(id_, "://test")) {
1409
+ return EncryptionProvider::ValidateOptions(db_opts, cf_opts);
1410
+ } else {
1411
+ return Status::InvalidArgument("MockProvider not initialized");
1412
+ }
1413
+ }
1414
+
1415
+ private:
1416
+ std::string id_;
1417
+ };
1418
+
1419
+ class MockCipher : public BlockCipher {
1420
+ public:
1421
+ const char* Name() const override { return "Mock"; }
1422
+ size_t BlockSize() override { return 0; }
1423
+ Status Encrypt(char* /*data*/) override { return Status::NotSupported(); }
1424
+ Status Decrypt(char* data) override { return Encrypt(data); }
1425
+ };
1426
+ #endif // ROCKSDB_LITE
1427
+
1428
+ class DummyFileSystem : public FileSystemWrapper {
1429
+ public:
1430
+ explicit DummyFileSystem(const std::shared_ptr<FileSystem>& t)
1431
+ : FileSystemWrapper(t) {}
1432
+ static const char* kClassName() { return "DummyFileSystem"; }
1433
+ const char* Name() const override { return kClassName(); }
1434
+ };
1435
+
1436
+ #ifndef ROCKSDB_LITE
1437
+
1438
+ #endif // ROCKSDB_LITE
1439
+
1440
+ class MockTablePropertiesCollectorFactory
1441
+ : public TablePropertiesCollectorFactory {
1442
+ private:
1443
+ public:
1444
+ TablePropertiesCollector* CreateTablePropertiesCollector(
1445
+ TablePropertiesCollectorFactory::Context /*context*/) override {
1446
+ return nullptr;
1447
+ }
1448
+ static const char* kClassName() { return "Mock"; }
1449
+ const char* Name() const override { return kClassName(); }
1450
+ };
1451
+
1452
+ class MockSstPartitionerFactory : public SstPartitionerFactory {
1453
+ public:
1454
+ static const char* kClassName() { return "Mock"; }
1455
+ const char* Name() const override { return kClassName(); }
1456
+ std::unique_ptr<SstPartitioner> CreatePartitioner(
1457
+ const SstPartitioner::Context& /* context */) const override {
1458
+ return nullptr;
1459
+ }
1460
+ };
1461
+
1462
+ class MockFileChecksumGenFactory : public FileChecksumGenFactory {
1463
+ public:
1464
+ static const char* kClassName() { return "Mock"; }
1465
+ const char* Name() const override { return kClassName(); }
1466
+ std::unique_ptr<FileChecksumGenerator> CreateFileChecksumGenerator(
1467
+ const FileChecksumGenContext& /*context*/) override {
1468
+ return nullptr;
1469
+ }
1470
+ };
1471
+
1472
+ class MockRateLimiter : public RateLimiter {
1473
+ public:
1474
+ static const char* kClassName() { return "MockRateLimiter"; }
1475
+ const char* Name() const override { return kClassName(); }
1476
+ void SetBytesPerSecond(int64_t /*bytes_per_second*/) override {}
1477
+ int64_t GetBytesPerSecond() const override { return 0; }
1478
+ int64_t GetSingleBurstBytes() const override { return 0; }
1479
+ int64_t GetTotalBytesThrough(const Env::IOPriority /*pri*/) const override {
1480
+ return 0;
1481
+ }
1482
+ int64_t GetTotalRequests(const Env::IOPriority /*pri*/) const override {
1483
+ return 0;
1484
+ }
1485
+ };
1486
+
1487
+ class MockFilterPolicy : public FilterPolicy {
1488
+ public:
1489
+ static const char* kClassName() { return "MockFilterPolicy"; }
1490
+ const char* Name() const override { return kClassName(); }
1491
+ const char* CompatibilityName() const override { return Name(); }
1492
+ FilterBitsBuilder* GetBuilderWithContext(
1493
+ const FilterBuildingContext&) const override {
1494
+ return nullptr;
1495
+ }
1496
+ FilterBitsReader* GetFilterBitsReader(
1497
+ const Slice& /*contents*/) const override {
1498
+ return nullptr;
1499
+ }
1500
+ };
1501
+
1502
+ #ifndef ROCKSDB_LITE
1503
+ static int RegisterLocalObjects(ObjectLibrary& library,
1504
+ const std::string& /*arg*/) {
1505
+ size_t num_types;
1506
+ library.AddFactory<TableFactory>(
1507
+ mock::MockTableFactory::kClassName(),
1508
+ [](const std::string& /*uri*/, std::unique_ptr<TableFactory>* guard,
1509
+ std::string* /* errmsg */) {
1510
+ guard->reset(new mock::MockTableFactory());
1511
+ return guard->get();
1512
+ });
1513
+ library.AddFactory<EventListener>(
1514
+ OnFileDeletionListener::kClassName(),
1515
+ [](const std::string& /*uri*/, std::unique_ptr<EventListener>* guard,
1516
+ std::string* /* errmsg */) {
1517
+ guard->reset(new OnFileDeletionListener());
1518
+ return guard->get();
1519
+ });
1520
+ library.AddFactory<EventListener>(
1521
+ FlushCounterListener::kClassName(),
1522
+ [](const std::string& /*uri*/, std::unique_ptr<EventListener>* guard,
1523
+ std::string* /* errmsg */) {
1524
+ guard->reset(new FlushCounterListener());
1525
+ return guard->get();
1526
+ });
1527
+ // Load any locally defined objects here
1528
+ library.AddFactory<const SliceTransform>(
1529
+ MockSliceTransform::kClassName(),
1530
+ [](const std::string& /*uri*/,
1531
+ std::unique_ptr<const SliceTransform>* guard,
1532
+ std::string* /* errmsg */) {
1533
+ guard->reset(new MockSliceTransform());
1534
+ return guard->get();
1535
+ });
1536
+ library.AddFactory<Statistics>(
1537
+ TestStatistics::kClassName(),
1538
+ [](const std::string& /*uri*/, std::unique_ptr<Statistics>* guard,
1539
+ std::string* /* errmsg */) {
1540
+ guard->reset(new TestStatistics());
1541
+ return guard->get();
1542
+ });
1543
+
1544
+ library.AddFactory<EncryptionProvider>(
1545
+ ObjectLibrary::PatternEntry(MockEncryptionProvider::kClassName(), true)
1546
+ .AddSuffix("://test"),
1547
+ [](const std::string& uri, std::unique_ptr<EncryptionProvider>* guard,
1548
+ std::string* /* errmsg */) {
1549
+ guard->reset(new MockEncryptionProvider(uri));
1550
+ return guard->get();
1551
+ });
1552
+ library.AddFactory<BlockCipher>(
1553
+ "Mock",
1554
+ [](const std::string& /*uri*/, std::unique_ptr<BlockCipher>* guard,
1555
+ std::string* /* errmsg */) {
1556
+ guard->reset(new MockCipher());
1557
+ return guard->get();
1558
+ });
1559
+ library.AddFactory<MemoryAllocator>(
1560
+ MockMemoryAllocator::kClassName(),
1561
+ [](const std::string& /*uri*/, std::unique_ptr<MemoryAllocator>* guard,
1562
+ std::string* /* errmsg */) {
1563
+ guard->reset(new MockMemoryAllocator());
1564
+ return guard->get();
1565
+ });
1566
+ library.AddFactory<FlushBlockPolicyFactory>(
1567
+ TestFlushBlockPolicyFactory::kClassName(),
1568
+ [](const std::string& /*uri*/,
1569
+ std::unique_ptr<FlushBlockPolicyFactory>* guard,
1570
+ std::string* /* errmsg */) {
1571
+ guard->reset(new TestFlushBlockPolicyFactory());
1572
+ return guard->get();
1573
+ });
1574
+
1575
+ library.AddFactory<SecondaryCache>(
1576
+ TestSecondaryCache::kClassName(),
1577
+ [](const std::string& /*uri*/, std::unique_ptr<SecondaryCache>* guard,
1578
+ std::string* /* errmsg */) {
1579
+ guard->reset(new TestSecondaryCache());
1580
+ return guard->get();
1581
+ });
1582
+
1583
+ library.AddFactory<FileSystem>(
1584
+ DummyFileSystem::kClassName(),
1585
+ [](const std::string& /*uri*/, std::unique_ptr<FileSystem>* guard,
1586
+ std::string* /* errmsg */) {
1587
+ guard->reset(new DummyFileSystem(nullptr));
1588
+ return guard->get();
1589
+ });
1590
+
1591
+ library.AddFactory<SstPartitionerFactory>(
1592
+ MockSstPartitionerFactory::kClassName(),
1593
+ [](const std::string& /*uri*/,
1594
+ std::unique_ptr<SstPartitionerFactory>* guard,
1595
+ std::string* /* errmsg */) {
1596
+ guard->reset(new MockSstPartitionerFactory());
1597
+ return guard->get();
1598
+ });
1599
+
1600
+ library.AddFactory<FileChecksumGenFactory>(
1601
+ MockFileChecksumGenFactory::kClassName(),
1602
+ [](const std::string& /*uri*/,
1603
+ std::unique_ptr<FileChecksumGenFactory>* guard,
1604
+ std::string* /* errmsg */) {
1605
+ guard->reset(new MockFileChecksumGenFactory());
1606
+ return guard->get();
1607
+ });
1608
+
1609
+ library.AddFactory<TablePropertiesCollectorFactory>(
1610
+ MockTablePropertiesCollectorFactory::kClassName(),
1611
+ [](const std::string& /*uri*/,
1612
+ std::unique_ptr<TablePropertiesCollectorFactory>* guard,
1613
+ std::string* /* errmsg */) {
1614
+ guard->reset(new MockTablePropertiesCollectorFactory());
1615
+ return guard->get();
1616
+ });
1617
+
1618
+ library.AddFactory<RateLimiter>(
1619
+ MockRateLimiter::kClassName(),
1620
+ [](const std::string& /*uri*/, std::unique_ptr<RateLimiter>* guard,
1621
+ std::string* /* errmsg */) {
1622
+ guard->reset(new MockRateLimiter());
1623
+ return guard->get();
1624
+ });
1625
+
1626
+ library.AddFactory<const FilterPolicy>(
1627
+ MockFilterPolicy::kClassName(),
1628
+ [](const std::string& /*uri*/, std::unique_ptr<const FilterPolicy>* guard,
1629
+ std::string* /* errmsg */) {
1630
+ guard->reset(new MockFilterPolicy());
1631
+ return guard->get();
1632
+ });
1633
+
1634
+ return static_cast<int>(library.GetFactoryCount(&num_types));
1635
+ }
1636
+ #endif // !ROCKSDB_LITE
1637
+ } // namespace
1638
+
1639
+ class LoadCustomizableTest : public testing::Test {
1640
+ public:
1641
+ LoadCustomizableTest() {
1642
+ config_options_.ignore_unsupported_options = false;
1643
+ config_options_.invoke_prepare_options = false;
1644
+ }
1645
+ bool RegisterTests(const std::string& arg) {
1646
+ #ifndef ROCKSDB_LITE
1647
+ config_options_.registry->AddLibrary("custom-tests",
1648
+ test::RegisterTestObjects, arg);
1649
+ config_options_.registry->AddLibrary("local-tests", RegisterLocalObjects,
1650
+ arg);
1651
+ return true;
1652
+ #else
1653
+ (void)arg;
1654
+ return false;
616
1655
  #endif // !ROCKSDB_LITE
1656
+ }
1657
+
1658
+ protected:
1659
+ DBOptions db_opts_;
1660
+ ColumnFamilyOptions cf_opts_;
1661
+ ConfigOptions config_options_;
1662
+ };
1663
+
1664
+ TEST_F(LoadCustomizableTest, LoadTableFactoryTest) {
1665
+ std::shared_ptr<TableFactory> factory;
1666
+ ASSERT_NOK(TableFactory::CreateFromString(
1667
+ config_options_, mock::MockTableFactory::kClassName(), &factory));
1668
+ ASSERT_OK(TableFactory::CreateFromString(
1669
+ config_options_, TableFactory::kBlockBasedTableName(), &factory));
1670
+ ASSERT_NE(factory, nullptr);
1671
+ ASSERT_STREQ(factory->Name(), TableFactory::kBlockBasedTableName());
1672
+ #ifndef ROCKSDB_LITE
1673
+ std::string opts_str = "table_factory=";
1674
+ ASSERT_OK(GetColumnFamilyOptionsFromString(
1675
+ config_options_, cf_opts_,
1676
+ opts_str + TableFactory::kBlockBasedTableName(), &cf_opts_));
1677
+ ASSERT_NE(cf_opts_.table_factory.get(), nullptr);
1678
+ ASSERT_STREQ(cf_opts_.table_factory->Name(),
1679
+ TableFactory::kBlockBasedTableName());
1680
+ #endif // ROCKSDB_LITE
1681
+ if (RegisterTests("Test")) {
1682
+ ASSERT_OK(TableFactory::CreateFromString(
1683
+ config_options_, mock::MockTableFactory::kClassName(), &factory));
1684
+ ASSERT_NE(factory, nullptr);
1685
+ ASSERT_STREQ(factory->Name(), mock::MockTableFactory::kClassName());
1686
+ #ifndef ROCKSDB_LITE
1687
+ ASSERT_OK(GetColumnFamilyOptionsFromString(
1688
+ config_options_, cf_opts_,
1689
+ opts_str + mock::MockTableFactory::kClassName(), &cf_opts_));
1690
+ ASSERT_NE(cf_opts_.table_factory.get(), nullptr);
1691
+ ASSERT_STREQ(cf_opts_.table_factory->Name(),
1692
+ mock::MockTableFactory::kClassName());
1693
+ #endif // ROCKSDB_LITE
1694
+ }
1695
+ }
1696
+
1697
+ TEST_F(LoadCustomizableTest, LoadFileSystemTest) {
1698
+ ColumnFamilyOptions cf_opts;
1699
+ std::shared_ptr<FileSystem> result;
1700
+ ASSERT_NOK(FileSystem::CreateFromString(
1701
+ config_options_, DummyFileSystem::kClassName(), &result));
1702
+ ASSERT_OK(FileSystem::CreateFromString(config_options_,
1703
+ FileSystem::kDefaultName(), &result));
1704
+ ASSERT_NE(result, nullptr);
1705
+ ASSERT_TRUE(result->IsInstanceOf(FileSystem::kDefaultName()));
1706
+ if (RegisterTests("Test")) {
1707
+ ASSERT_OK(FileSystem::CreateFromString(
1708
+ config_options_, DummyFileSystem::kClassName(), &result));
1709
+ ASSERT_NE(result, nullptr);
1710
+ ASSERT_STREQ(result->Name(), DummyFileSystem::kClassName());
1711
+ ASSERT_FALSE(result->IsInstanceOf(FileSystem::kDefaultName()));
1712
+ }
1713
+ }
1714
+
1715
+ TEST_F(LoadCustomizableTest, LoadSecondaryCacheTest) {
1716
+ std::shared_ptr<SecondaryCache> result;
1717
+ ASSERT_NOK(SecondaryCache::CreateFromString(
1718
+ config_options_, TestSecondaryCache::kClassName(), &result));
1719
+ if (RegisterTests("Test")) {
1720
+ ASSERT_OK(SecondaryCache::CreateFromString(
1721
+ config_options_, TestSecondaryCache::kClassName(), &result));
1722
+ ASSERT_NE(result, nullptr);
1723
+ ASSERT_STREQ(result->Name(), TestSecondaryCache::kClassName());
1724
+ }
1725
+ }
1726
+
1727
+ #ifndef ROCKSDB_LITE
1728
+ TEST_F(LoadCustomizableTest, LoadSstPartitionerFactoryTest) {
1729
+ std::shared_ptr<SstPartitionerFactory> factory;
1730
+ ASSERT_NOK(SstPartitionerFactory::CreateFromString(config_options_, "Mock",
1731
+ &factory));
1732
+ ASSERT_OK(SstPartitionerFactory::CreateFromString(
1733
+ config_options_, SstPartitionerFixedPrefixFactory::kClassName(),
1734
+ &factory));
1735
+ ASSERT_NE(factory, nullptr);
1736
+ ASSERT_STREQ(factory->Name(), SstPartitionerFixedPrefixFactory::kClassName());
1737
+
1738
+ if (RegisterTests("Test")) {
1739
+ ASSERT_OK(SstPartitionerFactory::CreateFromString(config_options_, "Mock",
1740
+ &factory));
1741
+ ASSERT_NE(factory, nullptr);
1742
+ ASSERT_STREQ(factory->Name(), "Mock");
1743
+ }
1744
+ }
1745
+ #endif // ROCKSDB_LITE
1746
+
1747
+ TEST_F(LoadCustomizableTest, LoadChecksumGenFactoryTest) {
1748
+ std::shared_ptr<FileChecksumGenFactory> factory;
1749
+ ASSERT_NOK(FileChecksumGenFactory::CreateFromString(config_options_, "Mock",
1750
+ &factory));
1751
+ ASSERT_OK(FileChecksumGenFactory::CreateFromString(
1752
+ config_options_, FileChecksumGenCrc32cFactory::kClassName(), &factory));
1753
+ ASSERT_NE(factory, nullptr);
1754
+ ASSERT_STREQ(factory->Name(), FileChecksumGenCrc32cFactory::kClassName());
1755
+
1756
+ if (RegisterTests("Test")) {
1757
+ ASSERT_OK(FileChecksumGenFactory::CreateFromString(config_options_, "Mock",
1758
+ &factory));
1759
+ ASSERT_NE(factory, nullptr);
1760
+ ASSERT_STREQ(factory->Name(), "Mock");
1761
+ }
1762
+ }
1763
+
1764
+ TEST_F(LoadCustomizableTest, LoadTablePropertiesCollectorFactoryTest) {
1765
+ std::shared_ptr<TablePropertiesCollectorFactory> factory;
1766
+ ASSERT_NOK(TablePropertiesCollectorFactory::CreateFromString(
1767
+ config_options_, MockTablePropertiesCollectorFactory::kClassName(),
1768
+ &factory));
1769
+ if (RegisterTests("Test")) {
1770
+ ASSERT_OK(TablePropertiesCollectorFactory::CreateFromString(
1771
+ config_options_, MockTablePropertiesCollectorFactory::kClassName(),
1772
+ &factory));
1773
+ ASSERT_NE(factory, nullptr);
1774
+ ASSERT_STREQ(factory->Name(),
1775
+ MockTablePropertiesCollectorFactory::kClassName());
1776
+ }
1777
+ }
1778
+
1779
+ TEST_F(LoadCustomizableTest, LoadComparatorTest) {
1780
+ const Comparator* bytewise = BytewiseComparator();
1781
+ const Comparator* reverse = ReverseBytewiseComparator();
1782
+
1783
+ const Comparator* result = nullptr;
1784
+ ASSERT_NOK(Comparator::CreateFromString(
1785
+ config_options_, test::SimpleSuffixReverseComparator::kClassName(),
1786
+ &result));
1787
+ ASSERT_OK(
1788
+ Comparator::CreateFromString(config_options_, bytewise->Name(), &result));
1789
+ ASSERT_EQ(result, bytewise);
1790
+ ASSERT_OK(
1791
+ Comparator::CreateFromString(config_options_, reverse->Name(), &result));
1792
+ ASSERT_EQ(result, reverse);
1793
+
1794
+ if (RegisterTests("Test")) {
1795
+ ASSERT_OK(Comparator::CreateFromString(
1796
+ config_options_, test::SimpleSuffixReverseComparator::kClassName(),
1797
+ &result));
1798
+ ASSERT_NE(result, nullptr);
1799
+ ASSERT_STREQ(result->Name(),
1800
+ test::SimpleSuffixReverseComparator::kClassName());
1801
+ }
1802
+ }
1803
+
1804
+ TEST_F(LoadCustomizableTest, LoadSliceTransformFactoryTest) {
1805
+ std::shared_ptr<const SliceTransform> result;
1806
+ ASSERT_NOK(
1807
+ SliceTransform::CreateFromString(config_options_, "Mock", &result));
1808
+ ASSERT_OK(
1809
+ SliceTransform::CreateFromString(config_options_, "fixed:16", &result));
1810
+ ASSERT_NE(result.get(), nullptr);
1811
+ ASSERT_TRUE(result->IsInstanceOf("fixed"));
1812
+ ASSERT_OK(SliceTransform::CreateFromString(
1813
+ config_options_, "rocksdb.FixedPrefix.22", &result));
1814
+ ASSERT_NE(result.get(), nullptr);
1815
+ ASSERT_TRUE(result->IsInstanceOf("fixed"));
1816
+
1817
+ ASSERT_OK(
1818
+ SliceTransform::CreateFromString(config_options_, "capped:16", &result));
1819
+ ASSERT_NE(result.get(), nullptr);
1820
+ ASSERT_TRUE(result->IsInstanceOf("capped"));
1821
+
1822
+ ASSERT_OK(SliceTransform::CreateFromString(
1823
+ config_options_, "rocksdb.CappedPrefix.11", &result));
1824
+ ASSERT_NE(result.get(), nullptr);
1825
+ ASSERT_TRUE(result->IsInstanceOf("capped"));
1826
+
1827
+ if (RegisterTests("Test")) {
1828
+ ASSERT_OK(
1829
+ SliceTransform::CreateFromString(config_options_, "Mock", &result));
1830
+ ASSERT_NE(result, nullptr);
1831
+ ASSERT_STREQ(result->Name(), "Mock");
1832
+ }
1833
+ }
1834
+
1835
+ TEST_F(LoadCustomizableTest, LoadStatisticsTest) {
1836
+ std::shared_ptr<Statistics> stats;
1837
+ ASSERT_NOK(Statistics::CreateFromString(
1838
+ config_options_, TestStatistics::kClassName(), &stats));
1839
+ ASSERT_OK(
1840
+ Statistics::CreateFromString(config_options_, "BasicStatistics", &stats));
1841
+ ASSERT_NE(stats, nullptr);
1842
+ ASSERT_EQ(stats->Name(), std::string("BasicStatistics"));
1843
+ #ifndef ROCKSDB_LITE
1844
+ ASSERT_NOK(GetDBOptionsFromString(config_options_, db_opts_,
1845
+ "statistics=Test", &db_opts_));
1846
+ ASSERT_OK(GetDBOptionsFromString(config_options_, db_opts_,
1847
+ "statistics=BasicStatistics", &db_opts_));
1848
+ ASSERT_NE(db_opts_.statistics, nullptr);
1849
+ ASSERT_STREQ(db_opts_.statistics->Name(), "BasicStatistics");
1850
+
1851
+ if (RegisterTests("test")) {
1852
+ ASSERT_OK(Statistics::CreateFromString(
1853
+ config_options_, TestStatistics::kClassName(), &stats));
1854
+ ASSERT_NE(stats, nullptr);
1855
+ ASSERT_STREQ(stats->Name(), TestStatistics::kClassName());
1856
+
1857
+ ASSERT_OK(GetDBOptionsFromString(config_options_, db_opts_,
1858
+ "statistics=Test", &db_opts_));
1859
+ ASSERT_NE(db_opts_.statistics, nullptr);
1860
+ ASSERT_STREQ(db_opts_.statistics->Name(), TestStatistics::kClassName());
1861
+
1862
+ ASSERT_OK(GetDBOptionsFromString(
1863
+ config_options_, db_opts_, "statistics={id=Test;inner=BasicStatistics}",
1864
+ &db_opts_));
1865
+ ASSERT_NE(db_opts_.statistics, nullptr);
1866
+ ASSERT_STREQ(db_opts_.statistics->Name(), TestStatistics::kClassName());
1867
+ auto* inner = db_opts_.statistics->GetOptions<std::shared_ptr<Statistics>>(
1868
+ "StatisticsOptions");
1869
+ ASSERT_NE(inner, nullptr);
1870
+ ASSERT_NE(inner->get(), nullptr);
1871
+ ASSERT_STREQ(inner->get()->Name(), "BasicStatistics");
1872
+
1873
+ ASSERT_OK(Statistics::CreateFromString(
1874
+ config_options_, "id=BasicStatistics;inner=Test", &stats));
1875
+ ASSERT_NE(stats, nullptr);
1876
+ ASSERT_STREQ(stats->Name(), "BasicStatistics");
1877
+ inner = stats->GetOptions<std::shared_ptr<Statistics>>("StatisticsOptions");
1878
+ ASSERT_NE(inner, nullptr);
1879
+ ASSERT_NE(inner->get(), nullptr);
1880
+ ASSERT_STREQ(inner->get()->Name(), TestStatistics::kClassName());
1881
+ }
1882
+ #endif
1883
+ }
1884
+
1885
+ TEST_F(LoadCustomizableTest, LoadMemTableRepFactoryTest) {
1886
+ std::unique_ptr<MemTableRepFactory> result;
1887
+ ASSERT_NOK(MemTableRepFactory::CreateFromString(
1888
+ config_options_, "SpecialSkipListFactory", &result));
1889
+ ASSERT_OK(MemTableRepFactory::CreateFromString(
1890
+ config_options_, SkipListFactory::kClassName(), &result));
1891
+ ASSERT_NE(result.get(), nullptr);
1892
+ ASSERT_TRUE(result->IsInstanceOf(SkipListFactory::kClassName()));
1893
+
1894
+ if (RegisterTests("Test")) {
1895
+ ASSERT_OK(MemTableRepFactory::CreateFromString(
1896
+ config_options_, "SpecialSkipListFactory", &result));
1897
+ ASSERT_NE(result, nullptr);
1898
+ ASSERT_STREQ(result->Name(), "SpecialSkipListFactory");
1899
+ }
1900
+ }
1901
+
1902
+ TEST_F(LoadCustomizableTest, LoadMergeOperatorTest) {
1903
+ std::shared_ptr<MergeOperator> result;
1904
+
1905
+ ASSERT_NOK(
1906
+ MergeOperator::CreateFromString(config_options_, "Changling", &result));
1907
+ //**TODO: MJR: Use the constants when these names are in public classes
1908
+ ASSERT_OK(MergeOperator::CreateFromString(config_options_, "put", &result));
1909
+ ASSERT_NE(result, nullptr);
1910
+ ASSERT_STREQ(result->Name(), "PutOperator");
1911
+ ASSERT_OK(
1912
+ MergeOperator::CreateFromString(config_options_, "PutOperator", &result));
1913
+ ASSERT_NE(result, nullptr);
1914
+ ASSERT_STREQ(result->Name(), "PutOperator");
1915
+ ASSERT_OK(
1916
+ MergeOperator::CreateFromString(config_options_, "put_v1", &result));
1917
+ ASSERT_NE(result, nullptr);
1918
+ ASSERT_STREQ(result->Name(), "PutOperator");
1919
+
1920
+ ASSERT_OK(
1921
+ MergeOperator::CreateFromString(config_options_, "uint64add", &result));
1922
+ ASSERT_NE(result, nullptr);
1923
+ ASSERT_STREQ(result->Name(), "UInt64AddOperator");
1924
+ ASSERT_OK(MergeOperator::CreateFromString(config_options_,
1925
+ "UInt64AddOperator", &result));
1926
+ ASSERT_NE(result, nullptr);
1927
+ ASSERT_STREQ(result->Name(), "UInt64AddOperator");
1928
+
1929
+ ASSERT_OK(MergeOperator::CreateFromString(config_options_, "max", &result));
1930
+ ASSERT_NE(result, nullptr);
1931
+ ASSERT_STREQ(result->Name(), "MaxOperator");
1932
+ ASSERT_OK(
1933
+ MergeOperator::CreateFromString(config_options_, "MaxOperator", &result));
1934
+ ASSERT_NE(result, nullptr);
1935
+ ASSERT_STREQ(result->Name(), "MaxOperator");
1936
+ #ifndef ROCKSDB_LITE
1937
+ ASSERT_OK(MergeOperator::CreateFromString(
1938
+ config_options_, StringAppendOperator::kNickName(), &result));
1939
+ ASSERT_NE(result, nullptr);
1940
+ ASSERT_STREQ(result->Name(), StringAppendOperator::kClassName());
1941
+ ASSERT_OK(MergeOperator::CreateFromString(
1942
+ config_options_, StringAppendOperator::kClassName(), &result));
1943
+ ASSERT_NE(result, nullptr);
1944
+ ASSERT_STREQ(result->Name(), StringAppendOperator::kClassName());
1945
+
1946
+ ASSERT_OK(MergeOperator::CreateFromString(
1947
+ config_options_, StringAppendTESTOperator::kNickName(), &result));
1948
+ ASSERT_NE(result, nullptr);
1949
+ ASSERT_STREQ(result->Name(), StringAppendTESTOperator::kClassName());
1950
+ ASSERT_OK(MergeOperator::CreateFromString(
1951
+ config_options_, StringAppendTESTOperator::kClassName(), &result));
1952
+ ASSERT_NE(result, nullptr);
1953
+ ASSERT_STREQ(result->Name(), StringAppendTESTOperator::kClassName());
1954
+
1955
+ ASSERT_OK(MergeOperator::CreateFromString(config_options_,
1956
+ SortList::kNickName(), &result));
1957
+ ASSERT_NE(result, nullptr);
1958
+ ASSERT_STREQ(result->Name(), SortList::kClassName());
1959
+ ASSERT_OK(MergeOperator::CreateFromString(config_options_,
1960
+ SortList::kClassName(), &result));
1961
+ ASSERT_NE(result, nullptr);
1962
+ ASSERT_STREQ(result->Name(), SortList::kClassName());
1963
+
1964
+ ASSERT_OK(MergeOperator::CreateFromString(
1965
+ config_options_, BytesXOROperator::kNickName(), &result));
1966
+ ASSERT_NE(result, nullptr);
1967
+ ASSERT_STREQ(result->Name(), BytesXOROperator::kClassName());
1968
+ ASSERT_OK(MergeOperator::CreateFromString(
1969
+ config_options_, BytesXOROperator::kClassName(), &result));
1970
+ ASSERT_NE(result, nullptr);
1971
+ ASSERT_STREQ(result->Name(), BytesXOROperator::kClassName());
1972
+ #endif // ROCKSDB_LITE
1973
+ ASSERT_NOK(
1974
+ MergeOperator::CreateFromString(config_options_, "Changling", &result));
1975
+ if (RegisterTests("Test")) {
1976
+ ASSERT_OK(
1977
+ MergeOperator::CreateFromString(config_options_, "Changling", &result));
1978
+ ASSERT_NE(result, nullptr);
1979
+ ASSERT_STREQ(result->Name(), "ChanglingMergeOperator");
1980
+ }
1981
+ }
1982
+
1983
+ TEST_F(LoadCustomizableTest, LoadCompactionFilterFactoryTest) {
1984
+ std::shared_ptr<CompactionFilterFactory> result;
1985
+
1986
+ ASSERT_NOK(CompactionFilterFactory::CreateFromString(config_options_,
1987
+ "Changling", &result));
1988
+ if (RegisterTests("Test")) {
1989
+ ASSERT_OK(CompactionFilterFactory::CreateFromString(config_options_,
1990
+ "Changling", &result));
1991
+ ASSERT_NE(result, nullptr);
1992
+ ASSERT_STREQ(result->Name(), "ChanglingCompactionFilterFactory");
1993
+ }
1994
+ }
1995
+
1996
+ TEST_F(LoadCustomizableTest, LoadCompactionFilterTest) {
1997
+ const CompactionFilter* result = nullptr;
1998
+
1999
+ ASSERT_NOK(CompactionFilter::CreateFromString(config_options_, "Changling",
2000
+ &result));
2001
+ #ifndef ROCKSDB_LITE
2002
+ ASSERT_OK(CompactionFilter::CreateFromString(
2003
+ config_options_, RemoveEmptyValueCompactionFilter::kClassName(),
2004
+ &result));
2005
+ ASSERT_NE(result, nullptr);
2006
+ ASSERT_STREQ(result->Name(), RemoveEmptyValueCompactionFilter::kClassName());
2007
+ delete result;
2008
+ result = nullptr;
2009
+ if (RegisterTests("Test")) {
2010
+ ASSERT_OK(CompactionFilter::CreateFromString(config_options_, "Changling",
2011
+ &result));
2012
+ ASSERT_NE(result, nullptr);
2013
+ ASSERT_STREQ(result->Name(), "ChanglingCompactionFilter");
2014
+ delete result;
2015
+ }
2016
+ #endif // ROCKSDB_LITE
2017
+ }
2018
+
2019
+ #ifndef ROCKSDB_LITE
2020
+ TEST_F(LoadCustomizableTest, LoadEventListenerTest) {
2021
+ std::shared_ptr<EventListener> result;
2022
+
2023
+ ASSERT_NOK(EventListener::CreateFromString(
2024
+ config_options_, OnFileDeletionListener::kClassName(), &result));
2025
+ ASSERT_NOK(EventListener::CreateFromString(
2026
+ config_options_, FlushCounterListener::kClassName(), &result));
2027
+ if (RegisterTests("Test")) {
2028
+ ASSERT_OK(EventListener::CreateFromString(
2029
+ config_options_, OnFileDeletionListener::kClassName(), &result));
2030
+ ASSERT_NE(result, nullptr);
2031
+ ASSERT_STREQ(result->Name(), OnFileDeletionListener::kClassName());
2032
+ ASSERT_OK(EventListener::CreateFromString(
2033
+ config_options_, FlushCounterListener::kClassName(), &result));
2034
+ ASSERT_NE(result, nullptr);
2035
+ ASSERT_STREQ(result->Name(), FlushCounterListener::kClassName());
2036
+ }
2037
+ }
2038
+
2039
+ TEST_F(LoadCustomizableTest, LoadEncryptionProviderTest) {
2040
+ std::shared_ptr<EncryptionProvider> result;
2041
+ ASSERT_NOK(
2042
+ EncryptionProvider::CreateFromString(config_options_, "Mock", &result));
2043
+ ASSERT_OK(
2044
+ EncryptionProvider::CreateFromString(config_options_, "CTR", &result));
2045
+ ASSERT_NE(result, nullptr);
2046
+ ASSERT_STREQ(result->Name(), "CTR");
2047
+ ASSERT_NOK(result->ValidateOptions(db_opts_, cf_opts_));
2048
+ ASSERT_OK(EncryptionProvider::CreateFromString(config_options_, "CTR://test",
2049
+ &result));
2050
+ ASSERT_NE(result, nullptr);
2051
+ ASSERT_STREQ(result->Name(), "CTR");
2052
+ ASSERT_OK(result->ValidateOptions(db_opts_, cf_opts_));
2053
+
2054
+ if (RegisterTests("Test")) {
2055
+ ASSERT_OK(
2056
+ EncryptionProvider::CreateFromString(config_options_, "Mock", &result));
2057
+ ASSERT_NE(result, nullptr);
2058
+ ASSERT_STREQ(result->Name(), "Mock");
2059
+ ASSERT_OK(EncryptionProvider::CreateFromString(config_options_,
2060
+ "Mock://test", &result));
2061
+ ASSERT_NE(result, nullptr);
2062
+ ASSERT_STREQ(result->Name(), "Mock");
2063
+ ASSERT_OK(result->ValidateOptions(db_opts_, cf_opts_));
2064
+ }
2065
+ }
2066
+
2067
+ TEST_F(LoadCustomizableTest, LoadEncryptionCipherTest) {
2068
+ std::shared_ptr<BlockCipher> result;
2069
+ ASSERT_NOK(BlockCipher::CreateFromString(config_options_, "Mock", &result));
2070
+ ASSERT_OK(BlockCipher::CreateFromString(config_options_, "ROT13", &result));
2071
+ ASSERT_NE(result, nullptr);
2072
+ ASSERT_STREQ(result->Name(), "ROT13");
2073
+ if (RegisterTests("Test")) {
2074
+ ASSERT_OK(BlockCipher::CreateFromString(config_options_, "Mock", &result));
2075
+ ASSERT_NE(result, nullptr);
2076
+ ASSERT_STREQ(result->Name(), "Mock");
2077
+ }
2078
+ }
2079
+ #endif // !ROCKSDB_LITE
2080
+
2081
+ TEST_F(LoadCustomizableTest, LoadSystemClockTest) {
2082
+ std::shared_ptr<SystemClock> result;
2083
+ ASSERT_NOK(SystemClock::CreateFromString(
2084
+ config_options_, MockSystemClock::kClassName(), &result));
2085
+ ASSERT_OK(SystemClock::CreateFromString(
2086
+ config_options_, SystemClock::kDefaultName(), &result));
2087
+ ASSERT_NE(result, nullptr);
2088
+ ASSERT_TRUE(result->IsInstanceOf(SystemClock::kDefaultName()));
2089
+ if (RegisterTests("Test")) {
2090
+ ASSERT_OK(SystemClock::CreateFromString(
2091
+ config_options_, MockSystemClock::kClassName(), &result));
2092
+ ASSERT_NE(result, nullptr);
2093
+ ASSERT_STREQ(result->Name(), MockSystemClock::kClassName());
2094
+ }
2095
+ }
2096
+
2097
+ TEST_F(LoadCustomizableTest, LoadMemoryAllocatorTest) {
2098
+ std::shared_ptr<MemoryAllocator> result;
2099
+ ASSERT_NOK(MemoryAllocator::CreateFromString(
2100
+ config_options_, MockMemoryAllocator::kClassName(), &result));
2101
+ ASSERT_OK(MemoryAllocator::CreateFromString(
2102
+ config_options_, DefaultMemoryAllocator::kClassName(), &result));
2103
+ ASSERT_NE(result, nullptr);
2104
+ ASSERT_STREQ(result->Name(), DefaultMemoryAllocator::kClassName());
2105
+ if (RegisterTests("Test")) {
2106
+ ASSERT_OK(MemoryAllocator::CreateFromString(
2107
+ config_options_, MockMemoryAllocator::kClassName(), &result));
2108
+ ASSERT_NE(result, nullptr);
2109
+ ASSERT_STREQ(result->Name(), MockMemoryAllocator::kClassName());
2110
+ }
2111
+ }
2112
+
2113
+ TEST_F(LoadCustomizableTest, LoadRateLimiterTest) {
2114
+ std::shared_ptr<RateLimiter> result;
2115
+ ASSERT_NOK(RateLimiter::CreateFromString(
2116
+ config_options_, MockRateLimiter::kClassName(), &result));
2117
+ ASSERT_OK(RateLimiter::CreateFromString(
2118
+ config_options_, std::string(GenericRateLimiter::kClassName()) + ":1234",
2119
+ &result));
2120
+ ASSERT_NE(result, nullptr);
2121
+ #ifndef ROCKSDB_LITE
2122
+ ASSERT_OK(RateLimiter::CreateFromString(
2123
+ config_options_, GenericRateLimiter::kClassName(), &result));
2124
+ ASSERT_NE(result, nullptr);
2125
+ ASSERT_OK(GetDBOptionsFromString(
2126
+ config_options_, db_opts_,
2127
+ std::string("rate_limiter=") + GenericRateLimiter::kClassName(),
2128
+ &db_opts_));
2129
+ ASSERT_NE(db_opts_.rate_limiter, nullptr);
2130
+ if (RegisterTests("Test")) {
2131
+ ASSERT_OK(RateLimiter::CreateFromString(
2132
+ config_options_, MockRateLimiter::kClassName(), &result));
2133
+ ASSERT_NE(result, nullptr);
2134
+ ASSERT_OK(GetDBOptionsFromString(
2135
+ config_options_, db_opts_,
2136
+ std::string("rate_limiter=") + MockRateLimiter::kClassName(),
2137
+ &db_opts_));
2138
+ ASSERT_NE(db_opts_.rate_limiter, nullptr);
2139
+ }
2140
+ #endif // ROCKSDB_LITE
2141
+ }
2142
+
2143
+ TEST_F(LoadCustomizableTest, LoadFilterPolicyTest) {
2144
+ std::shared_ptr<TableFactory> table;
2145
+ std::shared_ptr<const FilterPolicy> result;
2146
+ ASSERT_NOK(FilterPolicy::CreateFromString(
2147
+ config_options_, MockFilterPolicy::kClassName(), &result));
2148
+
2149
+ ASSERT_OK(FilterPolicy::CreateFromString(config_options_, "", &result));
2150
+ ASSERT_EQ(result, nullptr);
2151
+ ASSERT_OK(FilterPolicy::CreateFromString(
2152
+ config_options_, ReadOnlyBuiltinFilterPolicy::kClassName(), &result));
2153
+ ASSERT_NE(result, nullptr);
2154
+ ASSERT_STREQ(result->Name(), ReadOnlyBuiltinFilterPolicy::kClassName());
2155
+
2156
+ #ifndef ROCKSDB_LITE
2157
+ std::string table_opts = "id=BlockBasedTable; filter_policy=";
2158
+ ASSERT_OK(TableFactory::CreateFromString(config_options_,
2159
+ table_opts + "nullptr", &table));
2160
+ ASSERT_NE(table.get(), nullptr);
2161
+ auto bbto = table->GetOptions<BlockBasedTableOptions>();
2162
+ ASSERT_NE(bbto, nullptr);
2163
+ ASSERT_EQ(bbto->filter_policy.get(), nullptr);
2164
+ ASSERT_OK(TableFactory::CreateFromString(
2165
+ config_options_, table_opts + ReadOnlyBuiltinFilterPolicy::kClassName(),
2166
+ &table));
2167
+ bbto = table->GetOptions<BlockBasedTableOptions>();
2168
+ ASSERT_NE(bbto, nullptr);
2169
+ ASSERT_NE(bbto->filter_policy.get(), nullptr);
2170
+ ASSERT_STREQ(bbto->filter_policy->Name(),
2171
+ ReadOnlyBuiltinFilterPolicy::kClassName());
2172
+ ASSERT_OK(TableFactory::CreateFromString(
2173
+ config_options_, table_opts + MockFilterPolicy::kClassName(), &table));
2174
+ bbto = table->GetOptions<BlockBasedTableOptions>();
2175
+ ASSERT_NE(bbto, nullptr);
2176
+ ASSERT_EQ(bbto->filter_policy.get(), nullptr);
2177
+ if (RegisterTests("Test")) {
2178
+ ASSERT_OK(FilterPolicy::CreateFromString(
2179
+ config_options_, MockFilterPolicy::kClassName(), &result));
2180
+ ASSERT_NE(result, nullptr);
2181
+ ASSERT_STREQ(result->Name(), MockFilterPolicy::kClassName());
2182
+ ASSERT_OK(TableFactory::CreateFromString(
2183
+ config_options_, table_opts + MockFilterPolicy::kClassName(), &table));
2184
+ bbto = table->GetOptions<BlockBasedTableOptions>();
2185
+ ASSERT_NE(bbto, nullptr);
2186
+ ASSERT_NE(bbto->filter_policy.get(), nullptr);
2187
+ ASSERT_STREQ(bbto->filter_policy->Name(), MockFilterPolicy::kClassName());
2188
+ }
2189
+ #endif // ROCKSDB_LITE
2190
+ }
2191
+
2192
+ TEST_F(LoadCustomizableTest, LoadFlushBlockPolicyFactoryTest) {
2193
+ std::shared_ptr<TableFactory> table;
2194
+ std::shared_ptr<FlushBlockPolicyFactory> result;
2195
+ ASSERT_NOK(FlushBlockPolicyFactory::CreateFromString(
2196
+ config_options_, TestFlushBlockPolicyFactory::kClassName(), &result));
2197
+
2198
+ ASSERT_OK(
2199
+ FlushBlockPolicyFactory::CreateFromString(config_options_, "", &result));
2200
+ ASSERT_NE(result, nullptr);
2201
+ ASSERT_STREQ(result->Name(), FlushBlockBySizePolicyFactory::kClassName());
2202
+
2203
+ ASSERT_OK(FlushBlockPolicyFactory::CreateFromString(
2204
+ config_options_, FlushBlockEveryKeyPolicyFactory::kClassName(), &result));
2205
+ ASSERT_NE(result, nullptr);
2206
+ ASSERT_STREQ(result->Name(), FlushBlockEveryKeyPolicyFactory::kClassName());
2207
+
2208
+ ASSERT_OK(FlushBlockPolicyFactory::CreateFromString(
2209
+ config_options_, FlushBlockBySizePolicyFactory::kClassName(), &result));
2210
+ ASSERT_NE(result, nullptr);
2211
+ ASSERT_STREQ(result->Name(), FlushBlockBySizePolicyFactory::kClassName());
2212
+ #ifndef ROCKSDB_LITE
2213
+ std::string table_opts = "id=BlockBasedTable; flush_block_policy_factory=";
2214
+ ASSERT_OK(TableFactory::CreateFromString(
2215
+ config_options_,
2216
+ table_opts + FlushBlockEveryKeyPolicyFactory::kClassName(), &table));
2217
+ auto bbto = table->GetOptions<BlockBasedTableOptions>();
2218
+ ASSERT_NE(bbto, nullptr);
2219
+ ASSERT_NE(bbto->flush_block_policy_factory.get(), nullptr);
2220
+ ASSERT_STREQ(bbto->flush_block_policy_factory->Name(),
2221
+ FlushBlockEveryKeyPolicyFactory::kClassName());
2222
+ if (RegisterTests("Test")) {
2223
+ ASSERT_OK(FlushBlockPolicyFactory::CreateFromString(
2224
+ config_options_, TestFlushBlockPolicyFactory::kClassName(), &result));
2225
+ ASSERT_NE(result, nullptr);
2226
+ ASSERT_STREQ(result->Name(), TestFlushBlockPolicyFactory::kClassName());
2227
+ ASSERT_OK(TableFactory::CreateFromString(
2228
+ config_options_, table_opts + TestFlushBlockPolicyFactory::kClassName(),
2229
+ &table));
2230
+ bbto = table->GetOptions<BlockBasedTableOptions>();
2231
+ ASSERT_NE(bbto, nullptr);
2232
+ ASSERT_NE(bbto->flush_block_policy_factory.get(), nullptr);
2233
+ ASSERT_STREQ(bbto->flush_block_policy_factory->Name(),
2234
+ TestFlushBlockPolicyFactory::kClassName());
2235
+ }
2236
+ #endif // ROCKSDB_LITE
2237
+ }
617
2238
 
618
2239
  } // namespace ROCKSDB_NAMESPACE
619
2240
  int main(int argc, char** argv) {
620
2241
  ::testing::InitGoogleTest(&argc, argv);
2242
+ ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
621
2243
  #ifdef GFLAGS
622
2244
  ParseCommandLineFlags(&argc, &argv, true);
623
2245
  #endif // GFLAGS