@nxtedition/rocksdb 7.0.0-alpha.6 → 7.0.0-alpha.7

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 (205) hide show
  1. package/binding.cc +1 -1
  2. package/deps/rocksdb/rocksdb/CMakeLists.txt +10 -3
  3. package/deps/rocksdb/rocksdb/Makefile +8 -1
  4. package/deps/rocksdb/rocksdb/TARGETS +14 -0
  5. package/deps/rocksdb/rocksdb/cache/cache.cc +50 -2
  6. package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +9 -3
  7. package/deps/rocksdb/rocksdb/cache/cache_test.cc +111 -33
  8. package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +71 -31
  9. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.cc +31 -30
  10. package/deps/rocksdb/rocksdb/cache/fast_lru_cache.h +21 -8
  11. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +35 -38
  12. package/deps/rocksdb/rocksdb/cache/lru_cache.h +22 -9
  13. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +48 -0
  14. package/deps/rocksdb/rocksdb/db/blob/db_blob_compaction_test.cc +78 -0
  15. package/deps/rocksdb/rocksdb/db/builder.cc +7 -5
  16. package/deps/rocksdb/rocksdb/db/c.cc +777 -108
  17. package/deps/rocksdb/rocksdb/db/c_test.c +290 -30
  18. package/deps/rocksdb/rocksdb/db/column_family.cc +13 -0
  19. package/deps/rocksdb/rocksdb/db/column_family_test.cc +24 -36
  20. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +18 -4
  21. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +24 -6
  22. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +6 -9
  23. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +38 -40
  24. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +4 -4
  25. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +14 -17
  26. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +3 -5
  27. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +253 -24
  28. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +9 -3
  29. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +3 -2
  30. package/deps/rocksdb/rocksdb/db/corruption_test.cc +67 -10
  31. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +83 -7
  32. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +5 -2
  33. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +68 -0
  34. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +40 -1
  35. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.cc +94 -23
  36. package/deps/rocksdb/rocksdb/db/db_impl/compacted_db_impl.h +17 -4
  37. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +263 -58
  38. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +186 -23
  39. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +43 -14
  40. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +24 -28
  41. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +116 -83
  42. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +13 -5
  43. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +71 -34
  44. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +8 -3
  45. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +72 -33
  46. package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +629 -0
  47. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +438 -10
  48. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +43 -2
  49. package/deps/rocksdb/rocksdb/db/db_test.cc +41 -1
  50. package/deps/rocksdb/rocksdb/db/db_test2.cc +41 -12
  51. package/deps/rocksdb/rocksdb/db/db_test_util.h +1 -0
  52. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +90 -0
  53. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +109 -16
  54. package/deps/rocksdb/rocksdb/db/dbformat.h +1 -1
  55. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +54 -0
  56. package/deps/rocksdb/rocksdb/db/flush_job.cc +3 -3
  57. package/deps/rocksdb/rocksdb/db/log_reader.cc +22 -4
  58. package/deps/rocksdb/rocksdb/db/log_reader.h +4 -0
  59. package/deps/rocksdb/rocksdb/db/memtable.cc +4 -0
  60. package/deps/rocksdb/rocksdb/db/post_memtable_callback.h +25 -0
  61. package/deps/rocksdb/rocksdb/db/repair.cc +1 -1
  62. package/deps/rocksdb/rocksdb/db/repair_test.cc +3 -2
  63. package/deps/rocksdb/rocksdb/db/snapshot_impl.h +65 -2
  64. package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +3 -2
  65. package/deps/rocksdb/rocksdb/db/version_set.cc +52 -0
  66. package/deps/rocksdb/rocksdb/db/version_set.h +57 -43
  67. package/deps/rocksdb/rocksdb/db/wal_manager.cc +14 -4
  68. package/deps/rocksdb/rocksdb/db/wal_manager.h +16 -0
  69. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +141 -0
  70. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +55 -0
  71. package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +292 -0
  72. package/deps/rocksdb/rocksdb/db/write_thread.h +6 -1
  73. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +2 -0
  74. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +42 -19
  75. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +28 -0
  76. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +6 -2
  77. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +11 -5
  78. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +18 -12
  79. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +74 -167
  80. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +4 -9
  81. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +16 -9
  82. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +117 -10
  83. package/deps/rocksdb/rocksdb/env/composite_env.cc +7 -0
  84. package/deps/rocksdb/rocksdb/env/env.cc +4 -0
  85. package/deps/rocksdb/rocksdb/env/env_posix.cc +3 -3
  86. package/deps/rocksdb/rocksdb/env/env_test.cc +5 -5
  87. package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +45 -0
  88. package/deps/rocksdb/rocksdb/env/file_system_tracer.h +14 -0
  89. package/deps/rocksdb/rocksdb/env/fs_posix.cc +1 -1
  90. package/deps/rocksdb/rocksdb/env/io_posix.cc +50 -24
  91. package/deps/rocksdb/rocksdb/env/io_posix.h +9 -7
  92. package/deps/rocksdb/rocksdb/env/mock_env.cc +9 -3
  93. package/deps/rocksdb/rocksdb/file/file_util.cc +4 -1
  94. package/deps/rocksdb/rocksdb/file/filename.cc +14 -0
  95. package/deps/rocksdb/rocksdb/file/line_file_reader.cc +9 -4
  96. package/deps/rocksdb/rocksdb/file/line_file_reader.h +3 -2
  97. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +157 -0
  98. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +8 -1
  99. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +68 -32
  100. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +20 -6
  101. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +10 -6
  102. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +4 -2
  103. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +16 -0
  104. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +231 -2
  105. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +4 -2
  106. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +3 -0
  107. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +13 -1
  108. package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +4 -20
  109. package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +1 -1
  110. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +31 -0
  111. package/deps/rocksdb/rocksdb/include/rocksdb/snapshot.h +2 -0
  112. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +4 -20
  113. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +2 -2
  114. package/deps/rocksdb/rocksdb/include/rocksdb/trace_record.h +1 -0
  115. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +1 -0
  116. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +34 -0
  117. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +36 -0
  118. package/deps/rocksdb/rocksdb/include/rocksdb/wide_columns.h +74 -0
  119. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +36 -3
  120. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +16 -3
  121. package/deps/rocksdb/rocksdb/logging/env_logger.h +3 -3
  122. package/deps/rocksdb/rocksdb/logging/log_buffer.cc +2 -2
  123. package/deps/rocksdb/rocksdb/logging/log_buffer.h +1 -1
  124. package/deps/rocksdb/rocksdb/logging/posix_logger.h +3 -3
  125. package/deps/rocksdb/rocksdb/memory/arena.cc +0 -1
  126. package/deps/rocksdb/rocksdb/microbench/db_basic_bench.cc +61 -73
  127. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +6 -5
  128. package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +6 -0
  129. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +7 -3
  130. package/deps/rocksdb/rocksdb/options/cf_options.cc +6 -0
  131. package/deps/rocksdb/rocksdb/options/cf_options.h +3 -0
  132. package/deps/rocksdb/rocksdb/options/options.cc +4 -1
  133. package/deps/rocksdb/rocksdb/options/options_helper.cc +1 -0
  134. package/deps/rocksdb/rocksdb/options/options_parser.cc +1 -1
  135. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +1 -0
  136. package/deps/rocksdb/rocksdb/options/options_test.cc +4 -0
  137. package/deps/rocksdb/rocksdb/port/port_posix.h +0 -2
  138. package/deps/rocksdb/rocksdb/port/sys_time.h +27 -11
  139. package/deps/rocksdb/rocksdb/port/win/env_win.cc +1 -1
  140. package/deps/rocksdb/rocksdb/port/win/io_win.cc +16 -0
  141. package/deps/rocksdb/rocksdb/port/win/io_win.h +11 -2
  142. package/deps/rocksdb/rocksdb/port/win/port_win.cc +1 -1
  143. package/deps/rocksdb/rocksdb/port/win/port_win.h +2 -16
  144. package/deps/rocksdb/rocksdb/port/win/win_jemalloc.cc +2 -2
  145. package/deps/rocksdb/rocksdb/port/win/win_logger.cc +2 -2
  146. package/deps/rocksdb/rocksdb/rocksdb.pc.in +4 -5
  147. package/deps/rocksdb/rocksdb/src.mk +3 -0
  148. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +7 -5
  149. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +39 -43
  150. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +2 -4
  151. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +42 -34
  152. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +1 -7
  153. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +2 -2
  154. package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +2 -2
  155. package/deps/rocksdb/rocksdb/table/block_based/block_prefix_index.cc +7 -13
  156. package/deps/rocksdb/rocksdb/table/block_based/block_prefix_index.h +9 -5
  157. package/deps/rocksdb/rocksdb/table/block_based/block_type.h +5 -2
  158. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +4 -4
  159. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +6 -2
  160. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +8 -5
  161. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +2 -2
  162. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +19 -14
  163. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +2 -0
  164. package/deps/rocksdb/rocksdb/table/format.h +1 -3
  165. package/deps/rocksdb/rocksdb/table/get_context.cc +5 -0
  166. package/deps/rocksdb/rocksdb/table/multiget_context.h +3 -0
  167. package/deps/rocksdb/rocksdb/table/scoped_arena_iterator.h +3 -4
  168. package/deps/rocksdb/rocksdb/table/table_test.cc +1 -1
  169. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +102 -6
  170. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +1 -0
  171. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +19 -2
  172. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +2 -1
  173. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +2 -1
  174. package/deps/rocksdb/rocksdb/util/aligned_buffer.h +2 -4
  175. package/deps/rocksdb/rocksdb/util/autovector.h +11 -1
  176. package/deps/rocksdb/rocksdb/util/cleanable.cc +1 -0
  177. package/deps/rocksdb/rocksdb/util/compression.h +5 -7
  178. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +14 -8
  179. package/deps/rocksdb/rocksdb/util/string_util.cc +1 -1
  180. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine.cc +33 -63
  181. package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +1 -1
  182. package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +3 -2
  183. package/deps/rocksdb/rocksdb/utilities/counted_fs.cc +14 -0
  184. package/deps/rocksdb/rocksdb/utilities/counted_fs.h +7 -1
  185. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +7 -0
  186. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +1 -0
  187. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +8 -0
  188. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +3 -0
  189. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_bench.cc +6 -4
  190. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +2 -3
  191. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +34 -21
  192. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +31 -7
  193. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +1 -0
  194. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +63 -0
  195. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +40 -0
  196. package/deps/rocksdb/rocksdb/utilities/transactions/timestamped_snapshot_test.cc +426 -0
  197. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +37 -0
  198. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +6 -0
  199. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +16 -18
  200. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +18 -0
  201. package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +61 -0
  202. package/deps/rocksdb/rocksdb.gyp +1 -0
  203. package/index.js +2 -2
  204. package/package.json +1 -1
  205. package/prebuilds/darwin-arm64/node.napi.node +0 -0
