@nxtedition/rocksdb 8.2.8 → 9.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (483) hide show
  1. package/binding.cc +0 -21
  2. package/deps/rocksdb/rocksdb/CMakeLists.txt +20 -10
  3. package/deps/rocksdb/rocksdb/Makefile +37 -25
  4. package/deps/rocksdb/rocksdb/README.md +29 -0
  5. package/deps/rocksdb/rocksdb/TARGETS +25 -2
  6. package/deps/rocksdb/rocksdb/cache/cache.cc +35 -0
  7. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +229 -74
  8. package/deps/rocksdb/rocksdb/cache/cache_helpers.cc +2 -1
  9. package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +4 -3
  10. package/deps/rocksdb/rocksdb/cache/cache_test.cc +58 -95
  11. package/deps/rocksdb/rocksdb/cache/charged_cache.cc +4 -2
  12. package/deps/rocksdb/rocksdb/cache/charged_cache.h +5 -3
  13. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +2683 -496
  14. package/deps/rocksdb/rocksdb/cache/clock_cache.h +580 -159
  15. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +145 -42
  16. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +20 -1
  17. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +391 -17
  18. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +7 -5
  19. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +309 -212
  20. package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +0 -32
  21. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.cc +439 -12
  22. package/deps/rocksdb/rocksdb/cache/secondary_cache_adapter.h +44 -2
  23. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +11 -1
  24. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +16 -3
  25. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.cc +119 -0
  26. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache.h +155 -0
  27. package/deps/rocksdb/rocksdb/cache/tiered_secondary_cache_test.cc +711 -0
  28. package/deps/rocksdb/rocksdb/cache/typed_cache.h +17 -11
  29. package/deps/rocksdb/rocksdb/crash_test.mk +14 -0
  30. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +28 -12
  31. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +1 -0
  32. package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +2 -1
  33. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +1 -1
  34. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +1 -1
  35. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +2 -2
  36. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +1 -1
  37. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +20 -22
  38. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +1 -2
  39. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +1 -1
  40. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +2 -3
  41. package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +1 -1
  42. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +8 -0
  43. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +7 -3
  44. package/deps/rocksdb/rocksdb/db/builder.cc +35 -10
  45. package/deps/rocksdb/rocksdb/db/c.cc +233 -6
  46. package/deps/rocksdb/rocksdb/db/c_test.c +140 -6
  47. package/deps/rocksdb/rocksdb/db/column_family.cc +110 -51
  48. package/deps/rocksdb/rocksdb/db/column_family.h +34 -2
  49. package/deps/rocksdb/rocksdb/db/column_family_test.cc +314 -7
  50. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +4 -1
  51. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +106 -23
  52. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +47 -9
  53. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +10 -11
  54. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +17 -6
  55. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +2 -2
  56. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +148 -60
  57. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +22 -7
  58. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +2 -0
  59. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +8 -4
  60. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +33 -23
  61. package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +14 -5
  62. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +11 -11
  63. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +3 -0
  64. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +90 -4
  65. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +170 -95
  66. package/deps/rocksdb/rocksdb/db/compaction/file_pri.h +3 -1
  67. package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +32 -58
  68. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +3 -1
  69. package/deps/rocksdb/rocksdb/db/convenience.cc +20 -3
  70. package/deps/rocksdb/rocksdb/db/convenience_impl.h +15 -0
  71. package/deps/rocksdb/rocksdb/db/corruption_test.cc +17 -0
  72. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +1 -0
  73. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +46 -10
  74. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +13 -3
  75. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +74 -15
  76. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +27 -3
  77. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +850 -44
  78. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +2 -29
  79. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +275 -1
  80. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +52 -19
  81. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +6 -5
  82. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +733 -320
  83. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +155 -66
  84. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +516 -155
  85. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +8 -4
  86. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +2 -1
  87. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +17 -4
  88. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +100 -35
  89. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +95 -50
  90. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +13 -9
  91. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +136 -79
  92. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +6 -95
  93. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +31 -22
  94. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +6 -0
  95. package/deps/rocksdb/rocksdb/db/db_iter.cc +85 -57
  96. package/deps/rocksdb/rocksdb/db/db_iter.h +11 -2
  97. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +29 -0
  98. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +276 -21
  99. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +35 -0
  100. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +4 -11
  101. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +193 -7
  102. package/deps/rocksdb/rocksdb/db/db_options_test.cc +294 -26
  103. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +26 -36
  104. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +364 -0
  105. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +13 -3
  106. package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +52 -0
  107. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +74 -1
  108. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +22 -4
  109. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +1 -1
  110. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +1 -0
  111. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +282 -167
  112. package/deps/rocksdb/rocksdb/db/db_test.cc +180 -49
  113. package/deps/rocksdb/rocksdb/db/db_test2.cc +84 -12
  114. package/deps/rocksdb/rocksdb/db/db_test_util.cc +25 -12
  115. package/deps/rocksdb/rocksdb/db/db_test_util.h +45 -2
  116. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +14 -1
  117. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +245 -0
  118. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +480 -1
  119. package/deps/rocksdb/rocksdb/db/db_write_buffer_manager_test.cc +6 -6
  120. package/deps/rocksdb/rocksdb/db/db_write_test.cc +2 -2
  121. package/deps/rocksdb/rocksdb/db/dbformat.cc +36 -0
  122. package/deps/rocksdb/rocksdb/db/dbformat.h +169 -20
  123. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +129 -0
  124. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +2 -0
  125. package/deps/rocksdb/rocksdb/db/error_handler.cc +67 -34
  126. package/deps/rocksdb/rocksdb/db/error_handler.h +13 -9
  127. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +4 -4
  128. package/deps/rocksdb/rocksdb/db/event_helpers.cc +4 -0
  129. package/deps/rocksdb/rocksdb/db/experimental.cc +2 -1
  130. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +4 -4
  131. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +17 -8
  132. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +144 -4
  133. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +1 -1
  134. package/deps/rocksdb/rocksdb/db/file_indexer.cc +2 -4
  135. package/deps/rocksdb/rocksdb/db/flush_job.cc +105 -17
  136. package/deps/rocksdb/rocksdb/db/flush_job.h +27 -4
  137. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +90 -12
  138. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +2 -3
  139. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +159 -91
  140. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +19 -10
  141. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +143 -0
  142. package/deps/rocksdb/rocksdb/db/internal_stats.cc +13 -1
  143. package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -0
  144. package/deps/rocksdb/rocksdb/db/listener_test.cc +2 -1
  145. package/deps/rocksdb/rocksdb/db/log_reader.h +3 -2
  146. package/deps/rocksdb/rocksdb/db/log_test.cc +17 -21
  147. package/deps/rocksdb/rocksdb/db/log_writer.cc +1 -1
  148. package/deps/rocksdb/rocksdb/db/log_writer.h +3 -2
  149. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +6 -3
  150. package/deps/rocksdb/rocksdb/db/memtable.cc +70 -83
  151. package/deps/rocksdb/rocksdb/db/memtable.h +45 -1
  152. package/deps/rocksdb/rocksdb/db/memtable_list.cc +45 -11
  153. package/deps/rocksdb/rocksdb/db/memtable_list.h +43 -2
  154. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +91 -5
  155. package/deps/rocksdb/rocksdb/db/merge_helper.cc +330 -115
  156. package/deps/rocksdb/rocksdb/db/merge_helper.h +100 -12
  157. package/deps/rocksdb/rocksdb/db/merge_operator.cc +82 -0
  158. package/deps/rocksdb/rocksdb/db/merge_test.cc +267 -0
  159. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +5 -2
  160. package/deps/rocksdb/rocksdb/db/periodic_task_scheduler.h +4 -4
  161. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +3 -0
  162. package/deps/rocksdb/rocksdb/db/prefix_test.cc +1 -0
  163. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +4 -0
  164. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +4 -0
  165. package/deps/rocksdb/rocksdb/db/repair.cc +25 -7
  166. package/deps/rocksdb/rocksdb/db/repair_test.cc +143 -2
  167. package/deps/rocksdb/rocksdb/db/seqno_time_test.cc +459 -74
  168. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +105 -69
  169. package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +83 -46
  170. package/deps/rocksdb/rocksdb/db/table_cache.cc +76 -54
  171. package/deps/rocksdb/rocksdb/db/table_cache.h +18 -12
  172. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +2 -2
  173. package/deps/rocksdb/rocksdb/db/version_builder.cc +0 -1
  174. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +236 -204
  175. package/deps/rocksdb/rocksdb/db/version_edit.cc +66 -4
  176. package/deps/rocksdb/rocksdb/db/version_edit.h +58 -10
  177. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +80 -8
  178. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +12 -0
  179. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +86 -17
  180. package/deps/rocksdb/rocksdb/db/version_set.cc +207 -110
  181. package/deps/rocksdb/rocksdb/db/version_set.h +36 -15
  182. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +2 -5
  183. package/deps/rocksdb/rocksdb/db/version_set_test.cc +47 -26
  184. package/deps/rocksdb/rocksdb/db/wide/db_wide_basic_test.cc +525 -0
  185. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +6 -22
  186. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +0 -20
  187. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +0 -29
  188. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.cc +46 -0
  189. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.h +40 -0
  190. package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper_test.cc +39 -0
  191. package/deps/rocksdb/rocksdb/db/write_batch.cc +55 -20
  192. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +3 -0
  193. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +16 -0
  194. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
  195. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +4 -4
  196. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +4 -7
  197. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +88 -10
  198. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +37 -13
  199. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +110 -58
  200. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +42 -0
  201. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +68 -17
  202. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +34 -0
  203. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +8 -1
  204. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +429 -237
  205. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +13 -6
  206. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +21 -14
  207. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.cc +51 -0
  208. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_wide_merge_operator.h +27 -0
  209. package/deps/rocksdb/rocksdb/db_stress_tool/expected_state.cc +3 -6
  210. package/deps/rocksdb/rocksdb/db_stress_tool/expected_value.h +2 -0
  211. package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +29 -38
  212. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +302 -101
  213. package/deps/rocksdb/rocksdb/env/env.cc +6 -2
  214. package/deps/rocksdb/rocksdb/env/env_encryption.cc +11 -165
  215. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +0 -17
  216. package/deps/rocksdb/rocksdb/env/env_posix.cc +6 -2
  217. package/deps/rocksdb/rocksdb/env/env_test.cc +86 -2
  218. package/deps/rocksdb/rocksdb/env/fs_posix.cc +6 -4
  219. package/deps/rocksdb/rocksdb/env/unique_id_gen.cc +79 -0
  220. package/deps/rocksdb/rocksdb/env/unique_id_gen.h +34 -0
  221. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +1 -0
  222. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +15 -4
  223. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +100 -70
  224. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +64 -18
  225. package/deps/rocksdb/rocksdb/file/file_util.cc +10 -5
  226. package/deps/rocksdb/rocksdb/file/file_util.h +13 -1
  227. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +1225 -97
  228. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +72 -33
  229. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +3 -16
  230. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +23 -12
  231. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +3 -0
  232. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_cache.h +40 -14
  233. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +163 -91
  234. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +112 -2
  235. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +108 -16
  236. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +11 -0
  237. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +3 -0
  238. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +42 -2
  239. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +1 -1
  240. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +92 -12
  241. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +34 -4
  242. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +9 -109
  243. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +91 -13
  244. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +8 -3
  245. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +10 -4
  246. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +7 -0
  247. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +1 -1
  248. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +55 -4
  249. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +130 -22
  250. package/deps/rocksdb/rocksdb/include/rocksdb/port_defs.h +4 -0
  251. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +9 -0
  252. package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +92 -9
  253. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +2 -1
  254. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +5 -1
  255. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +37 -2
  256. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +35 -0
  257. package/deps/rocksdb/rocksdb/include/rocksdb/system_clock.h +15 -0
  258. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +7 -1
  259. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +20 -3
  260. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +7 -0
  261. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +7 -0
  262. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +6 -1
  263. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +33 -2
  264. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +2 -1
  265. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +14 -0
  266. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +42 -2
  267. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +0 -3
  268. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
  269. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +53 -2
  270. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +3 -2
  271. package/deps/rocksdb/rocksdb/memory/arena_test.cc +18 -11
  272. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +4 -3
  273. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +1 -1
  274. package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
  275. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +69 -34
  276. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +1 -1
  277. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +22 -1
  278. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +18 -7
  279. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +14 -0
  280. package/deps/rocksdb/rocksdb/options/cf_options.cc +19 -0
  281. package/deps/rocksdb/rocksdb/options/cf_options.h +10 -2
  282. package/deps/rocksdb/rocksdb/options/customizable_test.cc +6 -1
  283. package/deps/rocksdb/rocksdb/options/db_options.cc +54 -2
  284. package/deps/rocksdb/rocksdb/options/db_options.h +4 -0
  285. package/deps/rocksdb/rocksdb/options/options.cc +15 -1
  286. package/deps/rocksdb/rocksdb/options/options_helper.cc +18 -0
  287. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +14 -4
  288. package/deps/rocksdb/rocksdb/options/options_test.cc +14 -1
  289. package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
  290. package/deps/rocksdb/rocksdb/port/README +10 -0
  291. package/deps/rocksdb/rocksdb/port/mmap.h +20 -0
  292. package/deps/rocksdb/rocksdb/port/port_example.h +1 -1
  293. package/deps/rocksdb/rocksdb/port/port_posix.cc +1 -1
  294. package/deps/rocksdb/rocksdb/port/port_posix.h +7 -4
  295. package/deps/rocksdb/rocksdb/port/stack_trace.cc +32 -12
  296. package/deps/rocksdb/rocksdb/port/win/env_win.h +1 -1
  297. package/deps/rocksdb/rocksdb/port/win/port_win.h +5 -2
  298. package/deps/rocksdb/rocksdb/src.mk +10 -1
  299. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +2 -1
  300. package/deps/rocksdb/rocksdb/table/block_based/block.cc +48 -22
  301. package/deps/rocksdb/rocksdb/table/block_based/block.h +60 -12
  302. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +116 -43
  303. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +9 -6
  304. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +321 -49
  305. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +98 -4
  306. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +233 -98
  307. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +58 -23
  308. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +12 -8
  309. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +52 -24
  310. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +219 -51
  311. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +41 -8
  312. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +25 -1
  313. package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +3 -1
  314. package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +26 -7
  315. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +50 -18
  316. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +20 -8
  317. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +232 -71
  318. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -6
  319. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +44 -26
  320. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +2 -1
  321. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -1
  322. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +31 -16
  323. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +97 -58
  324. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +2 -2
  325. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +6 -0
  326. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +36 -19
  327. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +3 -1
  328. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +114 -70
  329. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +4 -3
  330. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +11 -7
  331. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +15 -3
  332. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +6 -3
  333. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +1 -1
  334. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +14 -13
  335. package/deps/rocksdb/rocksdb/table/block_fetcher.h +4 -0
  336. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +9 -2
  337. package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +1 -0
  338. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +6 -2
  339. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +1 -2
  340. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +2 -3
  341. package/deps/rocksdb/rocksdb/table/format.cc +175 -33
  342. package/deps/rocksdb/rocksdb/table/format.h +63 -10
  343. package/deps/rocksdb/rocksdb/table/get_context.cc +52 -89
  344. package/deps/rocksdb/rocksdb/table/get_context.h +12 -3
  345. package/deps/rocksdb/rocksdb/table/internal_iterator.h +11 -0
  346. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +29 -1
  347. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +22 -2
  348. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +12 -4
  349. package/deps/rocksdb/rocksdb/table/meta_blocks.h +1 -0
  350. package/deps/rocksdb/rocksdb/table/mock_table.cc +8 -3
  351. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +10 -5
  352. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +10 -1
  353. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +1 -2
  354. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +3 -3
  355. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +45 -9
  356. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +1 -0
  357. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +24 -1
  358. package/deps/rocksdb/rocksdb/table/table_builder.h +6 -2
  359. package/deps/rocksdb/rocksdb/table/table_properties.cc +6 -0
  360. package/deps/rocksdb/rocksdb/table/table_reader.h +6 -0
  361. package/deps/rocksdb/rocksdb/table/table_test.cc +52 -22
  362. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +31 -0
  363. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.cc +2 -1
  364. package/deps/rocksdb/rocksdb/test_util/secondary_cache_test_util.h +19 -7
  365. package/deps/rocksdb/rocksdb/test_util/sync_point.h +3 -1
  366. package/deps/rocksdb/rocksdb/test_util/testutil.cc +29 -0
  367. package/deps/rocksdb/rocksdb/test_util/testutil.h +19 -0
  368. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim.py +3 -3
  369. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +87 -65
  370. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +221 -33
  371. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +36 -0
  372. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +1 -1
  373. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +1 -0
  374. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +33 -11
  375. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +4 -0
  376. package/deps/rocksdb/rocksdb/unreleased_history/README.txt +73 -0
  377. package/deps/rocksdb/rocksdb/unreleased_history/add.sh +27 -0
  378. package/deps/rocksdb/rocksdb/unreleased_history/behavior_changes/.gitkeep +0 -0
  379. package/deps/rocksdb/rocksdb/unreleased_history/bug_fixes/.gitkeep +0 -0
  380. package/deps/rocksdb/rocksdb/unreleased_history/new_features/.gitkeep +0 -0
  381. package/deps/rocksdb/rocksdb/unreleased_history/performance_improvements/.gitkeep +0 -0
  382. package/deps/rocksdb/rocksdb/unreleased_history/public_api_changes/.gitkeep +0 -0
  383. package/deps/rocksdb/rocksdb/unreleased_history/release.sh +104 -0
  384. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +5 -0
  385. package/deps/rocksdb/rocksdb/util/bloom_impl.h +3 -3
  386. package/deps/rocksdb/rocksdb/util/bloom_test.cc +32 -11
  387. package/deps/rocksdb/rocksdb/util/cast_util.h +24 -0
  388. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +2 -0
  389. package/deps/rocksdb/rocksdb/util/comparator.cc +55 -8
  390. package/deps/rocksdb/rocksdb/util/compression.cc +4 -4
  391. package/deps/rocksdb/rocksdb/util/compression.h +119 -35
  392. package/deps/rocksdb/rocksdb/util/core_local.h +2 -1
  393. package/deps/rocksdb/rocksdb/util/crc32c.cc +7 -1
  394. package/deps/rocksdb/rocksdb/util/distributed_mutex.h +1 -1
  395. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +4 -4
  396. package/deps/rocksdb/rocksdb/util/filelock_test.cc +3 -0
  397. package/deps/rocksdb/rocksdb/util/hash.h +7 -3
  398. package/deps/rocksdb/rocksdb/util/hash_test.cc +44 -0
  399. package/deps/rocksdb/rocksdb/util/math.h +58 -6
  400. package/deps/rocksdb/rocksdb/util/math128.h +29 -7
  401. package/deps/rocksdb/rocksdb/util/mutexlock.h +35 -27
  402. package/deps/rocksdb/rocksdb/util/overload.h +23 -0
  403. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +53 -18
  404. package/deps/rocksdb/rocksdb/util/rate_limiter_impl.h +6 -1
  405. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +90 -19
  406. package/deps/rocksdb/rocksdb/util/single_thread_executor.h +1 -0
  407. package/deps/rocksdb/rocksdb/util/slice_test.cc +30 -0
  408. package/deps/rocksdb/rocksdb/util/status.cc +1 -0
  409. package/deps/rocksdb/rocksdb/util/stop_watch.h +1 -1
  410. package/deps/rocksdb/rocksdb/util/string_util.cc +39 -0
  411. package/deps/rocksdb/rocksdb/util/string_util.h +10 -0
  412. package/deps/rocksdb/rocksdb/util/thread_operation.h +10 -1
  413. package/deps/rocksdb/rocksdb/util/udt_util.cc +385 -0
  414. package/deps/rocksdb/rocksdb/util/udt_util.h +192 -1
  415. package/deps/rocksdb/rocksdb/util/udt_util_test.cc +461 -0
  416. package/deps/rocksdb/rocksdb/util/write_batch_util.cc +25 -0
  417. package/deps/rocksdb/rocksdb/util/write_batch_util.h +80 -0
  418. package/deps/rocksdb/rocksdb/util/xxhash.h +0 -3
  419. package/deps/rocksdb/rocksdb/util/xxph3.h +0 -4
  420. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +4 -4
  421. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +71 -26
  422. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +7 -6
  423. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +1 -1
  424. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +2 -3
  425. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +6 -11
  426. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +1 -2
  427. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +4 -5
  428. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +1 -0
  429. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +20 -16
  430. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +11 -7
  431. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +2 -2
  432. package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +7 -1
  433. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +3 -0
  434. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +12 -3
  435. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +1 -2
  436. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +7 -4
  437. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +2 -3
  438. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +2 -2
  439. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +1 -1
  440. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +13 -0
  441. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +23 -8
  442. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +9 -6
  443. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +37 -12
  444. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +272 -33
  445. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +15 -9
  446. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +4 -1
  447. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +76 -20
  448. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +18 -9
  449. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +195 -23
  450. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +19 -12
  451. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +88 -1
  452. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +1 -1
  453. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +43 -17
  454. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +6 -3
  455. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +73 -24
  456. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +19 -4
  457. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +60 -107
  458. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +41 -12
  459. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +6 -3
  460. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +15 -8
  461. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +1 -1
  462. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +10 -5
  463. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +1 -1
  464. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +1 -1
  465. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +59 -28
  466. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +127 -120
  467. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +129 -59
  468. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +111 -14
  469. package/deps/rocksdb/rocksdb.gyp +6 -2
  470. package/index.js +0 -8
  471. package/package.json +1 -1
  472. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  473. package/prebuilds/linux-x64/node.napi.node +0 -0
  474. package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +0 -7
  475. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +0 -29
  476. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +0 -29
  477. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +0 -29
  478. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +0 -33
  479. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +0 -29
  480. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +0 -29
  481. package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +0 -26
  482. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +0 -29
  483. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +0 -10
