@nxtedition/rocksdb 6.0.2 → 6.0.3

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 (257) hide show
  1. package/BUILDING.md +12 -4
  2. package/binding.cc +2 -0
  3. package/deps/rocksdb/rocksdb/CMakeLists.txt +9 -0
  4. package/deps/rocksdb/rocksdb/Makefile +16 -5
  5. package/deps/rocksdb/rocksdb/TARGETS +23 -2
  6. package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +7 -0
  7. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +29 -0
  8. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +29 -0
  9. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +29 -0
  10. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +33 -0
  11. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +29 -0
  12. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +29 -0
  13. package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +26 -0
  14. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +29 -0
  15. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +10 -0
  16. package/deps/rocksdb/rocksdb/db/builder.cc +12 -4
  17. package/deps/rocksdb/rocksdb/db/c.cc +26 -0
  18. package/deps/rocksdb/rocksdb/db/c_test.c +3 -0
  19. package/deps/rocksdb/rocksdb/db/column_family.cc +8 -2
  20. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +29 -6
  21. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +8 -2
  22. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +16 -4
  23. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +2 -1
  24. package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +16 -0
  25. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +402 -30
  26. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +2 -12
  27. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +14 -0
  28. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +7 -5
  29. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +1 -1
  30. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +33 -7
  31. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +54 -23
  32. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +3 -0
  33. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +8 -1
  34. package/deps/rocksdb/rocksdb/db/db_options_test.cc +16 -0
  35. package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +14 -15
  36. package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +331 -0
  37. package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +5 -0
  38. package/deps/rocksdb/rocksdb/db/db_test.cc +16 -0
  39. package/deps/rocksdb/rocksdb/db/db_test2.cc +221 -92
  40. package/deps/rocksdb/rocksdb/db/db_test_util.cc +6 -2
  41. package/deps/rocksdb/rocksdb/db/db_test_util.h +4 -2
  42. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +1 -171
  43. package/deps/rocksdb/rocksdb/db/db_with_timestamp_test_util.cc +96 -0
  44. package/deps/rocksdb/rocksdb/db/db_with_timestamp_test_util.h +126 -0
  45. package/deps/rocksdb/rocksdb/db/experimental.cc +1 -1
  46. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +57 -0
  47. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +13 -2
  48. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +2 -0
  49. package/deps/rocksdb/rocksdb/db/flush_job.cc +10 -11
  50. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +11 -1
  51. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +6 -0
  52. package/deps/rocksdb/rocksdb/db/repair.cc +12 -1
  53. package/deps/rocksdb/rocksdb/db/repair_test.cc +32 -10
  54. package/deps/rocksdb/rocksdb/db/snapshot_impl.h +3 -1
  55. package/deps/rocksdb/rocksdb/db/table_cache.cc +19 -127
  56. package/deps/rocksdb/rocksdb/db/table_cache.h +3 -2
  57. package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +140 -0
  58. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +130 -128
  59. package/deps/rocksdb/rocksdb/db/version_edit.cc +20 -0
  60. package/deps/rocksdb/rocksdb/db/version_edit.h +13 -4
  61. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +14 -14
  62. package/deps/rocksdb/rocksdb/db/version_set.cc +205 -212
  63. package/deps/rocksdb/rocksdb/db/version_set.h +11 -0
  64. package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +154 -0
  65. package/deps/rocksdb/rocksdb/db/version_set_test.cc +10 -9
  66. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +2 -0
  67. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +13 -0
  68. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +15 -0
  69. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +159 -65
  70. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +43 -21
  71. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +142 -17
  72. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +23 -27
  73. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +2 -3
  74. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +23 -5
  75. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +14 -1
  76. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +2 -0
  77. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +17 -0
  78. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +2 -0
  79. package/deps/rocksdb/rocksdb/include/rocksdb/snapshot.h +4 -1
  80. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +3 -0
  81. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +189 -0
  82. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +1 -1
  83. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +5 -0
  84. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +1 -1
  85. package/deps/rocksdb/rocksdb/options/cf_options.cc +13 -0
  86. package/deps/rocksdb/rocksdb/options/db_options.cc +8 -0
  87. package/deps/rocksdb/rocksdb/options/db_options.h +1 -0
  88. package/deps/rocksdb/rocksdb/options/options.cc +7 -0
  89. package/deps/rocksdb/rocksdb/options/options_helper.cc +4 -0
  90. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +6 -4
  91. package/deps/rocksdb/rocksdb/options/options_test.cc +107 -9
  92. package/deps/rocksdb/rocksdb/src.mk +4 -1
  93. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +9 -4
  94. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +80 -6
  95. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +8 -2
  96. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +81 -757
  97. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +21 -15
  98. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +9 -3
  99. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +754 -0
  100. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +2 -1
  101. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +8 -0
  102. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +1 -10
  103. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +59 -1
  104. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +18 -0
  105. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +0 -61
  106. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +0 -13
  107. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +1 -1
  108. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +3 -2
  109. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +2 -2
  110. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +2 -1
  111. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +2 -1
  112. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +60 -2
  113. package/deps/rocksdb/rocksdb/table/block_fetcher.h +2 -0
  114. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +39 -0
  115. package/deps/rocksdb/rocksdb/table/multiget_context.h +46 -2
  116. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +2 -1
  117. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +1 -1
  118. package/deps/rocksdb/rocksdb/table/table_reader.h +13 -0
  119. package/deps/rocksdb/rocksdb/table/unique_id.cc +27 -0
  120. package/deps/rocksdb/rocksdb/table/unique_id_impl.h +3 -0
  121. package/deps/rocksdb/rocksdb/test_util/testutil.cc +2 -0
  122. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +23 -7
  123. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +9 -1
  124. package/deps/rocksdb/rocksdb/util/async_file_reader.cc +72 -0
  125. package/deps/rocksdb/rocksdb/util/async_file_reader.h +144 -0
  126. package/deps/rocksdb/rocksdb/util/compression.h +49 -0
  127. package/deps/rocksdb/rocksdb/util/coro_utils.h +111 -0
  128. package/deps/rocksdb/rocksdb/util/single_thread_executor.h +55 -0
  129. package/deps/rocksdb/rocksdb.gyp +16 -15
  130. package/package-lock.json +23687 -0
  131. package/package.json +2 -30
  132. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  133. package/prebuilds/darwin-x64/node.napi.node +0 -0
  134. package/prebuilds/linux-x64/node.napi.node +0 -0
  135. package/deps/liburing/liburing/README +0 -46
  136. package/deps/liburing/liburing/test/232c93d07b74-test.c +0 -305
  137. package/deps/liburing/liburing/test/35fa71a030ca-test.c +0 -329
  138. package/deps/liburing/liburing/test/500f9fbadef8-test.c +0 -89
  139. package/deps/liburing/liburing/test/7ad0e4b2f83c-test.c +0 -93
  140. package/deps/liburing/liburing/test/8a9973408177-test.c +0 -106
  141. package/deps/liburing/liburing/test/917257daa0fe-test.c +0 -53
  142. package/deps/liburing/liburing/test/Makefile +0 -312
  143. package/deps/liburing/liburing/test/a0908ae19763-test.c +0 -58
  144. package/deps/liburing/liburing/test/a4c0b3decb33-test.c +0 -180
  145. package/deps/liburing/liburing/test/accept-link.c +0 -251
  146. package/deps/liburing/liburing/test/accept-reuse.c +0 -164
  147. package/deps/liburing/liburing/test/accept-test.c +0 -79
  148. package/deps/liburing/liburing/test/accept.c +0 -476
  149. package/deps/liburing/liburing/test/across-fork.c +0 -283
  150. package/deps/liburing/liburing/test/b19062a56726-test.c +0 -53
  151. package/deps/liburing/liburing/test/b5837bd5311d-test.c +0 -77
  152. package/deps/liburing/liburing/test/ce593a6c480a-test.c +0 -135
  153. package/deps/liburing/liburing/test/close-opath.c +0 -122
  154. package/deps/liburing/liburing/test/config +0 -10
  155. package/deps/liburing/liburing/test/connect.c +0 -398
  156. package/deps/liburing/liburing/test/cq-full.c +0 -96
  157. package/deps/liburing/liburing/test/cq-overflow.c +0 -294
  158. package/deps/liburing/liburing/test/cq-peek-batch.c +0 -102
  159. package/deps/liburing/liburing/test/cq-ready.c +0 -94
  160. package/deps/liburing/liburing/test/cq-size.c +0 -58
  161. package/deps/liburing/liburing/test/d4ae271dfaae-test.c +0 -96
  162. package/deps/liburing/liburing/test/d77a67ed5f27-test.c +0 -65
  163. package/deps/liburing/liburing/test/defer.c +0 -307
  164. package/deps/liburing/liburing/test/double-poll-crash.c +0 -186
  165. package/deps/liburing/liburing/test/eeed8b54e0df-test.c +0 -114
  166. package/deps/liburing/liburing/test/empty-eownerdead.c +0 -42
  167. package/deps/liburing/liburing/test/eventfd-disable.c +0 -151
  168. package/deps/liburing/liburing/test/eventfd-ring.c +0 -97
  169. package/deps/liburing/liburing/test/eventfd.c +0 -112
  170. package/deps/liburing/liburing/test/fadvise.c +0 -202
  171. package/deps/liburing/liburing/test/fallocate.c +0 -249
  172. package/deps/liburing/liburing/test/fc2a85cb02ef-test.c +0 -138
  173. package/deps/liburing/liburing/test/file-register.c +0 -843
  174. package/deps/liburing/liburing/test/file-update.c +0 -173
  175. package/deps/liburing/liburing/test/files-exit-hang-poll.c +0 -128
  176. package/deps/liburing/liburing/test/files-exit-hang-timeout.c +0 -134
  177. package/deps/liburing/liburing/test/fixed-link.c +0 -90
  178. package/deps/liburing/liburing/test/fsync.c +0 -224
  179. package/deps/liburing/liburing/test/hardlink.c +0 -136
  180. package/deps/liburing/liburing/test/helpers.c +0 -135
  181. package/deps/liburing/liburing/test/helpers.h +0 -67
  182. package/deps/liburing/liburing/test/io-cancel.c +0 -537
  183. package/deps/liburing/liburing/test/io_uring_enter.c +0 -296
  184. package/deps/liburing/liburing/test/io_uring_register.c +0 -664
  185. package/deps/liburing/liburing/test/io_uring_setup.c +0 -192
  186. package/deps/liburing/liburing/test/iopoll.c +0 -366
  187. package/deps/liburing/liburing/test/lfs-openat-write.c +0 -117
  188. package/deps/liburing/liburing/test/lfs-openat.c +0 -273
  189. package/deps/liburing/liburing/test/link-timeout.c +0 -1107
  190. package/deps/liburing/liburing/test/link.c +0 -496
  191. package/deps/liburing/liburing/test/link_drain.c +0 -229
  192. package/deps/liburing/liburing/test/madvise.c +0 -195
  193. package/deps/liburing/liburing/test/mkdir.c +0 -108
  194. package/deps/liburing/liburing/test/multicqes_drain.c +0 -383
  195. package/deps/liburing/liburing/test/nop-all-sizes.c +0 -107
  196. package/deps/liburing/liburing/test/nop.c +0 -115
  197. package/deps/liburing/liburing/test/open-close.c +0 -146
  198. package/deps/liburing/liburing/test/openat2.c +0 -240
  199. package/deps/liburing/liburing/test/personality.c +0 -204
  200. package/deps/liburing/liburing/test/pipe-eof.c +0 -81
  201. package/deps/liburing/liburing/test/pipe-reuse.c +0 -105
  202. package/deps/liburing/liburing/test/poll-cancel-ton.c +0 -139
  203. package/deps/liburing/liburing/test/poll-cancel.c +0 -135
  204. package/deps/liburing/liburing/test/poll-link.c +0 -227
  205. package/deps/liburing/liburing/test/poll-many.c +0 -208
  206. package/deps/liburing/liburing/test/poll-mshot-update.c +0 -273
  207. package/deps/liburing/liburing/test/poll-ring.c +0 -48
  208. package/deps/liburing/liburing/test/poll-v-poll.c +0 -353
  209. package/deps/liburing/liburing/test/poll.c +0 -109
  210. package/deps/liburing/liburing/test/probe.c +0 -137
  211. package/deps/liburing/liburing/test/read-write.c +0 -876
  212. package/deps/liburing/liburing/test/register-restrictions.c +0 -633
  213. package/deps/liburing/liburing/test/rename.c +0 -134
  214. package/deps/liburing/liburing/test/ring-leak.c +0 -173
  215. package/deps/liburing/liburing/test/ring-leak2.c +0 -249
  216. package/deps/liburing/liburing/test/rsrc_tags.c +0 -449
  217. package/deps/liburing/liburing/test/runtests-loop.sh +0 -16
  218. package/deps/liburing/liburing/test/runtests.sh +0 -170
  219. package/deps/liburing/liburing/test/rw_merge_test.c +0 -97
  220. package/deps/liburing/liburing/test/self.c +0 -91
  221. package/deps/liburing/liburing/test/send_recv.c +0 -291
  222. package/deps/liburing/liburing/test/send_recvmsg.c +0 -345
  223. package/deps/liburing/liburing/test/sendmsg_fs_cve.c +0 -198
  224. package/deps/liburing/liburing/test/shared-wq.c +0 -84
  225. package/deps/liburing/liburing/test/short-read.c +0 -75
  226. package/deps/liburing/liburing/test/shutdown.c +0 -163
  227. package/deps/liburing/liburing/test/sigfd-deadlock.c +0 -74
  228. package/deps/liburing/liburing/test/socket-rw-eagain.c +0 -156
  229. package/deps/liburing/liburing/test/socket-rw.c +0 -147
  230. package/deps/liburing/liburing/test/splice.c +0 -511
  231. package/deps/liburing/liburing/test/sq-full-cpp.cc +0 -45
  232. package/deps/liburing/liburing/test/sq-full.c +0 -45
  233. package/deps/liburing/liburing/test/sq-poll-dup.c +0 -200
  234. package/deps/liburing/liburing/test/sq-poll-kthread.c +0 -168
  235. package/deps/liburing/liburing/test/sq-poll-share.c +0 -137
  236. package/deps/liburing/liburing/test/sq-space_left.c +0 -159
  237. package/deps/liburing/liburing/test/sqpoll-cancel-hang.c +0 -159
  238. package/deps/liburing/liburing/test/sqpoll-disable-exit.c +0 -195
  239. package/deps/liburing/liburing/test/sqpoll-exit-hang.c +0 -77
  240. package/deps/liburing/liburing/test/sqpoll-sleep.c +0 -68
  241. package/deps/liburing/liburing/test/statx.c +0 -172
  242. package/deps/liburing/liburing/test/stdout.c +0 -232
  243. package/deps/liburing/liburing/test/submit-link-fail.c +0 -154
  244. package/deps/liburing/liburing/test/submit-reuse.c +0 -239
  245. package/deps/liburing/liburing/test/symlink.c +0 -116
  246. package/deps/liburing/liburing/test/teardowns.c +0 -58
  247. package/deps/liburing/liburing/test/thread-exit.c +0 -131
  248. package/deps/liburing/liburing/test/timeout-new.c +0 -246
  249. package/deps/liburing/liburing/test/timeout-overflow.c +0 -204
  250. package/deps/liburing/liburing/test/timeout.c +0 -1354
  251. package/deps/liburing/liburing/test/unlink.c +0 -111
  252. package/deps/liburing/liburing/test/wakeup-hang.c +0 -162
  253. package/deps/rocksdb/rocksdb/README.md +0 -32
  254. package/deps/rocksdb/rocksdb/microbench/README.md +0 -60
  255. package/deps/rocksdb/rocksdb/plugin/README.md +0 -43
  256. package/deps/rocksdb/rocksdb/port/README +0 -10
  257. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +0 -13
