@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.
- package/BUILDING.md +12 -4
- package/binding.cc +2 -0
- package/deps/rocksdb/rocksdb/CMakeLists.txt +9 -0
- package/deps/rocksdb/rocksdb/Makefile +16 -5
- package/deps/rocksdb/rocksdb/TARGETS +23 -2
- package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +7 -0
- package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +33 -0
- package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +26 -0
- package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +29 -0
- package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +10 -0
- package/deps/rocksdb/rocksdb/db/builder.cc +12 -4
- package/deps/rocksdb/rocksdb/db/c.cc +26 -0
- package/deps/rocksdb/rocksdb/db/c_test.c +3 -0
- package/deps/rocksdb/rocksdb/db/column_family.cc +8 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +29 -6
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +8 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +16 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +16 -0
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +402 -30
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +2 -12
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +14 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +7 -5
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +33 -7
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +54 -23
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +3 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +8 -1
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +16 -0
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +14 -15
- package/deps/rocksdb/rocksdb/db/db_readonly_with_timestamp_test.cc +331 -0
- package/deps/rocksdb/rocksdb/db/db_secondary_test.cc +5 -0
- package/deps/rocksdb/rocksdb/db/db_test.cc +16 -0
- package/deps/rocksdb/rocksdb/db/db_test2.cc +221 -92
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +6 -2
- package/deps/rocksdb/rocksdb/db/db_test_util.h +4 -2
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +1 -171
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_test_util.cc +96 -0
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_test_util.h +126 -0
- package/deps/rocksdb/rocksdb/db/experimental.cc +1 -1
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +57 -0
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +13 -2
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +2 -0
- package/deps/rocksdb/rocksdb/db/flush_job.cc +10 -11
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +11 -1
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +6 -0
- package/deps/rocksdb/rocksdb/db/repair.cc +12 -1
- package/deps/rocksdb/rocksdb/db/repair_test.cc +32 -10
- package/deps/rocksdb/rocksdb/db/snapshot_impl.h +3 -1
- package/deps/rocksdb/rocksdb/db/table_cache.cc +19 -127
- package/deps/rocksdb/rocksdb/db/table_cache.h +3 -2
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +140 -0
- package/deps/rocksdb/rocksdb/db/version_builder_test.cc +130 -128
- package/deps/rocksdb/rocksdb/db/version_edit.cc +20 -0
- package/deps/rocksdb/rocksdb/db/version_edit.h +13 -4
- package/deps/rocksdb/rocksdb/db/version_edit_test.cc +14 -14
- package/deps/rocksdb/rocksdb/db/version_set.cc +205 -212
- package/deps/rocksdb/rocksdb/db/version_set.h +11 -0
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +154 -0
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +10 -9
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +2 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +13 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +15 -0
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +159 -65
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +43 -21
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +142 -17
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +23 -27
- package/deps/rocksdb/rocksdb/file/writable_file_writer.h +2 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +23 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +14 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +17 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/snapshot.h +4 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +189 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +5 -0
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +1 -1
- package/deps/rocksdb/rocksdb/options/cf_options.cc +13 -0
- package/deps/rocksdb/rocksdb/options/db_options.cc +8 -0
- package/deps/rocksdb/rocksdb/options/db_options.h +1 -0
- package/deps/rocksdb/rocksdb/options/options.cc +7 -0
- package/deps/rocksdb/rocksdb/options/options_helper.cc +4 -0
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +6 -4
- package/deps/rocksdb/rocksdb/options/options_test.cc +107 -9
- package/deps/rocksdb/rocksdb/src.mk +4 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +9 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +80 -6
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +8 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +81 -757
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +21 -15
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +9 -3
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +754 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +8 -0
- package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +1 -10
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +59 -1
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +18 -0
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +0 -61
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +0 -13
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +1 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +3 -2
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +2 -2
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_fetcher.cc +60 -2
- package/deps/rocksdb/rocksdb/table/block_fetcher.h +2 -0
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +39 -0
- package/deps/rocksdb/rocksdb/table/multiget_context.h +46 -2
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +2 -1
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +1 -1
- package/deps/rocksdb/rocksdb/table/table_reader.h +13 -0
- package/deps/rocksdb/rocksdb/table/unique_id.cc +27 -0
- package/deps/rocksdb/rocksdb/table/unique_id_impl.h +3 -0
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +2 -0
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +23 -7
- package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +9 -1
- package/deps/rocksdb/rocksdb/util/async_file_reader.cc +72 -0
- package/deps/rocksdb/rocksdb/util/async_file_reader.h +144 -0
- package/deps/rocksdb/rocksdb/util/compression.h +49 -0
- package/deps/rocksdb/rocksdb/util/coro_utils.h +111 -0
- package/deps/rocksdb/rocksdb/util/single_thread_executor.h +55 -0
- package/deps/rocksdb/rocksdb.gyp +16 -15
- package/package-lock.json +23687 -0
- package/package.json +2 -30
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/darwin-x64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
- package/deps/liburing/liburing/README +0 -46
- package/deps/liburing/liburing/test/232c93d07b74-test.c +0 -305
- package/deps/liburing/liburing/test/35fa71a030ca-test.c +0 -329
- package/deps/liburing/liburing/test/500f9fbadef8-test.c +0 -89
- package/deps/liburing/liburing/test/7ad0e4b2f83c-test.c +0 -93
- package/deps/liburing/liburing/test/8a9973408177-test.c +0 -106
- package/deps/liburing/liburing/test/917257daa0fe-test.c +0 -53
- package/deps/liburing/liburing/test/Makefile +0 -312
- package/deps/liburing/liburing/test/a0908ae19763-test.c +0 -58
- package/deps/liburing/liburing/test/a4c0b3decb33-test.c +0 -180
- package/deps/liburing/liburing/test/accept-link.c +0 -251
- package/deps/liburing/liburing/test/accept-reuse.c +0 -164
- package/deps/liburing/liburing/test/accept-test.c +0 -79
- package/deps/liburing/liburing/test/accept.c +0 -476
- package/deps/liburing/liburing/test/across-fork.c +0 -283
- package/deps/liburing/liburing/test/b19062a56726-test.c +0 -53
- package/deps/liburing/liburing/test/b5837bd5311d-test.c +0 -77
- package/deps/liburing/liburing/test/ce593a6c480a-test.c +0 -135
- package/deps/liburing/liburing/test/close-opath.c +0 -122
- package/deps/liburing/liburing/test/config +0 -10
- package/deps/liburing/liburing/test/connect.c +0 -398
- package/deps/liburing/liburing/test/cq-full.c +0 -96
- package/deps/liburing/liburing/test/cq-overflow.c +0 -294
- package/deps/liburing/liburing/test/cq-peek-batch.c +0 -102
- package/deps/liburing/liburing/test/cq-ready.c +0 -94
- package/deps/liburing/liburing/test/cq-size.c +0 -58
- package/deps/liburing/liburing/test/d4ae271dfaae-test.c +0 -96
- package/deps/liburing/liburing/test/d77a67ed5f27-test.c +0 -65
- package/deps/liburing/liburing/test/defer.c +0 -307
- package/deps/liburing/liburing/test/double-poll-crash.c +0 -186
- package/deps/liburing/liburing/test/eeed8b54e0df-test.c +0 -114
- package/deps/liburing/liburing/test/empty-eownerdead.c +0 -42
- package/deps/liburing/liburing/test/eventfd-disable.c +0 -151
- package/deps/liburing/liburing/test/eventfd-ring.c +0 -97
- package/deps/liburing/liburing/test/eventfd.c +0 -112
- package/deps/liburing/liburing/test/fadvise.c +0 -202
- package/deps/liburing/liburing/test/fallocate.c +0 -249
- package/deps/liburing/liburing/test/fc2a85cb02ef-test.c +0 -138
- package/deps/liburing/liburing/test/file-register.c +0 -843
- package/deps/liburing/liburing/test/file-update.c +0 -173
- package/deps/liburing/liburing/test/files-exit-hang-poll.c +0 -128
- package/deps/liburing/liburing/test/files-exit-hang-timeout.c +0 -134
- package/deps/liburing/liburing/test/fixed-link.c +0 -90
- package/deps/liburing/liburing/test/fsync.c +0 -224
- package/deps/liburing/liburing/test/hardlink.c +0 -136
- package/deps/liburing/liburing/test/helpers.c +0 -135
- package/deps/liburing/liburing/test/helpers.h +0 -67
- package/deps/liburing/liburing/test/io-cancel.c +0 -537
- package/deps/liburing/liburing/test/io_uring_enter.c +0 -296
- package/deps/liburing/liburing/test/io_uring_register.c +0 -664
- package/deps/liburing/liburing/test/io_uring_setup.c +0 -192
- package/deps/liburing/liburing/test/iopoll.c +0 -366
- package/deps/liburing/liburing/test/lfs-openat-write.c +0 -117
- package/deps/liburing/liburing/test/lfs-openat.c +0 -273
- package/deps/liburing/liburing/test/link-timeout.c +0 -1107
- package/deps/liburing/liburing/test/link.c +0 -496
- package/deps/liburing/liburing/test/link_drain.c +0 -229
- package/deps/liburing/liburing/test/madvise.c +0 -195
- package/deps/liburing/liburing/test/mkdir.c +0 -108
- package/deps/liburing/liburing/test/multicqes_drain.c +0 -383
- package/deps/liburing/liburing/test/nop-all-sizes.c +0 -107
- package/deps/liburing/liburing/test/nop.c +0 -115
- package/deps/liburing/liburing/test/open-close.c +0 -146
- package/deps/liburing/liburing/test/openat2.c +0 -240
- package/deps/liburing/liburing/test/personality.c +0 -204
- package/deps/liburing/liburing/test/pipe-eof.c +0 -81
- package/deps/liburing/liburing/test/pipe-reuse.c +0 -105
- package/deps/liburing/liburing/test/poll-cancel-ton.c +0 -139
- package/deps/liburing/liburing/test/poll-cancel.c +0 -135
- package/deps/liburing/liburing/test/poll-link.c +0 -227
- package/deps/liburing/liburing/test/poll-many.c +0 -208
- package/deps/liburing/liburing/test/poll-mshot-update.c +0 -273
- package/deps/liburing/liburing/test/poll-ring.c +0 -48
- package/deps/liburing/liburing/test/poll-v-poll.c +0 -353
- package/deps/liburing/liburing/test/poll.c +0 -109
- package/deps/liburing/liburing/test/probe.c +0 -137
- package/deps/liburing/liburing/test/read-write.c +0 -876
- package/deps/liburing/liburing/test/register-restrictions.c +0 -633
- package/deps/liburing/liburing/test/rename.c +0 -134
- package/deps/liburing/liburing/test/ring-leak.c +0 -173
- package/deps/liburing/liburing/test/ring-leak2.c +0 -249
- package/deps/liburing/liburing/test/rsrc_tags.c +0 -449
- package/deps/liburing/liburing/test/runtests-loop.sh +0 -16
- package/deps/liburing/liburing/test/runtests.sh +0 -170
- package/deps/liburing/liburing/test/rw_merge_test.c +0 -97
- package/deps/liburing/liburing/test/self.c +0 -91
- package/deps/liburing/liburing/test/send_recv.c +0 -291
- package/deps/liburing/liburing/test/send_recvmsg.c +0 -345
- package/deps/liburing/liburing/test/sendmsg_fs_cve.c +0 -198
- package/deps/liburing/liburing/test/shared-wq.c +0 -84
- package/deps/liburing/liburing/test/short-read.c +0 -75
- package/deps/liburing/liburing/test/shutdown.c +0 -163
- package/deps/liburing/liburing/test/sigfd-deadlock.c +0 -74
- package/deps/liburing/liburing/test/socket-rw-eagain.c +0 -156
- package/deps/liburing/liburing/test/socket-rw.c +0 -147
- package/deps/liburing/liburing/test/splice.c +0 -511
- package/deps/liburing/liburing/test/sq-full-cpp.cc +0 -45
- package/deps/liburing/liburing/test/sq-full.c +0 -45
- package/deps/liburing/liburing/test/sq-poll-dup.c +0 -200
- package/deps/liburing/liburing/test/sq-poll-kthread.c +0 -168
- package/deps/liburing/liburing/test/sq-poll-share.c +0 -137
- package/deps/liburing/liburing/test/sq-space_left.c +0 -159
- package/deps/liburing/liburing/test/sqpoll-cancel-hang.c +0 -159
- package/deps/liburing/liburing/test/sqpoll-disable-exit.c +0 -195
- package/deps/liburing/liburing/test/sqpoll-exit-hang.c +0 -77
- package/deps/liburing/liburing/test/sqpoll-sleep.c +0 -68
- package/deps/liburing/liburing/test/statx.c +0 -172
- package/deps/liburing/liburing/test/stdout.c +0 -232
- package/deps/liburing/liburing/test/submit-link-fail.c +0 -154
- package/deps/liburing/liburing/test/submit-reuse.c +0 -239
- package/deps/liburing/liburing/test/symlink.c +0 -116
- package/deps/liburing/liburing/test/teardowns.c +0 -58
- package/deps/liburing/liburing/test/thread-exit.c +0 -131
- package/deps/liburing/liburing/test/timeout-new.c +0 -246
- package/deps/liburing/liburing/test/timeout-overflow.c +0 -204
- package/deps/liburing/liburing/test/timeout.c +0 -1354
- package/deps/liburing/liburing/test/unlink.c +0 -111
- package/deps/liburing/liburing/test/wakeup-hang.c +0 -162
- package/deps/rocksdb/rocksdb/README.md +0 -32
- package/deps/rocksdb/rocksdb/microbench/README.md +0 -60
- package/deps/rocksdb/rocksdb/plugin/README.md +0 -43
- package/deps/rocksdb/rocksdb/port/README +0 -10
- 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, ×tamp)
|
|
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, ×tamp)
|
|
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, ×tamp));
|
|
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) {}
|