@@ -10,6 +10,7 @@
10
10
  #include "db/db_test_util.h"
11
11
  #include "port/stack_trace.h"
12
12
  #include "test_util/testutil.h"
13
+ #include "util/overload.h"
13
14
  #include "utilities/merge_operators.h"
14
15
 
15
16
  namespace ROCKSDB_NAMESPACE {
@@ -208,6 +209,11 @@ TEST_F(DBWideBasicTest, PutEntity) {
208
209
  ASSERT_OK(Flush());
209
210
 
210
211
  verify();
212
+
213
+ // Reopen as Readonly DB and verify
214
+ Close();
215
+ ASSERT_OK(ReadOnlyReopen(options));
216
+ verify();
211
217
  }
212
218
 
213
219
  TEST_F(DBWideBasicTest, PutEntityColumnFamily) {
@@ -264,6 +270,134 @@ TEST_F(DBWideBasicTest, MultiCFMultiGetEntity) {
264
270
  ASSERT_EQ(results[1].columns(), second_columns);
265
271
  }
266
272
 
273
+ TEST_F(DBWideBasicTest, MultiCFMultiGetEntityAsPinnableAttributeGroups) {
274
+ Options options = GetDefaultOptions();
275
+ CreateAndReopenWithCF({"hot_cf", "cold_cf"}, options);
276
+
277
+ constexpr int DEFAULT_CF_HANDLE_INDEX = 0;
278
+ constexpr int HOT_CF_HANDLE_INDEX = 1;
279
+ constexpr int COLD_CF_HANDLE_INDEX = 2;
280
+
281
+ constexpr char first_key[] = "first";
282
+ WideColumns first_default_columns{
283
+ {"default_cf_col_1_name", "first_key_default_cf_col_1_value"},
284
+ {"default_cf_col_2_name", "first_key_default_cf_col_2_value"}};
285
+ WideColumns first_hot_columns{
286
+ {"hot_cf_col_1_name", "first_key_hot_cf_col_1_value"},
287
+ {"hot_cf_col_2_name", "first_key_hot_cf_col_2_value"}};
288
+ WideColumns first_cold_columns{
289
+ {"cold_cf_col_1_name", "first_key_cold_cf_col_1_value"}};
290
+ constexpr char second_key[] = "second";
291
+ WideColumns second_hot_columns{
292
+ {"hot_cf_col_1_name", "second_key_hot_cf_col_1_value"}};
293
+ WideColumns second_cold_columns{
294
+ {"cold_cf_col_1_name", "second_key_cold_cf_col_1_value"}};
295
+
296
+ // TODO - update this to use the multi-attribute-group PutEntity when ready
297
+ ASSERT_OK(db_->PutEntity(WriteOptions(), handles_[DEFAULT_CF_HANDLE_INDEX],
298
+ first_key, first_default_columns));
299
+ ASSERT_OK(db_->PutEntity(WriteOptions(), handles_[HOT_CF_HANDLE_INDEX],
300
+ first_key, first_hot_columns));
301
+ ASSERT_OK(db_->PutEntity(WriteOptions(), handles_[COLD_CF_HANDLE_INDEX],
302
+ first_key, first_cold_columns));
303
+ ASSERT_OK(db_->PutEntity(WriteOptions(), handles_[HOT_CF_HANDLE_INDEX],
304
+ second_key, second_hot_columns));
305
+ ASSERT_OK(db_->PutEntity(WriteOptions(), handles_[COLD_CF_HANDLE_INDEX],
306
+ second_key, second_cold_columns));
307
+
308
+ constexpr size_t num_keys = 2;
309
+ std::array<Slice, num_keys> keys = {first_key, second_key};
310
+ std::vector<ColumnFamilyHandle*> all_cfs = handles_;
311
+ std::vector<ColumnFamilyHandle*> default_and_hot_cfs{
312
+ {handles_[DEFAULT_CF_HANDLE_INDEX], handles_[HOT_CF_HANDLE_INDEX]}};
313
+ std::vector<ColumnFamilyHandle*> hot_and_cold_cfs{
314
+ {handles_[HOT_CF_HANDLE_INDEX], handles_[COLD_CF_HANDLE_INDEX]}};
315
+ auto create_result =
316
+ [](const std::vector<ColumnFamilyHandle*>& column_families)
317
+ -> PinnableAttributeGroups {
318
+ PinnableAttributeGroups result;
319
+ for (size_t i = 0; i < column_families.size(); ++i) {
320
+ result.emplace_back(column_families[i]);
321
+ }
322
+ return result;
323
+ };
324
+ {
325
+ // Check for invalid argument
326
+ ReadOptions read_options;
327
+ read_options.io_activity = Env::IOActivity::kGetEntity;
328
+ std::vector<PinnableAttributeGroups> results;
329
+ for (size_t i = 0; i < num_keys; ++i) {
330
+ results.emplace_back(create_result(all_cfs));
331
+ }
332
+ db_->MultiGetEntity(read_options, num_keys, keys.data(), results.data());
333
+ for (size_t i = 0; i < num_keys; ++i) {
334
+ for (size_t j = 0; j < all_cfs.size(); ++j) {
335
+ ASSERT_NOK(results[i][j].status());
336
+ ASSERT_TRUE(results[i][j].status().IsInvalidArgument());
337
+ }
338
+ }
339
+ }
340
+ {
341
+ // Case 1. Get first key from default cf and hot_cf and second key from
342
+ // hot_cf and cold_cf
343
+ std::vector<PinnableAttributeGroups> results;
344
+ PinnableAttributeGroups first_key_result =
345
+ create_result(default_and_hot_cfs);
346
+ PinnableAttributeGroups second_key_result = create_result(hot_and_cold_cfs);
347
+ results.emplace_back(std::move(first_key_result));
348
+ results.emplace_back(std::move(second_key_result));
349
+
350
+ db_->MultiGetEntity(ReadOptions(), num_keys, keys.data(), results.data());
351
+ ASSERT_EQ(2, results.size());
352
+ // We expect to get values for all keys and CFs
353
+ for (size_t i = 0; i < num_keys; ++i) {
354
+ for (size_t j = 0; j < 2; ++j) {
355
+ ASSERT_OK(results[i][j].status());
356
+ }
357
+ }
358
+ // verify values for first key (default cf and hot cf)
359
+ ASSERT_EQ(2, results[0].size());
360
+ ASSERT_EQ(first_default_columns, results[0][0].columns());
361
+ ASSERT_EQ(first_hot_columns, results[0][1].columns());
362
+
363
+ // verify values for second key (hot cf and cold cf)
364
+ ASSERT_EQ(2, results[1].size());
365
+ ASSERT_EQ(second_hot_columns, results[1][0].columns());
366
+ ASSERT_EQ(second_cold_columns, results[1][1].columns());
367
+ }
368
+ {
369
+ // Case 2. Get first key and second key from all cfs. For the second key, we
370
+ // don't expect to get columns from default cf.
371
+ std::vector<PinnableAttributeGroups> results;
372
+ PinnableAttributeGroups first_key_result = create_result(all_cfs);
373
+ PinnableAttributeGroups second_key_result = create_result(all_cfs);
374
+ results.emplace_back(std::move(first_key_result));
375
+ results.emplace_back(std::move(second_key_result));
376
+
377
+ db_->MultiGetEntity(ReadOptions(), num_keys, keys.data(), results.data());
378
+ // verify first key
379
+ for (size_t i = 0; i < all_cfs.size(); ++i) {
380
+ ASSERT_OK(results[0][i].status());
381
+ }
382
+ ASSERT_EQ(3, results[0].size());
383
+ ASSERT_EQ(first_default_columns, results[0][0].columns());
384
+ ASSERT_EQ(first_hot_columns, results[0][1].columns());
385
+ ASSERT_EQ(first_cold_columns, results[0][2].columns());
386
+
387
+ // verify second key
388
+ // key does not exist in default cf
389
+ ASSERT_NOK(results[1][0].status());
390
+ ASSERT_TRUE(results[1][0].status().IsNotFound());
391
+ ASSERT_TRUE(results[1][0].columns().empty());
392
+
393
+ // key exists in hot_cf and cold_cf
394
+ ASSERT_OK(results[1][1].status());
395
+ ASSERT_EQ(second_hot_columns, results[1][1].columns());
396
+ ASSERT_OK(results[1][2].status());
397
+ ASSERT_EQ(second_cold_columns, results[1][2].columns());
398
+ }
399
+ }
400
+
267
401
  TEST_F(DBWideBasicTest, MergePlainKeyValue) {
268
402
  Options options = GetDefaultOptions();
269
403
  options.create_if_missing = true;
@@ -685,6 +819,397 @@ TEST_F(DBWideBasicTest, MergeEntity) {
685
819
  verify_merge_ops_post_compaction();
686
820
  }
687
821
 
822
+ class DBWideMergeV3Test : public DBWideBasicTest {
823
+ protected:
824
+ void RunTest(const WideColumns& first_expected,
825
+ const WideColumns& second_expected,
826
+ const WideColumns& third_expected) {
827
+ // Note: we'll take some snapshots to prevent merging during flush
828
+ snapshots_.reserve(6);
829
+
830
+ // Test reading from memtables
831
+ WriteKeyValues();
832
+ VerifyKeyValues(first_expected, second_expected, third_expected);
833
+ VerifyMergeOperandCount(first_key, 2);
834
+ VerifyMergeOperandCount(second_key, 3);
835
+ VerifyMergeOperandCount(third_key, 3);
836
+
837
+ // Test reading from SST files
838
+ ASSERT_OK(Flush());
839
+ VerifyKeyValues(first_expected, second_expected, third_expected);
840
+ VerifyMergeOperandCount(first_key, 2);
841
+ VerifyMergeOperandCount(second_key, 3);
842
+ VerifyMergeOperandCount(third_key, 3);
843
+
844
+ // Test reading from SSTs after compaction. Note that we write the same KVs
845
+ // and flush again so we have two overlapping files. We also release the
846
+ // snapshots so that the compaction can merge all keys.
847
+ WriteKeyValues();
848
+ ASSERT_OK(Flush());
849
+
850
+ snapshots_.clear();
851
+
852
+ ASSERT_OK(db_->CompactRange(CompactRangeOptions(), /* begin */ nullptr,
853
+ /* end */ nullptr));
854
+ VerifyKeyValues(first_expected, second_expected, third_expected);
855
+ VerifyMergeOperandCount(first_key, 1);
856
+ VerifyMergeOperandCount(second_key, 1);
857
+ VerifyMergeOperandCount(third_key, 1);
858
+ }
859
+
860
+ void WriteKeyValues() {
861
+ // Base values
862
+ ASSERT_OK(db_->Delete(WriteOptions(), db_->DefaultColumnFamily(),
863
+ first_key)); // no base value
864
+ ASSERT_OK(db_->Put(WriteOptions(), db_->DefaultColumnFamily(), second_key,
865
+ second_base_value)); // plain base value
866
+ ASSERT_OK(db_->PutEntity(WriteOptions(), db_->DefaultColumnFamily(),
867
+ third_key,
868
+ third_columns)); // wide-column base value
869
+
870
+ snapshots_.emplace_back(db_);
871
+
872
+ // First round of merge operands
873
+ ASSERT_OK(db_->Merge(WriteOptions(), db_->DefaultColumnFamily(), first_key,
874
+ first_merge_op1));
875
+ ASSERT_OK(db_->Merge(WriteOptions(), db_->DefaultColumnFamily(), second_key,
876
+ second_merge_op1));
877
+ ASSERT_OK(db_->Merge(WriteOptions(), db_->DefaultColumnFamily(), third_key,
878
+ third_merge_op1));
879
+
880
+ snapshots_.emplace_back(db_);
881
+
882
+ // Second round of merge operands
883
+ ASSERT_OK(db_->Merge(WriteOptions(), db_->DefaultColumnFamily(), first_key,
884
+ first_merge_op2));
885
+ ASSERT_OK(db_->Merge(WriteOptions(), db_->DefaultColumnFamily(), second_key,
886
+ second_merge_op2));
887
+ ASSERT_OK(db_->Merge(WriteOptions(), db_->DefaultColumnFamily(), third_key,
888
+ third_merge_op2));
889
+
890
+ snapshots_.emplace_back(db_);
891
+ }
892
+
893
+ void VerifyKeyValues(const WideColumns& first_expected,
894
+ const WideColumns& second_expected,
895
+ const WideColumns& third_expected) {
896
+ assert(!first_expected.empty() &&
897
+ first_expected[0].name() == kDefaultWideColumnName);
898
+ assert(!second_expected.empty() &&
899
+ second_expected[0].name() == kDefaultWideColumnName);
900
+ assert(!third_expected.empty() &&
901
+ third_expected[0].name() == kDefaultWideColumnName);
902
+
903
+ // Get
904
+ {
905
+ PinnableSlice result;
906
+ ASSERT_OK(db_->Get(ReadOptions(), db_->DefaultColumnFamily(), first_key,
907
+ &result));
908
+ ASSERT_EQ(result, first_expected[0].value());
909
+ }
910
+
911
+ {
912
+ PinnableSlice result;
913
+ ASSERT_OK(db_->Get(ReadOptions(), db_->DefaultColumnFamily(), second_key,
914
+ &result));
915
+ ASSERT_EQ(result, second_expected[0].value());
916
+ }
917
+
918
+ {
919
+ PinnableSlice result;
920
+ ASSERT_OK(db_->Get(ReadOptions(), db_->DefaultColumnFamily(), third_key,
921
+ &result));
922
+ ASSERT_EQ(result, third_expected[0].value());
923
+ }
924
+
925
+ // MultiGet
926
+ {
927
+ std::array<Slice, num_keys> keys{{first_key, second_key, third_key}};
928
+ std::array<PinnableSlice, num_keys> values;
929
+ std::array<Status, num_keys> statuses;
930
+
931
+ db_->MultiGet(ReadOptions(), db_->DefaultColumnFamily(), num_keys,
932
+ keys.data(), values.data(), statuses.data());
933
+ ASSERT_OK(statuses[0]);
934
+ ASSERT_EQ(values[0], first_expected[0].value());
935
+ ASSERT_OK(statuses[1]);
936
+ ASSERT_EQ(values[1], second_expected[0].value());
937
+ ASSERT_OK(statuses[2]);
938
+ ASSERT_EQ(values[2], third_expected[0].value());
939
+ }
940
+
941
+ // GetEntity
942
+ {
943
+ PinnableWideColumns result;
944
+
945
+ ASSERT_OK(db_->GetEntity(ReadOptions(), db_->DefaultColumnFamily(),
946
+ first_key, &result));
947
+ ASSERT_EQ(result.columns(), first_expected);
948
+ }
949
+
950
+ {
951
+ PinnableWideColumns result;
952
+
953
+ ASSERT_OK(db_->GetEntity(ReadOptions(), db_->DefaultColumnFamily(),
954
+ second_key, &result));
955
+ ASSERT_EQ(result.columns(), second_expected);
956
+ }
957
+
958
+ {
959
+ PinnableWideColumns result;
960
+
961
+ ASSERT_OK(db_->GetEntity(ReadOptions(), db_->DefaultColumnFamily(),
962
+ third_key, &result));
963
+ ASSERT_EQ(result.columns(), third_expected);
964
+ }
965
+
966
+ // MultiGetEntity
967
+ {
968
+ std::array<Slice, num_keys> keys{{first_key, second_key, third_key}};
969
+ std::array<PinnableWideColumns, num_keys> results;
970
+ std::array<Status, num_keys> statuses;
971
+
972
+ db_->MultiGetEntity(ReadOptions(), db_->DefaultColumnFamily(), num_keys,
973
+ keys.data(), results.data(), statuses.data());
974
+ ASSERT_OK(statuses[0]);
975
+ ASSERT_EQ(results[0].columns(), first_expected);
976
+ ASSERT_OK(statuses[1]);
977
+ ASSERT_EQ(results[1].columns(), second_expected);
978
+ ASSERT_OK(statuses[2]);
979
+ ASSERT_EQ(results[2].columns(), third_expected);
980
+ }
981
+
982
+ // Iterator
983
+ {
984
+ std::unique_ptr<Iterator> iter(db_->NewIterator(ReadOptions()));
985
+
986
+ iter->SeekToFirst();
987
+ ASSERT_TRUE(iter->Valid());
988
+ ASSERT_OK(iter->status());
989
+ ASSERT_EQ(iter->key(), first_key);
990
+ ASSERT_EQ(iter->value(), first_expected[0].value());
991
+ ASSERT_EQ(iter->columns(), first_expected);
992
+
993
+ iter->Next();
994
+ ASSERT_TRUE(iter->Valid());
995
+ ASSERT_OK(iter->status());
996
+ ASSERT_EQ(iter->key(), second_key);
997
+ ASSERT_EQ(iter->value(), second_expected[0].value());
998
+ ASSERT_EQ(iter->columns(), second_expected);
999
+
1000
+ iter->Next();
1001
+ ASSERT_TRUE(iter->Valid());
1002
+ ASSERT_OK(iter->status());
1003
+ ASSERT_EQ(iter->key(), third_key);
1004
+ ASSERT_EQ(iter->value(), third_expected[0].value());
1005
+ ASSERT_EQ(iter->columns(), third_expected);
1006
+
1007
+ iter->Next();
1008
+ ASSERT_FALSE(iter->Valid());
1009
+ ASSERT_OK(iter->status());
1010
+
1011
+ iter->SeekToLast();
1012
+ ASSERT_TRUE(iter->Valid());
1013
+ ASSERT_OK(iter->status());
1014
+ ASSERT_EQ(iter->key(), third_key);
1015
+ ASSERT_EQ(iter->value(), third_expected[0].value());
1016
+ ASSERT_EQ(iter->columns(), third_expected);
1017
+
1018
+ iter->Prev();
1019
+ ASSERT_TRUE(iter->Valid());
1020
+ ASSERT_OK(iter->status());
1021
+ ASSERT_EQ(iter->key(), second_key);
1022
+ ASSERT_EQ(iter->value(), second_expected[0].value());
1023
+ ASSERT_EQ(iter->columns(), second_expected);
1024
+
1025
+ iter->Prev();
1026
+ ASSERT_TRUE(iter->Valid());
1027
+ ASSERT_OK(iter->status());
1028
+ ASSERT_EQ(iter->key(), first_key);
1029
+ ASSERT_EQ(iter->value(), first_expected[0].value());
1030
+ ASSERT_EQ(iter->columns(), first_expected);
1031
+
1032
+ iter->Prev();
1033
+ ASSERT_FALSE(iter->Valid());
1034
+ ASSERT_OK(iter->status());
1035
+ }
1036
+ }
1037
+
1038
+ void VerifyMergeOperandCount(const Slice& key, int expected_merge_ops) {
1039
+ GetMergeOperandsOptions get_merge_opts;
1040
+ get_merge_opts.expected_max_number_of_operands = expected_merge_ops;
1041
+
1042
+ std::vector<PinnableSlice> merge_operands(expected_merge_ops);
1043
+ int number_of_operands = 0;
1044
+
1045
+ ASSERT_OK(db_->GetMergeOperands(ReadOptions(), db_->DefaultColumnFamily(),
1046
+ key, merge_operands.data(), &get_merge_opts,
1047
+ &number_of_operands));
1048
+ ASSERT_EQ(number_of_operands, expected_merge_ops);
1049
+ }
1050
+
1051
+ std::vector<ManagedSnapshot> snapshots_;
1052
+
1053
+ static constexpr size_t num_keys = 3;
1054
+
1055
+ static constexpr char first_key[] = "first";
1056
+ static constexpr char first_merge_op1[] = "hello";
1057
+ static constexpr char first_merge_op1_upper[] = "HELLO";
1058
+ static constexpr char first_merge_op2[] = "world";
1059
+ static constexpr char first_merge_op2_upper[] = "WORLD";
1060
+
1061
+ static constexpr char second_key[] = "second";
1062
+ static constexpr char second_base_value[] = "foo";
1063
+ static constexpr char second_base_value_upper[] = "FOO";
1064
+ static constexpr char second_merge_op1[] = "bar";
1065
+ static constexpr char second_merge_op1_upper[] = "BAR";
1066
+ static constexpr char second_merge_op2[] = "baz";
1067
+ static constexpr char second_merge_op2_upper[] = "BAZ";
1068
+
1069
+ static constexpr char third_key[] = "third";
1070
+ static const WideColumns third_columns;
1071
+ static constexpr char third_merge_op1[] = "three";
1072
+ static constexpr char third_merge_op1_upper[] = "THREE";
1073
+ static constexpr char third_merge_op2[] = "four";
1074
+ static constexpr char third_merge_op2_upper[] = "FOUR";
1075
+ };
1076
+
1077
+ const WideColumns DBWideMergeV3Test::third_columns{{"one", "ONE"},
1078
+ {"two", "TWO"}};
1079
+
1080
+ TEST_F(DBWideMergeV3Test, MergeV3WideColumnOutput) {
1081
+ // A test merge operator that always returns a wide-column result. It adds any
1082
+ // base values and merge operands to a single wide-column entity, and converts
1083
+ // all column values to uppercase. In addition, it puts "none", "plain", or
1084
+ // "wide" into the value of the default column depending on the type of the
1085
+ // base value (if any).
1086
+ static constexpr char kNone[] = "none";
1087
+ static constexpr char kPlain[] = "plain";
1088
+ static constexpr char kWide[] = "wide";
1089
+
1090
+ class WideColumnOutputMergeOperator : public MergeOperator {
1091
+ public:
1092
+ bool FullMergeV3(const MergeOperationInputV3& merge_in,
1093
+ MergeOperationOutputV3* merge_out) const override {
1094
+ assert(merge_out);
1095
+
1096
+ merge_out->new_value = MergeOperationOutputV3::NewColumns();
1097
+ auto& new_columns =
1098
+ std::get<MergeOperationOutputV3::NewColumns>(merge_out->new_value);
1099
+
1100
+ auto upper = [](std::string str) {
1101
+ for (char& c : str) {
1102
+ c = static_cast<char>(std::toupper(static_cast<unsigned char>(c)));
1103
+ }
1104
+
1105
+ return str;
1106
+ };
1107
+
1108
+ std::visit(overload{[&](const std::monostate&) {
1109
+ new_columns.emplace_back(
1110
+ kDefaultWideColumnName.ToString(), kNone);
1111
+ },
1112
+ [&](const Slice& value) {
1113
+ new_columns.emplace_back(
1114
+ kDefaultWideColumnName.ToString(), kPlain);
1115
+
1116
+ const std::string val = value.ToString();
1117
+ new_columns.emplace_back(val, upper(val));
1118
+ },
1119
+ [&](const WideColumns& columns) {
1120
+ new_columns.emplace_back(
1121
+ kDefaultWideColumnName.ToString(), kWide);
1122
+
1123
+ for (const auto& column : columns) {
1124
+ new_columns.emplace_back(
1125
+ column.name().ToString(),
1126
+ upper(column.value().ToString()));
1127
+ }
1128
+ }},
1129
+ merge_in.existing_value);
1130
+
1131
+ for (const auto& operand : merge_in.operand_list) {
1132
+ const std::string op = operand.ToString();
1133
+ new_columns.emplace_back(op, upper(op));
1134
+ }
1135
+
1136
+ return true;
1137
+ }
1138
+
1139
+ const char* Name() const override {
1140
+ return "WideColumnOutputMergeOperator";
1141
+ }
1142
+ };
1143
+
1144
+ Options options = GetDefaultOptions();
1145
+ options.create_if_missing = true;
1146
+ options.merge_operator = std::make_shared<WideColumnOutputMergeOperator>();
1147
+ Reopen(options);
1148
+
1149
+ // Expected results
1150
+ // Lexicographical order: [default] < hello < world
1151
+ const WideColumns first_expected{{kDefaultWideColumnName, kNone},
1152
+ {first_merge_op1, first_merge_op1_upper},
1153
+ {first_merge_op2, first_merge_op2_upper}};
1154
+ // Lexicographical order: [default] < bar < baz < foo
1155
+ const WideColumns second_expected{
1156
+ {kDefaultWideColumnName, kPlain},
1157
+ {second_merge_op1, second_merge_op1_upper},
1158
+ {second_merge_op2, second_merge_op2_upper},
1159
+ {second_base_value, second_base_value_upper}};
1160
+ // Lexicographical order: [default] < four < one < three < two
1161
+ const WideColumns third_expected{
1162
+ {kDefaultWideColumnName, kWide},
1163
+ {third_merge_op2, third_merge_op2_upper},
1164
+ {third_columns[0].name(), third_columns[0].value()},
1165
+ {third_merge_op1, third_merge_op1_upper},
1166
+ {third_columns[1].name(), third_columns[1].value()}};
1167
+
1168
+ RunTest(first_expected, second_expected, third_expected);
1169
+ }
1170
+
1171
+ TEST_F(DBWideMergeV3Test, MergeV3PlainOutput) {
1172
+ // A test merge operator that always returns a plain value as result, namely
1173
+ // the total number of operands serialized as a string. Base values are also
1174
+ // counted as operands; specifically, a plain base value is counted as one
1175
+ // operand, while a wide-column base value is counted as as many operands as
1176
+ // the number of columns.
1177
+ class PlainOutputMergeOperator : public MergeOperator {
1178
+ public:
1179
+ bool FullMergeV3(const MergeOperationInputV3& merge_in,
1180
+ MergeOperationOutputV3* merge_out) const override {
1181
+ assert(merge_out);
1182
+
1183
+ size_t count = 0;
1184
+ std::visit(
1185
+ overload{[&](const std::monostate&) {},
1186
+ [&](const Slice&) { count = 1; },
1187
+ [&](const WideColumns& columns) { count = columns.size(); }},
1188
+ merge_in.existing_value);
1189
+
1190
+ count += merge_in.operand_list.size();
1191
+
1192
+ merge_out->new_value = std::string();
1193
+ std::get<std::string>(merge_out->new_value) = std::to_string(count);
1194
+
1195
+ return true;
1196
+ }
1197
+
1198
+ const char* Name() const override { return "PlainOutputMergeOperator"; }
1199
+ };
1200
+
1201
+ Options options = GetDefaultOptions();
1202
+ options.create_if_missing = true;
1203
+ options.merge_operator = std::make_shared<PlainOutputMergeOperator>();
1204
+ Reopen(options);
1205
+
1206
+ const WideColumns first_expected{{kDefaultWideColumnName, "2"}};
1207
+ const WideColumns second_expected{{kDefaultWideColumnName, "3"}};
1208
+ const WideColumns third_expected{{kDefaultWideColumnName, "4"}};
1209
+
1210
+ RunTest(first_expected, second_expected, third_expected);
1211
+ }
1212
+
688
1213
  TEST_F(DBWideBasicTest, CompactionFilter) {
689
1214
  Options options = GetDefaultOptions();
690
1215
  options.create_if_missing = true;
@@ -9,17 +9,16 @@
9
9
  #include <cassert>
10
10
  #include <limits>
11
11
 
12
+ #include "db/wide/wide_columns_helper.h"
12
13
  #include "rocksdb/slice.h"
13
14
  #include "util/autovector.h"
14
15
  #include "util/coding.h"
15
16
 
16
17
  namespace ROCKSDB_NAMESPACE {
17
18
 
18
- Status WideColumnSerialization::SerializeImpl(const Slice* value_of_default,
19
- const WideColumns& columns,
20
- std::string& output) {
21
- const size_t num_columns =
22
- value_of_default ? columns.size() + 1 : columns.size();
19
+ Status WideColumnSerialization::Serialize(const WideColumns& columns,
20
+ std::string& output) {
21
+ const size_t num_columns = columns.size();
23
22
 
24
23
  if (num_columns > static_cast<size_t>(std::numeric_limits<uint32_t>::max())) {
25
24
  return Status::InvalidArgument("Too many wide columns");
@@ -30,17 +29,6 @@ Status WideColumnSerialization::SerializeImpl(const Slice* value_of_default,
30
29
  PutVarint32(&output, static_cast<uint32_t>(num_columns));
31
30
 
32
31
  const Slice* prev_name = nullptr;
33
- if (value_of_default) {
34
- if (value_of_default->size() >
35
- static_cast<size_t>(std::numeric_limits<uint32_t>::max())) {
36
- return Status::InvalidArgument("Wide column value too long");
37
- }
38
-
39
- PutLengthPrefixedSlice(&output, kDefaultWideColumnName);
40
- PutVarint32(&output, static_cast<uint32_t>(value_of_default->size()));
41
-
42
- prev_name = &kDefaultWideColumnName;
43
- }
44
32
 
45
33
  for (size_t i = 0; i < columns.size(); ++i) {
46
34
  const WideColumn& column = columns[i];
@@ -67,10 +55,6 @@ Status WideColumnSerialization::SerializeImpl(const Slice* value_of_default,
67
55
  prev_name = &name;
68
56
  }
69
57
 
70
- if (value_of_default) {
71
- output.append(value_of_default->data(), value_of_default->size());
72
- }
73
-
74
58
  for (const auto& column : columns) {
75
59
  const Slice& value = column.value();
76
60
 
@@ -169,12 +153,12 @@ Status WideColumnSerialization::GetValueOfDefaultColumn(Slice& input,
169
153
  return s;
170
154
  }
171
155
 
172
- if (columns.empty() || columns[0].name() != kDefaultWideColumnName) {
156
+ if (!WideColumnsHelper::HasDefaultColumn(columns)) {
173
157
  value.clear();
174
158
  return Status::OK();
175
159
  }
176
160
 
177
- value = columns[0].value();
161
+ value = WideColumnsHelper::GetDefaultColumn(columns);
178
162
 
179
163
  return Status::OK();
180
164
  }
@@ -44,9 +44,6 @@ class Slice;
44
44
  class WideColumnSerialization {
45
45
  public:
46
46
  static Status Serialize(const WideColumns& columns, std::string& output);
47
- static Status Serialize(const Slice& value_of_default,
48
- const WideColumns& other_columns,
49
- std::string& output);
50
47
 
51
48
  static Status Deserialize(Slice& input, WideColumns& columns);
52
49
 
@@ -55,23 +52,6 @@ class WideColumnSerialization {
55
52
  static Status GetValueOfDefaultColumn(Slice& input, Slice& value);
56
53
 
57
54
  static constexpr uint32_t kCurrentVersion = 1;
58
-
59
- private:
60
- static Status SerializeImpl(const Slice* value_of_default,
61
- const WideColumns& columns, std::string& output);
62
55
  };
63
56
 
64
- inline Status WideColumnSerialization::Serialize(const WideColumns& columns,
65
- std::string& output) {
66
- constexpr Slice* value_of_default = nullptr;
67
-
68
- return SerializeImpl(value_of_default, columns, output);
69
- }
70
-
71
- inline Status WideColumnSerialization::Serialize(
72
- const Slice& value_of_default, const WideColumns& other_columns,
73
- std::string& output) {
74
- return SerializeImpl(&value_of_default, other_columns, output);
75
- }
76
-
77
57
  } // namespace ROCKSDB_NAMESPACE
@@ -124,25 +124,6 @@ TEST(WideColumnSerializationTest, SerializeDeserialize) {
124
124
  }
125
125
  }
126
126
 
127
- TEST(WideColumnSerializationTest, SerializeWithPrepend) {
128
- Slice value_of_default("baz");
129
- WideColumns other_columns{{"foo", "bar"}, {"hello", "world"}};
130
-
131
- std::string output;
132
- ASSERT_OK(WideColumnSerialization::Serialize(value_of_default, other_columns,
133
- output));
134
-
135
- Slice input(output);
136
-
137
- WideColumns deserialized_columns;
138
- ASSERT_OK(WideColumnSerialization::Deserialize(input, deserialized_columns));
139
-
140
- WideColumns expected_columns{{kDefaultWideColumnName, value_of_default},
141
- other_columns[0],
142
- other_columns[1]};
143
- ASSERT_EQ(deserialized_columns, expected_columns);
144
- }
145
-
146
127
  TEST(WideColumnSerializationTest, SerializeDuplicateError) {
147
128
  WideColumns columns{{"foo", "bar"}, {"foo", "baz"}};
148
129
  std::string output;
@@ -151,16 +132,6 @@ TEST(WideColumnSerializationTest, SerializeDuplicateError) {
151
132
  WideColumnSerialization::Serialize(columns, output).IsCorruption());
152
133
  }
153
134
 
154
- TEST(WideColumnSerializationTest, SerializeWithPrependDuplicateError) {
155
- Slice value_of_default("baz");
156
- WideColumns other_columns{{kDefaultWideColumnName, "dup"}, {"foo", "bar"}};
157
-
158
- std::string output;
159
- ASSERT_TRUE(WideColumnSerialization::Serialize(value_of_default,
160
- other_columns, output)
161
- .IsCorruption());
162
- }
163
-
164
135
  TEST(WideColumnSerializationTest, SerializeOutOfOrderError) {
165
136
  WideColumns columns{{"hello", "world"}, {"foo", "bar"}};
166
137
  std::string output;