package/binding.cc CHANGED
@@ -1479,7 +1479,7 @@ struct NextWorker final : public Worker {
1479
1479
  cache_.push_back(v.ToString());
1480
1480
  }
1481
1481
 
1482
- if (bytesRead > iterator_->highWaterMarkBytes_ || cache_.size() / 2 >= size_) {
1482
+ if ((iterator_->highWaterMarkBytes_ != -1 && bytesRead > iterator_->highWaterMarkBytes_) || cache_.size() / 2 >= size_) {
1483
1483
  finished_ = false;
1484
1484
  return rocksdb::Status::OK();
1485
1485
  }
@@ -89,7 +89,11 @@ include(CMakeDependentOption)
89
89
  if(MSVC)
90
90
  option(WITH_GFLAGS "build with GFlags" OFF)
91
91
  option(WITH_XPRESS "build with windows built in compression" OFF)
92
- include(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty.inc)
92
+ option(ROCKSDB_SKIP_THIRDPARTY "skip thirdparty.inc" OFF)
93
+
94
+ if(NOT ROCKSDB_SKIP_THIRDPARTY)
95
+ include(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty.inc)
96
+ endif()
93
97
  else()
94
98
  if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD" AND NOT CMAKE_SYSTEM_NAME MATCHES "kFreeBSD")
95
99
  # FreeBSD has jemalloc as default malloc
@@ -671,6 +675,7 @@ set(SOURCES
671
675
  db/version_set.cc
672
676
  db/wal_edit.cc
673
677
  db/wal_manager.cc
678
+ db/wide/wide_column_serialization.cc
674
679
  db/write_batch.cc
675
680
  db/write_batch_base.cc
676
681
  db/write_controller.cc
@@ -1122,8 +1127,8 @@ if(NOT WIN32 OR ROCKSDB_INSTALL_ON_WINDOWS)
1122
1127
  )
1123
1128
 
1124
1129
  configure_file(
1125
- ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.pc.in
1126
- ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc
1130
+ ${PROJECT_NAME}.pc.in
1131
+ ${PROJECT_NAME}.pc
1127
1132
  @ONLY
1128
1133
  )
1129
1134
 
@@ -1290,6 +1295,7 @@ if(WITH_TESTS)
1290
1295
  db/version_set_test.cc
1291
1296
  db/wal_manager_test.cc
1292
1297
  db/wal_edit_test.cc
1298
+ db/wide/wide_column_serialization_test.cc
1293
1299
  db/write_batch_test.cc
1294
1300
  db/write_callback_test.cc
1295
1301
  db/write_controller_test.cc
@@ -1384,6 +1390,7 @@ if(WITH_TESTS)
1384
1390
  utilities/transactions/write_prepared_transaction_test.cc
1385
1391
  utilities/transactions/write_unprepared_transaction_test.cc
1386
1392
  utilities/transactions/lock/range/range_locking_test.cc
1393
+ utilities/transactions/timestamped_snapshot_test.cc
1387
1394
  utilities/ttl/ttl_test.cc
1388
1395
  utilities/util_merge_operators_test.cc
1389
1396
  utilities/write_batch_with_index/write_batch_with_index_test.cc
@@ -1777,6 +1777,9 @@ write_prepared_transaction_test: $(OBJ_DIR)/utilities/transactions/write_prepare
1777
1777
  write_unprepared_transaction_test: $(OBJ_DIR)/utilities/transactions/write_unprepared_transaction_test.o $(TEST_LIBRARY) $(LIBRARY)
1778
1778
  $(AM_LINK)
1779
1779
 
1780
+ timestamped_snapshot_test: $(OBJ_DIR)/utilities/transactions/timestamped_snapshot_test.o $(TEST_LIBRARY) $(LIBRARY)
1781
+ $(AM_LINK)
1782
+
1780
1783
  sst_dump: $(OBJ_DIR)/tools/sst_dump.o $(TOOLS_LIBRARY) $(LIBRARY)
1781
1784
  $(AM_LINK)
1782
1785
 
@@ -1876,7 +1879,7 @@ testutil_test: $(OBJ_DIR)/test_util/testutil_test.o $(TEST_LIBRARY) $(LIBRARY)
1876
1879
  io_tracer_test: $(OBJ_DIR)/trace_replay/io_tracer_test.o $(OBJ_DIR)/trace_replay/io_tracer.o $(TEST_LIBRARY) $(LIBRARY)
1877
1880
  $(AM_LINK)
1878
1881
 
1879
- prefetch_test: $(OBJ_DIR)/file/prefetch_test.o $(TEST_LIBRARY) $(LIBRARY)
1882
+ prefetch_test: $(OBJ_DIR)/file/prefetch_test.o $(OBJ_DIR)/tools/io_tracer_parser_tool.o $(TEST_LIBRARY) $(LIBRARY)
1880
1883
  $(AM_LINK)
1881
1884
 
1882
1885
  io_tracer_parser_test: $(OBJ_DIR)/tools/io_tracer_parser_test.o $(OBJ_DIR)/tools/io_tracer_parser_tool.o $(TEST_LIBRARY) $(LIBRARY)
@@ -1902,6 +1905,10 @@ db_basic_bench: $(OBJ_DIR)/microbench/db_basic_bench.o $(LIBRARY)
1902
1905
 
1903
1906
  cache_reservation_manager_test: $(OBJ_DIR)/cache/cache_reservation_manager_test.o $(TEST_LIBRARY) $(LIBRARY)
1904
1907
  $(AM_LINK)
1908
+
1909
+ wide_column_serialization_test: $(OBJ_DIR)/db/wide/wide_column_serialization_test.o $(TEST_LIBRARY) $(LIBRARY)
1910
+ $(AM_LINK)
1911
+
1905
1912
  #-------------------------------------------------
1906
1913
  # make install related stuff
1907
1914
  PREFIX ?= /usr/local
@@ -91,6 +91,7 @@ cpp_library_wrapper(name="rocksdb_lib", srcs=[
91
91
  "db/version_set.cc",
92
92
  "db/wal_edit.cc",
93
93
  "db/wal_manager.cc",
94
+ "db/wide/wide_column_serialization.cc",
94
95
  "db/write_batch.cc",
95
96
  "db/write_batch_base.cc",
96
97
  "db/write_controller.cc",
@@ -419,6 +420,7 @@ cpp_library_wrapper(name="rocksdb_whole_archive_lib", srcs=[
419
420
  "db/version_set.cc",
420
421
  "db/wal_edit.cc",
421
422
  "db/wal_manager.cc",
423
+ "db/wide/wide_column_serialization.cc",
422
424
  "db/write_batch.cc",
423
425
  "db/write_batch_base.cc",
424
426
  "db/write_controller.cc",
@@ -5766,6 +5768,12 @@ cpp_unittest_wrapper(name="timer_test",
5766
5768
  extra_compiler_flags=[])
5767
5769
 
5768
5770
 
5771
+ cpp_unittest_wrapper(name="timestamped_snapshot_test",
5772
+ srcs=["utilities/transactions/timestamped_snapshot_test.cc"],
5773
+ deps=[":rocksdb_test_lib"],
5774
+ extra_compiler_flags=[])
5775
+
5776
+
5769
5777
  cpp_unittest_wrapper(name="trace_analyzer_test",
5770
5778
  srcs=["tools/trace_analyzer_test.cc"],
5771
5779
  deps=[":rocksdb_test_lib"],
@@ -5814,6 +5822,12 @@ cpp_unittest_wrapper(name="wal_manager_test",
5814
5822
  extra_compiler_flags=[])
5815
5823
 
5816
5824
 
5825
+ cpp_unittest_wrapper(name="wide_column_serialization_test",
5826
+ srcs=["db/wide/wide_column_serialization_test.cc"],
5827
+ deps=[":rocksdb_test_lib"],
5828
+ extra_compiler_flags=[])
5829
+
5830
+
5817
5831
  cpp_unittest_wrapper(name="work_queue_test",
5818
5832
  srcs=["util/work_queue_test.cc"],
5819
5833
  deps=[":rocksdb_test_lib"],
@@ -34,13 +34,61 @@ static std::unordered_map<std::string, OptionTypeInfo>
34
34
  OptionType::kDouble, OptionVerificationType::kNormal,
35
35
  OptionTypeFlags::kMutable}},
36
36
  };
37
+
38
+ static std::unordered_map<std::string, OptionTypeInfo>
39
+ comp_sec_cache_options_type_info = {
40
+ {"capacity",
41
+ {offsetof(struct CompressedSecondaryCacheOptions, capacity),
42
+ OptionType::kSizeT, OptionVerificationType::kNormal,
43
+ OptionTypeFlags::kMutable}},
44
+ {"num_shard_bits",
45
+ {offsetof(struct CompressedSecondaryCacheOptions, num_shard_bits),
46
+ OptionType::kInt, OptionVerificationType::kNormal,
47
+ OptionTypeFlags::kMutable}},
48
+ {"compression_type",
49
+ {offsetof(struct CompressedSecondaryCacheOptions, compression_type),
50
+ OptionType::kCompressionType, OptionVerificationType::kNormal,
51
+ OptionTypeFlags::kMutable}},
52
+ {"compress_format_version",
53
+ {offsetof(struct CompressedSecondaryCacheOptions,
54
+ compress_format_version),
55
+ OptionType::kUInt32T, OptionVerificationType::kNormal,
56
+ OptionTypeFlags::kMutable}},
57
+ };
37
58
  #endif // ROCKSDB_LITE
38
59
 
39
60
  Status SecondaryCache::CreateFromString(
40
61
  const ConfigOptions& config_options, const std::string& value,
41
62
  std::shared_ptr<SecondaryCache>* result) {
42
- return LoadSharedObject<SecondaryCache>(config_options, value, nullptr,
43
- result);
63
+ if (value.find("compressed_secondary_cache://") == 0) {
64
+ std::string args = value;
65
+ args.erase(0, std::strlen("compressed_secondary_cache://"));
66
+ Status status;
67
+ std::shared_ptr<SecondaryCache> sec_cache;
68
+
69
+ #ifndef ROCKSDB_LITE
70
+ CompressedSecondaryCacheOptions sec_cache_opts;
71
+ status = OptionTypeInfo::ParseStruct(config_options, "",
72
+ &comp_sec_cache_options_type_info, "",
73
+ args, &sec_cache_opts);
74
+ if (status.ok()) {
75
+ sec_cache = NewCompressedSecondaryCache(sec_cache_opts);
76
+ }
77
+
78
+ #else
79
+ (void)config_options;
80
+ status = Status::NotSupported(
81
+ "Cannot load compressed secondary cache in LITE mode ", args);
82
+ #endif //! ROCKSDB_LITE
83
+
84
+ if (status.ok()) {
85
+ result->swap(sec_cache);
86
+ }
87
+ return status;
88
+ } else {
89
+ return LoadSharedObject<SecondaryCache>(config_options, value, nullptr,
90
+ result);
91
+ }
44
92
  }
45
93
 
46
94
  Status Cache::CreateFromString(const ConfigOptions& config_options,
@@ -12,6 +12,7 @@
12
12
  #include <set>
13
13
  #include <sstream>
14
14
 
15
+ #include "cache/fast_lru_cache.h"
15
16
  #include "db/db_impl/db_impl.h"
16
17
  #include "monitoring/histogram.h"
17
18
  #include "port/port.h"
@@ -76,7 +77,7 @@ DEFINE_string(secondary_cache_uri, "",
76
77
  static class std::shared_ptr<ROCKSDB_NAMESPACE::SecondaryCache> secondary_cache;
77
78
  #endif // ROCKSDB_LITE
78
79
 
79
- DEFINE_bool(use_clock_cache, false, "");
80
+ DEFINE_string(cache_type, "lru_cache", "Type of block cache.");
80
81
 
81
82
  // ## BEGIN stress_cache_key sub-tool options ##
82
83
  // See class StressCacheKey below.
@@ -279,13 +280,15 @@ class CacheBench {
279
280
  if (max_key > (static_cast<uint64_t>(1) << max_log_)) max_log_++;
280
281
  }
281
282
 
282
- if (FLAGS_use_clock_cache) {
283
+ if (FLAGS_cache_type == "clock_cache") {
283
284
  cache_ = NewClockCache(FLAGS_cache_size, FLAGS_num_shard_bits);
284
285
  if (!cache_) {
285
286
  fprintf(stderr, "Clock cache not supported.\n");
286
287
  exit(1);
287
288
  }
288
- } else {
289
+ } else if (FLAGS_cache_type == "fast_lru_cache") {
290
+ cache_ = NewFastLRUCache(FLAGS_cache_size, FLAGS_num_shard_bits);
291
+ } else if (FLAGS_cache_type == "lru_cache") {
289
292
  LRUCacheOptions opts(FLAGS_cache_size, FLAGS_num_shard_bits, false, 0.5);
290
293
  #ifndef ROCKSDB_LITE
291
294
  if (!FLAGS_secondary_cache_uri.empty()) {
@@ -303,6 +306,9 @@ class CacheBench {
303
306
  #endif // ROCKSDB_LITE
304
307
 
305
308
  cache_ = NewLRUCache(opts);
309
+ } else {
310
+ fprintf(stderr, "Cache type not supported.");
311
+ exit(1);
306
312
  }
307
313
  }
308
314
 
@@ -18,24 +18,43 @@
18
18
  #include "cache/clock_cache.h"
19
19
  #include "cache/fast_lru_cache.h"
20
20
  #include "cache/lru_cache.h"
21
+ #include "port/stack_trace.h"
21
22
  #include "test_util/testharness.h"
22
23
  #include "util/coding.h"
23
24
  #include "util/string_util.h"
24
25
 
25
26
  namespace ROCKSDB_NAMESPACE {
26
27
 
28
+ namespace {
29
+
27
30
  // Conversions between numeric keys/values and the types expected by Cache.
28
- static std::string EncodeKey(int k) {
31
+ std::string EncodeKey16Bytes(int k) {
32
+ std::string result;
33
+ PutFixed32(&result, k);
34
+ result.append(std::string(12, 'a')); // Because we need a 16B output, we
35
+ // add a 12-byte padding.
36
+ return result;
37
+ }
38
+
39
+ int DecodeKey16Bytes(const Slice& k) {
40
+ assert(k.size() == 16);
41
+ return DecodeFixed32(k.data()); // Decodes only the first 4 bytes of k.
42
+ }
43
+
44
+ std::string EncodeKey32Bits(int k) {
29
45
  std::string result;
30
46
  PutFixed32(&result, k);
31
47
  return result;
32
48
  }
33
- static int DecodeKey(const Slice& k) {
49
+
50
+ int DecodeKey32Bits(const Slice& k) {
34
51
  assert(k.size() == 4);
35
52
  return DecodeFixed32(k.data());
36
53
  }
37
- static void* EncodeValue(uintptr_t v) { return reinterpret_cast<void*>(v); }
38
- static int DecodeValue(void* v) {
54
+
55
+ void* EncodeValue(uintptr_t v) { return reinterpret_cast<void*>(v); }
56
+
57
+ int DecodeValue(void* v) {
39
58
  return static_cast<int>(reinterpret_cast<uintptr_t>(v));
40
59
  }
41
60
 
@@ -50,12 +69,19 @@ void eraseDeleter(const Slice& /*key*/, void* value) {
50
69
  cache->Erase("foo");
51
70
  }
52
71
 
72
+ } // anonymous namespace
73
+
53
74
  class CacheTest : public testing::TestWithParam<std::string> {
54
75
  public:
55
76
  static CacheTest* current_;
77
+ static std::string type_;
56
78
 
57
79
  static void Deleter(const Slice& key, void* v) {
58
- current_->deleted_keys_.push_back(DecodeKey(key));
80
+ if (type_ == kFast) {
81
+ current_->deleted_keys_.push_back(DecodeKey16Bytes(key));
82
+ } else {
83
+ current_->deleted_keys_.push_back(DecodeKey32Bits(key));
84
+ }
59
85
  current_->deleted_values_.push_back(DecodeValue(v));
60
86
  }
61
87
 
@@ -74,6 +100,7 @@ class CacheTest : public testing::TestWithParam<std::string> {
74
100
  : cache_(NewCache(kCacheSize, kNumShardBits, false)),
75
101
  cache2_(NewCache(kCacheSize2, kNumShardBits2, false)) {
76
102
  current_ = this;
103
+ type_ = GetParam();
77
104
  }
78
105
 
79
106
  ~CacheTest() override {}
@@ -116,6 +143,27 @@ class CacheTest : public testing::TestWithParam<std::string> {
116
143
  return nullptr;
117
144
  }
118
145
 
146
+ // These functions encode/decode keys in tests cases that use
147
+ // int keys.
148
+ // Currently, FastLRUCache requires keys to be 16B long, whereas
149
+ // LRUCache and ClockCache don't, so the encoding depends on
150
+ // the cache type.
151
+ std::string EncodeKey(int k) {
152
+ if (GetParam() == kFast) {
153
+ return EncodeKey16Bytes(k);
154
+ } else {
155
+ return EncodeKey32Bits(k);
156
+ }
157
+ }
158
+
159
+ int DecodeKey(const Slice& k) {
160
+ if (GetParam() == kFast) {
161
+ return DecodeKey16Bytes(k);
162
+ } else {
163
+ return DecodeKey32Bits(k);
164
+ }
165
+ }
166
+
119
167
  int Lookup(std::shared_ptr<Cache> cache, int key) {
120
168
  Cache::Handle* handle = cache->Lookup(EncodeKey(key));
121
169
  const int r = (handle == nullptr) ? -1 : DecodeValue(cache->Value(handle));
@@ -159,11 +207,18 @@ class CacheTest : public testing::TestWithParam<std::string> {
159
207
  Erase(cache2_, key);
160
208
  }
161
209
  };
210
+
162
211
  CacheTest* CacheTest::current_;
212
+ std::string CacheTest::type_;
163
213
 
164
214
  class LRUCacheTest : public CacheTest {};
165
215
 
166
216
  TEST_P(CacheTest, UsageTest) {
217
+ if (GetParam() == kFast) {
218
+ ROCKSDB_GTEST_BYPASS("FastLRUCache requires 16 byte keys.");
219
+ return;
220
+ }
221
+
167
222
  // cache is std::shared_ptr and will be automatically cleaned up.
168
223
  const uint64_t kCapacity = 100000;
169
224
  auto cache = NewCache(kCapacity, 8, false, kDontChargeCacheMetadata);
@@ -208,6 +263,11 @@ TEST_P(CacheTest, UsageTest) {
208
263
  }
209
264
 
210
265
  TEST_P(CacheTest, PinnedUsageTest) {
266
+ if (GetParam() == kFast) {
267
+ ROCKSDB_GTEST_BYPASS("FastLRUCache requires 16 byte keys.");
268
+ return;
269
+ }
270
+
211
271
  // cache is std::shared_ptr and will be automatically cleaned up.
212
272
  const uint64_t kCapacity = 200000;
213
273
  auto cache = NewCache(kCapacity, 8, false, kDontChargeCacheMetadata);
@@ -460,12 +520,22 @@ TEST_P(CacheTest, EvictionPolicyRef) {
460
520
  }
461
521
 
462
522
  TEST_P(CacheTest, EvictEmptyCache) {
523
+ if (GetParam() == kFast) {
524
+ ROCKSDB_GTEST_BYPASS("FastLRUCache requires 16 byte keys.");
525
+ return;
526
+ }
527
+
463
528
  // Insert item large than capacity to trigger eviction on empty cache.
464
529
  auto cache = NewCache(1, 0, false);
465
530
  ASSERT_OK(cache->Insert("foo", nullptr, 10, dumbDeleter));
466
531
  }
467
532
 
468
533
  TEST_P(CacheTest, EraseFromDeleter) {
534
+ if (GetParam() == kFast) {
535
+ ROCKSDB_GTEST_BYPASS("FastLRUCache requires 16 byte keys.");
536
+ return;
537
+ }
538
+
469
539
  // Have deleter which will erase item from cache, which will re-enter
470
540
  // the cache at that point.
471
541
  std::shared_ptr<Cache> cache = NewCache(10, 0, false);
@@ -534,9 +604,9 @@ TEST_P(CacheTest, NewId) {
534
604
 
535
605
  class Value {
536
606
  public:
537
- explicit Value(size_t v) : v_(v) { }
607
+ explicit Value(int v) : v_(v) {}
538
608
 
539
- size_t v_;
609
+ int v_;
540
610
  };
541
611
 
542
612
  namespace {
@@ -584,8 +654,8 @@ TEST_P(CacheTest, SetCapacity) {
584
654
  std::shared_ptr<Cache> cache = NewCache(5, 0, false);
585
655
  std::vector<Cache::Handle*> handles(10);
586
656
  // Insert 5 entries, but not releasing.
587
- for (size_t i = 0; i < 5; i++) {
588
- std::string key = std::to_string(i + 1);
657
+ for (int i = 0; i < 5; i++) {
658
+ std::string key = EncodeKey(i + 1);
589
659
  Status s = cache->Insert(key, new Value(i + 1), 1, &deleter, &handles[i]);
590
660
  ASSERT_TRUE(s.ok());
591
661
  }
@@ -599,14 +669,14 @@ TEST_P(CacheTest, SetCapacity) {
599
669
  // insert 5 more elements to cache, then release 5,
600
670
  // then decrease capacity to 7, final capacity should be 7
601
671
  // and usage should be 7
602
- for (size_t i = 5; i < 10; i++) {
603
- std::string key = std::to_string(i + 1);
672
+ for (int i = 5; i < 10; i++) {
673
+ std::string key = EncodeKey(i + 1);
604
674
  Status s = cache->Insert(key, new Value(i + 1), 1, &deleter, &handles[i]);
605
675
  ASSERT_TRUE(s.ok());
606
676
  }
607
677
  ASSERT_EQ(10U, cache->GetCapacity());
608
678
  ASSERT_EQ(10U, cache->GetUsage());
609
- for (size_t i = 0; i < 5; i++) {
679
+ for (int i = 0; i < 5; i++) {
610
680
  cache->Release(handles[i]);
611
681
  }
612
682
  ASSERT_EQ(10U, cache->GetCapacity());
@@ -616,7 +686,7 @@ TEST_P(CacheTest, SetCapacity) {
616
686
  ASSERT_EQ(7, cache->GetUsage());
617
687
 
618
688
  // release remaining 5 to keep valgrind happy
619
- for (size_t i = 5; i < 10; i++) {
689
+ for (int i = 5; i < 10; i++) {
620
690
  cache->Release(handles[i]);
621
691
  }
622
692
 
@@ -630,8 +700,8 @@ TEST_P(LRUCacheTest, SetStrictCapacityLimit) {
630
700
  std::shared_ptr<Cache> cache = NewCache(5, 0, false);
631
701
  std::vector<Cache::Handle*> handles(10);
632
702
  Status s;
633
- for (size_t i = 0; i < 10; i++) {
634
- std::string key = std::to_string(i + 1);
703
+ for (int i = 0; i < 10; i++) {
704
+ std::string key = EncodeKey(i + 1);
635
705
  s = cache->Insert(key, new Value(i + 1), 1, &deleter, &handles[i]);
636
706
  ASSERT_OK(s);
637
707
  ASSERT_NE(nullptr, handles[i]);
@@ -639,7 +709,7 @@ TEST_P(LRUCacheTest, SetStrictCapacityLimit) {
639
709
  ASSERT_EQ(10, cache->GetUsage());
640
710
 
641
711
  // test2: set the flag to true. Insert and check if it fails.
642
- std::string extra_key = "extra";
712
+ std::string extra_key = EncodeKey(100);
643
713
  Value* extra_value = new Value(0);
644
714
  cache->SetStrictCapacityLimit(true);
645
715
  Cache::Handle* handle;
@@ -648,14 +718,14 @@ TEST_P(LRUCacheTest, SetStrictCapacityLimit) {
648
718
  ASSERT_EQ(nullptr, handle);
649
719
  ASSERT_EQ(10, cache->GetUsage());
650
720
 
651
- for (size_t i = 0; i < 10; i++) {
721
+ for (int i = 0; i < 10; i++) {
652
722
  cache->Release(handles[i]);
653
723
  }
654
724
 
655
725
  // test3: init with flag being true.
656
726
  std::shared_ptr<Cache> cache2 = NewCache(5, 0, true);
657
- for (size_t i = 0; i < 5; i++) {
658
- std::string key = std::to_string(i + 1);
727
+ for (int i = 0; i < 5; i++) {
728
+ std::string key = EncodeKey(i + 1);
659
729
  s = cache2->Insert(key, new Value(i + 1), 1, &deleter, &handles[i]);
660
730
  ASSERT_OK(s);
661
731
  ASSERT_NE(nullptr, handles[i]);
@@ -670,7 +740,7 @@ TEST_P(LRUCacheTest, SetStrictCapacityLimit) {
670
740
  ASSERT_EQ(5, cache2->GetUsage());
671
741
  ASSERT_EQ(nullptr, cache2->Lookup(extra_key));
672
742
 
673
- for (size_t i = 0; i < 5; i++) {
743
+ for (int i = 0; i < 5; i++) {
674
744
  cache2->Release(handles[i]);
675
745
  }
676
746
  }
@@ -684,15 +754,15 @@ TEST_P(CacheTest, OverCapacity) {
684
754
  std::vector<Cache::Handle*> handles(n+1);
685
755
 
686
756
  // Insert n+1 entries, but not releasing.
687
- for (size_t i = 0; i < n + 1; i++) {
688
- std::string key = std::to_string(i + 1);
757
+ for (int i = 0; i < static_cast<int>(n + 1); i++) {
758
+ std::string key = EncodeKey(i + 1);
689
759
  Status s = cache->Insert(key, new Value(i + 1), 1, &deleter, &handles[i]);
690
760
  ASSERT_TRUE(s.ok());
691
761
  }
692
762
 
693
763
  // Guess what's in the cache now?
694
- for (size_t i = 0; i < n + 1; i++) {
695
- std::string key = std::to_string(i + 1);
764
+ for (int i = 0; i < static_cast<int>(n + 1); i++) {
765
+ std::string key = EncodeKey(i + 1);
696
766
  auto h = cache->Lookup(key);
697
767
  ASSERT_TRUE(h != nullptr);
698
768
  if (h) cache->Release(h);
@@ -700,7 +770,7 @@ TEST_P(CacheTest, OverCapacity) {
700
770
 
701
771
  // the cache is over capacity since nothing could be evicted
702
772
  ASSERT_EQ(n + 1U, cache->GetUsage());
703
- for (size_t i = 0; i < n + 1; i++) {
773
+ for (int i = 0; i < static_cast<int>(n + 1); i++) {
704
774
  cache->Release(handles[i]);
705
775
  }
706
776
  // Make sure eviction is triggered.
@@ -712,14 +782,14 @@ TEST_P(CacheTest, OverCapacity) {
712
782
  // element 0 is evicted and the rest is there
713
783
  // This is consistent with the LRU policy since the element 0
714
784
  // was released first
715
- for (size_t i = 0; i < n + 1; i++) {
716
- std::string key = std::to_string(i + 1);
785
+ for (int i = 0; i < static_cast<int>(n + 1); i++) {
786
+ std::string key = EncodeKey(i + 1);
717
787
  auto h = cache->Lookup(key);
718
788
  if (h) {
719
- ASSERT_NE(i, 0U);
789
+ ASSERT_NE(static_cast<size_t>(i), 0U);
720
790
  cache->Release(h);
721
791
  } else {
722
- ASSERT_EQ(i, 0U);
792
+ ASSERT_EQ(static_cast<size_t>(i), 0U);
723
793
  }
724
794
  }
725
795
  }
@@ -745,7 +815,7 @@ TEST_P(CacheTest, ApplyToAllCacheEntriesTest) {
745
815
  std::sort(inserted.begin(), inserted.end());
746
816
  std::sort(legacy_callback_state.begin(), legacy_callback_state.end());
747
817
  ASSERT_EQ(inserted.size(), legacy_callback_state.size());
748
- for (size_t i = 0; i < inserted.size(); ++i) {
818
+ for (int i = 0; i < static_cast<int>(inserted.size()); ++i) {
749
819
  EXPECT_EQ(inserted[i], legacy_callback_state[i]);
750
820
  }
751
821
  }
@@ -773,7 +843,7 @@ TEST_P(CacheTest, ApplyToAllEntriesTest) {
773
843
  std::sort(inserted.begin(), inserted.end());
774
844
  std::sort(callback_state.begin(), callback_state.end());
775
845
  ASSERT_EQ(inserted.size(), callback_state.size());
776
- for (size_t i = 0; i < inserted.size(); ++i) {
846
+ for (int i = 0; i < static_cast<int>(inserted.size()); ++i) {
777
847
  EXPECT_EQ(inserted[i], callback_state[i]);
778
848
  }
779
849
  }
@@ -788,8 +858,10 @@ TEST_P(CacheTest, ApplyToAllEntriesDuringResize) {
788
858
  constexpr int kSpecialCharge = 2;
789
859
  constexpr int kNotSpecialCharge = 1;
790
860
  constexpr int kSpecialCount = 100;
861
+ size_t expected_usage = 0;
791
862
  for (int i = 0; i < kSpecialCount; ++i) {
792
863
  Insert(i, i * 2, kSpecialCharge);
864
+ expected_usage += kSpecialCharge;
793
865
  }
794
866
 
795
867
  // For callback
@@ -810,12 +882,17 @@ TEST_P(CacheTest, ApplyToAllEntriesDuringResize) {
810
882
  });
811
883
 
812
884
  // In parallel, add more entries, enough to cause resize but not enough
813
- // to cause ejections
814
- for (int i = kSpecialCount * 1; i < kSpecialCount * 6; ++i) {
885
+ // to cause ejections. (Note: if any cache shard is over capacity, there
886
+ // will be ejections)
887
+ for (int i = kSpecialCount * 1; i < kSpecialCount * 5; ++i) {
815
888
  Insert(i, i * 2, kNotSpecialCharge);
889
+ expected_usage += kNotSpecialCharge;
816
890
  }
817
891
 
818
892
  apply_thread.join();
893
+ // verify no evictions
894
+ ASSERT_EQ(cache_->GetUsage(), expected_usage);
895
+ // verify everything seen in ApplyToAllEntries
819
896
  ASSERT_EQ(special_count, kSpecialCount);
820
897
  }
821
898
 
@@ -859,6 +936,7 @@ INSTANTIATE_TEST_CASE_P(CacheTestInstance, LRUCacheTest,
859
936
  } // namespace ROCKSDB_NAMESPACE
860
937
 
861
938
  int main(int argc, char** argv) {
939
+ ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
862
940
  ::testing::InitGoogleTest(&argc, argv);
863
941
  return RUN_ALL_TESTS();
864
942
  }