@@ -0,0 +1,331 @@
1
+ // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
2
+ // This source code is licensed under both the GPLv2 (found in the
3
+ // COPYING file in the root directory) and Apache 2.0 License
4
+ // (found in the LICENSE.Apache file in the root directory).
5
+ //
6
+ // Copyright (c) 2011 The LevelDB Authors. All rights reserved.
7
+ // Use of this source code is governed by a BSD-style license that can be
8
+ // found in the LICENSE file. See the AUTHORS file for names of contributors.
9
+
10
+ #include "db/db_with_timestamp_test_util.h"
11
+ #include "test_util/testutil.h"
12
+
13
+ namespace ROCKSDB_NAMESPACE {
14
+ class DBReadOnlyTestWithTimestamp : public DBBasicTestWithTimestampBase {
15
+ public:
16
+ DBReadOnlyTestWithTimestamp()
17
+ : DBBasicTestWithTimestampBase("db_readonly_test_with_timestamp") {}
18
+ };
19
+
20
+ #ifndef ROCKSDB_LITE
21
+ TEST_F(DBReadOnlyTestWithTimestamp, IteratorAndGetReadTimestampSizeMismatch) {
22
+ const int kNumKeysPerFile = 128;
23
+ const uint64_t kMaxKey = 1024;
24
+ Options options = CurrentOptions();
25
+ options.env = env_;
26
+ options.create_if_missing = true;
27
+ const size_t kTimestampSize = Timestamp(0, 0).size();
28
+ TestComparator test_cmp(kTimestampSize);
29
+ options.comparator = &test_cmp;
30
+ options.memtable_factory.reset(
31
+ test::NewSpecialSkipListFactory(kNumKeysPerFile));
32
+ DestroyAndReopen(options);
33
+ const std::string write_timestamp = Timestamp(1, 0);
34
+ WriteOptions write_opts;
35
+ for (uint64_t key = 0; key <= kMaxKey; ++key) {
36
+ Status s = db_->Put(write_opts, Key1(key), write_timestamp,
37
+ "value" + std::to_string(key));
38
+ ASSERT_OK(s);
39
+ }
40
+
41
+ // Reopen the database in read only mode to test its timestamp support.
42
+ Close();
43
+ ASSERT_OK(ReadOnlyReopen(options));
44
+ ReadOptions read_opts;
45
+ std::string different_size_read_timestamp;
46
+ PutFixed32(&different_size_read_timestamp, 2);
47
+ Slice different_size_read_ts = different_size_read_timestamp;
48
+ read_opts.timestamp = &different_size_read_ts;
49
+ {
50
+ std::unique_ptr<Iterator> iter(db_->NewIterator(read_opts));
51
+ ASSERT_FALSE(iter->Valid());
52
+ ASSERT_TRUE(iter->status().IsInvalidArgument());
53
+ }
54
+
55
+ for (uint64_t key = 0; key <= kMaxKey; ++key) {
56
+ std::string value_from_get;
57
+ std::string timestamp;
58
+ ASSERT_TRUE(db_->Get(read_opts, Key1(key), &value_from_get, &timestamp)
59
+ .IsInvalidArgument());
60
+ }
61
+
62
+ Close();
63
+ }
64
+
65
+ TEST_F(DBReadOnlyTestWithTimestamp,
66
+ IteratorAndGetReadTimestampSpecifiedWithoutWriteTimestamp) {
67
+ const int kNumKeysPerFile = 128;
68
+ const uint64_t kMaxKey = 1024;
69
+ Options options = CurrentOptions();
70
+ options.env = env_;
71
+ options.create_if_missing = true;
72
+ options.memtable_factory.reset(
73
+ test::NewSpecialSkipListFactory(kNumKeysPerFile));
74
+ DestroyAndReopen(options);
75
+ WriteOptions write_opts;
76
+ for (uint64_t key = 0; key <= kMaxKey; ++key) {
77
+ Status s = db_->Put(write_opts, Key1(key), "value" + std::to_string(key));
78
+ ASSERT_OK(s);
79
+ }
80
+
81
+ // Reopen the database in read only mode to test its timestamp support.
82
+ Close();
83
+ ASSERT_OK(ReadOnlyReopen(options));
84
+ ReadOptions read_opts;
85
+ const std::string read_timestamp = Timestamp(2, 0);
86
+ Slice read_ts = read_timestamp;
87
+ read_opts.timestamp = &read_ts;
88
+ {
89
+ std::unique_ptr<Iterator> iter(db_->NewIterator(read_opts));
90
+ ASSERT_FALSE(iter->Valid());
91
+ ASSERT_TRUE(iter->status().IsInvalidArgument());
92
+ }
93
+
94
+ for (uint64_t key = 0; key <= kMaxKey; ++key) {
95
+ std::string value_from_get;
96
+ std::string timestamp;
97
+ ASSERT_TRUE(db_->Get(read_opts, Key1(key), &value_from_get, &timestamp)
98
+ .IsInvalidArgument());
99
+ }
100
+
101
+ Close();
102
+ }
103
+
104
+ TEST_F(DBReadOnlyTestWithTimestamp, IteratorAndGet) {
105
+ const int kNumKeysPerFile = 128;
106
+ const uint64_t kMaxKey = 1024;
107
+ Options options = CurrentOptions();
108
+ options.env = env_;
109
+ options.create_if_missing = true;
110
+ const size_t kTimestampSize = Timestamp(0, 0).size();
111
+ TestComparator test_cmp(kTimestampSize);
112
+ options.comparator = &test_cmp;
113
+ options.memtable_factory.reset(
114
+ test::NewSpecialSkipListFactory(kNumKeysPerFile));
115
+ DestroyAndReopen(options);
116
+ const std::vector<uint64_t> start_keys = {1, 0};
117
+ const std::vector<std::string> write_timestamps = {Timestamp(1, 0),
118
+ Timestamp(3, 0)};
119
+ const std::vector<std::string> read_timestamps = {Timestamp(2, 0),
120
+ Timestamp(4, 0)};
121
+ for (size_t i = 0; i < write_timestamps.size(); ++i) {
122
+ WriteOptions write_opts;
123
+ for (uint64_t key = start_keys[i]; key <= kMaxKey; ++key) {
124
+ Status s = db_->Put(write_opts, Key1(key), write_timestamps[i],
125
+ "value" + std::to_string(i));
126
+ ASSERT_OK(s);
127
+ }
128
+ }
129
+
130
+ // Reopen the database in read only mode to test its timestamp support.
131
+ Close();
132
+ ASSERT_OK(ReadOnlyReopen(options));
133
+
134
+ auto get_value_and_check = [](DB* db, ReadOptions read_opts, Slice key,
135
+ Slice expected_value, std::string expected_ts) {
136
+ std::string value_from_get;
137
+ std::string timestamp;
138
+ ASSERT_OK(db->Get(read_opts, key.ToString(), &value_from_get, &timestamp));
139
+ ASSERT_EQ(expected_value, value_from_get);
140
+ ASSERT_EQ(expected_ts, timestamp);
141
+ };
142
+ for (size_t i = 0; i < read_timestamps.size(); ++i) {
143
+ ReadOptions read_opts;
144
+ Slice read_ts = read_timestamps[i];
145
+ read_opts.timestamp = &read_ts;
146
+ std::unique_ptr<Iterator> it(db_->NewIterator(read_opts));
147
+ int count = 0;
148
+ uint64_t key = 0;
149
+ // Forward iterate.
150
+ for (it->Seek(Key1(0)), key = start_keys[i]; it->Valid();
151
+ it->Next(), ++count, ++key) {
152
+ CheckIterUserEntry(it.get(), Key1(key), kTypeValue,
153
+ "value" + std::to_string(i), write_timestamps[i]);
154
+ get_value_and_check(db_, read_opts, it->key(), it->value(),
155
+ write_timestamps[i]);
156
+ }
157
+ size_t expected_count = kMaxKey - start_keys[i] + 1;
158
+ ASSERT_EQ(expected_count, count);
159
+
160
+ // Backward iterate.
161
+ count = 0;
162
+ for (it->SeekForPrev(Key1(kMaxKey)), key = kMaxKey; it->Valid();
163
+ it->Prev(), ++count, --key) {
164
+ CheckIterUserEntry(it.get(), Key1(key), kTypeValue,
165
+ "value" + std::to_string(i), write_timestamps[i]);
166
+ get_value_and_check(db_, read_opts, it->key(), it->value(),
167
+ write_timestamps[i]);
168
+ }
169
+ ASSERT_EQ(static_cast<size_t>(kMaxKey) - start_keys[i] + 1, count);
170
+
171
+ // SeekToFirst()/SeekToLast() with lower/upper bounds.
172
+ // Then iter with lower and upper bounds.
173
+ uint64_t l = 0;
174
+ uint64_t r = kMaxKey + 1;
175
+ while (l < r) {
176
+ std::string lb_str = Key1(l);
177
+ Slice lb = lb_str;
178
+ std::string ub_str = Key1(r);
179
+ Slice ub = ub_str;
180
+ read_opts.iterate_lower_bound = &lb;
181
+ read_opts.iterate_upper_bound = &ub;
182
+ it.reset(db_->NewIterator(read_opts));
183
+ for (it->SeekToFirst(), key = std::max(l, start_keys[i]), count = 0;
184
+ it->Valid(); it->Next(), ++key, ++count) {
185
+ CheckIterUserEntry(it.get(), Key1(key), kTypeValue,
186
+ "value" + std::to_string(i), write_timestamps[i]);
187
+ get_value_and_check(db_, read_opts, it->key(), it->value(),
188
+ write_timestamps[i]);
189
+ }
190
+ ASSERT_EQ(r - std::max(l, start_keys[i]), count);
191
+
192
+ for (it->SeekToLast(), key = std::min(r, kMaxKey + 1), count = 0;
193
+ it->Valid(); it->Prev(), --key, ++count) {
194
+ CheckIterUserEntry(it.get(), Key1(key - 1), kTypeValue,
195
+ "value" + std::to_string(i), write_timestamps[i]);
196
+ get_value_and_check(db_, read_opts, it->key(), it->value(),
197
+ write_timestamps[i]);
198
+ }
199
+ l += (kMaxKey / 100);
200
+ r -= (kMaxKey / 100);
201
+ }
202
+ }
203
+ Close();
204
+ }
205
+
206
+ TEST_F(DBReadOnlyTestWithTimestamp, Iterators) {
207
+ const int kNumKeysPerFile = 128;
208
+ const uint64_t kMaxKey = 1024;
209
+ Options options = CurrentOptions();
210
+ options.env = env_;
211
+ options.create_if_missing = true;
212
+ const size_t kTimestampSize = Timestamp(0, 0).size();
213
+ TestComparator test_cmp(kTimestampSize);
214
+ options.comparator = &test_cmp;
215
+ options.memtable_factory.reset(
216
+ test::NewSpecialSkipListFactory(kNumKeysPerFile));
217
+ DestroyAndReopen(options);
218
+ const std::string write_timestamp = Timestamp(1, 0);
219
+ const std::string read_timestamp = Timestamp(2, 0);
220
+ WriteOptions write_opts;
221
+ for (uint64_t key = 0; key <= kMaxKey; ++key) {
222
+ Status s = db_->Put(write_opts, Key1(key), write_timestamp,
223
+ "value" + std::to_string(key));
224
+ ASSERT_OK(s);
225
+ }
226
+
227
+ // Reopen the database in read only mode to test its timestamp support.
228
+ Close();
229
+ ASSERT_OK(ReadOnlyReopen(options));
230
+ ReadOptions read_opts;
231
+ Slice read_ts = read_timestamp;
232
+ read_opts.timestamp = &read_ts;
233
+ std::vector<Iterator*> iters;
234
+ ASSERT_OK(db_->NewIterators(read_opts, {db_->DefaultColumnFamily()}, &iters));
235
+ ASSERT_EQ(static_cast<uint64_t>(1), iters.size());
236
+
237
+ int count = 0;
238
+ uint64_t key = 0;
239
+ // Forward iterate.
240
+ for (iters[0]->Seek(Key1(0)), key = 0; iters[0]->Valid();
241
+ iters[0]->Next(), ++count, ++key) {
242
+ CheckIterUserEntry(iters[0], Key1(key), kTypeValue,
243
+ "value" + std::to_string(key), write_timestamp);
244
+ }
245
+
246
+ size_t expected_count = kMaxKey - 0 + 1;
247
+ ASSERT_EQ(expected_count, count);
248
+ delete iters[0];
249
+
250
+ Close();
251
+ }
252
+
253
+ TEST_F(DBReadOnlyTestWithTimestamp, IteratorsReadTimestampSizeMismatch) {
254
+ const int kNumKeysPerFile = 128;
255
+ const uint64_t kMaxKey = 1024;
256
+ Options options = CurrentOptions();
257
+ options.env = env_;
258
+ options.create_if_missing = true;
259
+ const size_t kTimestampSize = Timestamp(0, 0).size();
260
+ TestComparator test_cmp(kTimestampSize);
261
+ options.comparator = &test_cmp;
262
+ options.memtable_factory.reset(
263
+ test::NewSpecialSkipListFactory(kNumKeysPerFile));
264
+ DestroyAndReopen(options);
265
+ const std::string write_timestamp = Timestamp(1, 0);
266
+ WriteOptions write_opts;
267
+ for (uint64_t key = 0; key <= kMaxKey; ++key) {
268
+ Status s = db_->Put(write_opts, Key1(key), write_timestamp,
269
+ "value" + std::to_string(key));
270
+ ASSERT_OK(s);
271
+ }
272
+
273
+ // Reopen the database in read only mode to test its timestamp support.
274
+ Close();
275
+ ASSERT_OK(ReadOnlyReopen(options));
276
+ ReadOptions read_opts;
277
+ std::string different_size_read_timestamp;
278
+ PutFixed32(&different_size_read_timestamp, 2);
279
+ Slice different_size_read_ts = different_size_read_timestamp;
280
+ read_opts.timestamp = &different_size_read_ts;
281
+ {
282
+ std::vector<Iterator*> iters;
283
+ ASSERT_TRUE(
284
+ db_->NewIterators(read_opts, {db_->DefaultColumnFamily()}, &iters)
285
+ .IsInvalidArgument());
286
+ }
287
+
288
+ Close();
289
+ }
290
+
291
+ TEST_F(DBReadOnlyTestWithTimestamp,
292
+ IteratorsReadTimestampSpecifiedWithoutWriteTimestamp) {
293
+ const int kNumKeysPerFile = 128;
294
+ const uint64_t kMaxKey = 1024;
295
+ Options options = CurrentOptions();
296
+ options.env = env_;
297
+ options.create_if_missing = true;
298
+ options.memtable_factory.reset(
299
+ test::NewSpecialSkipListFactory(kNumKeysPerFile));
300
+ DestroyAndReopen(options);
301
+ WriteOptions write_opts;
302
+ for (uint64_t key = 0; key <= kMaxKey; ++key) {
303
+ Status s = db_->Put(write_opts, Key1(key), "value" + std::to_string(key));
304
+ ASSERT_OK(s);
305
+ }
306
+
307
+ // Reopen the database in read only mode to test its timestamp support.
308
+ Close();
309
+ ASSERT_OK(ReadOnlyReopen(options));
310
+ ReadOptions read_opts;
311
+ const std::string read_timestamp = Timestamp(2, 0);
312
+ Slice read_ts = read_timestamp;
313
+ read_opts.timestamp = &read_ts;
314
+ {
315
+ std::vector<Iterator*> iters;
316
+ ASSERT_TRUE(
317
+ db_->NewIterators(read_opts, {db_->DefaultColumnFamily()}, &iters)
318
+ .IsInvalidArgument());
319
+ }
320
+
321
+ Close();
322
+ }
323
+ #endif // !ROCKSDB_LITE
324
+ } // namespace ROCKSDB_NAMESPACE
325
+
326
+ int main(int argc, char** argv) {
327
+ ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
328
+ ::testing::InitGoogleTest(&argc, argv);
329
+ RegisterCustomObjects(argc, argv);
330
+ return RUN_ALL_TESTS();
331
+ }
@@ -181,6 +181,7 @@ TEST_F(DBSecondaryTest, SimpleInternalCompaction) {
181
181
  ASSERT_EQ(input.input_files.size(), 3);
182
182
 
183
183
  input.output_level = 1;
184
+ ASSERT_OK(db_->GetDbIdentity(input.db_id));
184
185
  Close();
185
186
 
186
187
  options.max_open_files = -1;
@@ -241,6 +242,7 @@ TEST_F(DBSecondaryTest, InternalCompactionMultiLevels) {
241
242
  input1.input_files.push_back(meta.levels[1].files[2].name);
242
243
 
243
244
  input1.output_level = 1;
245
+ ASSERT_OK(db_->GetDbIdentity(input1.db_id));
244
246
 
245
247
  options.max_open_files = -1;
246
248
  Close();
@@ -261,6 +263,7 @@ TEST_F(DBSecondaryTest, InternalCompactionMultiLevels) {
261
263
  }
262
264
 
263
265
  input2.output_level = 2;
266
+ input2.db_id = input1.db_id;
264
267
  ASSERT_OK(db_secondary_full()->TEST_CompactWithoutInstallation(
265
268
  OpenAndCompactOptions(), cfh, input2, &result));
266
269
  ASSERT_OK(result.status);
@@ -305,6 +308,7 @@ TEST_F(DBSecondaryTest, InternalCompactionCompactedFiles) {
305
308
  ASSERT_EQ(input.input_files.size(), 3);
306
309
 
307
310
  input.output_level = 1;
311
+ ASSERT_OK(db_->GetDbIdentity(input.db_id));
308
312
 
309
313
  // trigger compaction to delete the files for secondary instance compaction
310
314
  ASSERT_OK(Put("foo", "foo_value" + std::to_string(3)));
@@ -346,6 +350,7 @@ TEST_F(DBSecondaryTest, InternalCompactionMissingFiles) {
346
350
  ASSERT_EQ(input.input_files.size(), 3);
347
351
 
348
352
  input.output_level = 1;
353
+ ASSERT_OK(db_->GetDbIdentity(input.db_id));
349
354
 
350
355
  Close();
351
356
 
@@ -1844,6 +1844,8 @@ TEST_F(DBTest, Snapshot) {
1844
1844
  uint64_t time_snap1 = GetTimeOldestSnapshots();
1845
1845
  ASSERT_GT(time_snap1, 0U);
1846
1846
  ASSERT_EQ(GetSequenceOldestSnapshots(), s1->GetSequenceNumber());
1847
+ ASSERT_EQ(GetTimeOldestSnapshots(),
1848
+ static_cast<uint64_t>(s1->GetUnixTime()));
1847
1849
  ASSERT_OK(Put(0, "foo", "0v2"));
1848
1850
  ASSERT_OK(Put(1, "foo", "1v2"));
1849
1851
 
@@ -1853,6 +1855,8 @@ TEST_F(DBTest, Snapshot) {
1853
1855
  ASSERT_EQ(2U, GetNumSnapshots());
1854
1856
  ASSERT_EQ(time_snap1, GetTimeOldestSnapshots());
1855
1857
  ASSERT_EQ(GetSequenceOldestSnapshots(), s1->GetSequenceNumber());
1858
+ ASSERT_EQ(GetTimeOldestSnapshots(),
1859
+ static_cast<uint64_t>(s1->GetUnixTime()));
1856
1860
  ASSERT_OK(Put(0, "foo", "0v3"));
1857
1861
  ASSERT_OK(Put(1, "foo", "1v3"));
1858
1862
 
@@ -1861,6 +1865,8 @@ TEST_F(DBTest, Snapshot) {
1861
1865
  ASSERT_EQ(3U, GetNumSnapshots());
1862
1866
  ASSERT_EQ(time_snap1, GetTimeOldestSnapshots());
1863
1867
  ASSERT_EQ(GetSequenceOldestSnapshots(), s1->GetSequenceNumber());
1868
+ ASSERT_EQ(GetTimeOldestSnapshots(),
1869
+ static_cast<uint64_t>(s1->GetUnixTime()));
1864
1870
 
1865
1871
  ASSERT_OK(Put(0, "foo", "0v4"));
1866
1872
  ASSERT_OK(Put(1, "foo", "1v4"));
@@ -1877,6 +1883,8 @@ TEST_F(DBTest, Snapshot) {
1877
1883
  ASSERT_EQ(2U, GetNumSnapshots());
1878
1884
  ASSERT_EQ(time_snap1, GetTimeOldestSnapshots());
1879
1885
  ASSERT_EQ(GetSequenceOldestSnapshots(), s1->GetSequenceNumber());
1886
+ ASSERT_EQ(GetTimeOldestSnapshots(),
1887
+ static_cast<uint64_t>(s1->GetUnixTime()));
1880
1888
  ASSERT_EQ("0v1", Get(0, "foo", s1));
1881
1889
  ASSERT_EQ("1v1", Get(1, "foo", s1));
1882
1890
  ASSERT_EQ("0v2", Get(0, "foo", s2));
@@ -1892,6 +1900,8 @@ TEST_F(DBTest, Snapshot) {
1892
1900
  ASSERT_EQ(1U, GetNumSnapshots());
1893
1901
  ASSERT_LT(time_snap1, GetTimeOldestSnapshots());
1894
1902
  ASSERT_EQ(GetSequenceOldestSnapshots(), s2->GetSequenceNumber());
1903
+ ASSERT_EQ(GetTimeOldestSnapshots(),
1904
+ static_cast<uint64_t>(s2->GetUnixTime()));
1895
1905
 
1896
1906
  db_->ReleaseSnapshot(s2);
1897
1907
  ASSERT_EQ(0U, GetNumSnapshots());
@@ -2859,6 +2869,12 @@ class ModelDB : public DB {
2859
2869
  assert(false);
2860
2870
  return 0;
2861
2871
  }
2872
+
2873
+ int64_t GetUnixTime() const override {
2874
+ // no need to call this
2875
+ assert(false);
2876
+ return 0;
2877
+ }
2862
2878
  };
2863
2879
 
2864
2880
  explicit ModelDB(const Options& options) : options_(options) {}