@nxtedition/rocksdb 10.1.5 → 10.2.0
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/binding.cc +19 -11
- package/deps/rocksdb/rocksdb/CMakeLists.txt +16 -5
- package/deps/rocksdb/rocksdb/Makefile +38 -15
- package/deps/rocksdb/rocksdb/TARGETS +10 -0
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +58 -0
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +4 -4
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +4 -2
- package/deps/rocksdb/rocksdb/db/builder.cc +2 -2
- package/deps/rocksdb/rocksdb/db/builder.h +1 -1
- package/deps/rocksdb/rocksdb/db/c.cc +205 -6
- package/deps/rocksdb/rocksdb/db/c_test.c +189 -1
- package/deps/rocksdb/rocksdb/db/column_family.cc +28 -0
- package/deps/rocksdb/rocksdb/db/column_family.h +17 -0
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +234 -60
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +8 -1
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +11 -9
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +4 -4
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +2 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +1 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +22 -25
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +2 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +112 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +72 -21
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +2 -0
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +77 -0
- package/deps/rocksdb/rocksdb/db/convenience.cc +3 -0
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +269 -112
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +107 -43
- package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +93 -24
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +5 -5
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +157 -68
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +56 -15
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +78 -105
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +39 -9
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_follower.cc +1 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +21 -14
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +107 -63
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +43 -2
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +4 -0
- package/deps/rocksdb/rocksdb/db/db_rate_limiter_test.cc +6 -0
- package/deps/rocksdb/rocksdb/db/db_test.cc +10 -2
- package/deps/rocksdb/rocksdb/db/db_test2.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +5 -0
- package/deps/rocksdb/rocksdb/db/db_test_util.h +7 -6
- package/deps/rocksdb/rocksdb/db/db_wal_test.cc +92 -2
- package/deps/rocksdb/rocksdb/db/error_handler.cc +34 -39
- package/deps/rocksdb/rocksdb/db/error_handler.h +3 -4
- package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +8 -4
- package/deps/rocksdb/rocksdb/db/event_helpers.cc +6 -3
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +71 -15
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +11 -0
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +383 -4
- package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +88 -72
- package/deps/rocksdb/rocksdb/db/flush_job.cc +30 -3
- package/deps/rocksdb/rocksdb/db/flush_job.h +14 -0
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +60 -1
- package/deps/rocksdb/rocksdb/db/internal_stats.h +20 -1
- package/deps/rocksdb/rocksdb/db/log_writer.cc +24 -0
- package/deps/rocksdb/rocksdb/db/log_writer.h +5 -0
- package/deps/rocksdb/rocksdb/db/memtable.cc +6 -4
- package/deps/rocksdb/rocksdb/db/memtable.h +10 -10
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +4 -4
- package/deps/rocksdb/rocksdb/db/multi_cf_iterator_impl.h +10 -3
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +8 -10
- package/deps/rocksdb/rocksdb/db/repair.cc +4 -3
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.cc +30 -0
- package/deps/rocksdb/rocksdb/db/seqno_to_time_mapping.h +9 -0
- package/deps/rocksdb/rocksdb/db/table_cache.cc +17 -2
- package/deps/rocksdb/rocksdb/db/table_cache.h +9 -1
- package/deps/rocksdb/rocksdb/db/table_properties_collector.h +9 -2
- package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +3 -1
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +3 -3
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +7 -7
- package/deps/rocksdb/rocksdb/db/version_edit.cc +0 -1
- package/deps/rocksdb/rocksdb/db/version_edit_handler.h +7 -6
- package/deps/rocksdb/rocksdb/db/version_set.cc +54 -31
- package/deps/rocksdb/rocksdb/db/version_set.h +14 -7
- package/deps/rocksdb/rocksdb/db/wal_manager.cc +37 -29
- package/deps/rocksdb/rocksdb/db/wal_manager.h +6 -5
- package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.cc +6 -0
- package/deps/rocksdb/rocksdb/db/write_batch.cc +54 -23
- package/deps/rocksdb/rocksdb/db/write_callback_test.cc +46 -5
- package/deps/rocksdb/rocksdb/db/write_thread.cc +53 -5
- package/deps/rocksdb/rocksdb/db/write_thread.h +36 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +1 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +5 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +57 -17
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +11 -3
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +8 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +10 -25
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +25 -88
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_filters.cc +93 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_filters.h +16 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +43 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +109 -21
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +8 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +666 -205
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +55 -10
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +18 -16
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +19 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.h +5 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +782 -494
- package/deps/rocksdb/rocksdb/env/composite_env_wrapper.h +21 -0
- package/deps/rocksdb/rocksdb/env/env.cc +6 -0
- package/deps/rocksdb/rocksdb/env/io_posix.cc +0 -1
- package/deps/rocksdb/rocksdb/file/file_util.cc +8 -2
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +34 -19
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +29 -32
- package/deps/rocksdb/rocksdb/file/writable_file_writer.h +41 -15
- package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +4 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/c.h +63 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +16 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +5 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +0 -16
- package/deps/rocksdb/rocksdb/include/rocksdb/iterator_base.h +16 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +21 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +76 -3
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +17 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +12 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +31 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/user_write_callback.h +29 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +4 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/customizable_util.h +0 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +17 -8
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +46 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/options/cf_options.cc +13 -2
- package/deps/rocksdb/rocksdb/options/cf_options.h +6 -2
- package/deps/rocksdb/rocksdb/options/db_options.cc +8 -0
- package/deps/rocksdb/rocksdb/options/db_options.h +9 -5
- package/deps/rocksdb/rocksdb/options/options.cc +3 -0
- package/deps/rocksdb/rocksdb/options/options_helper.cc +1 -0
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +3 -1
- package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +2 -2
- package/deps/rocksdb/rocksdb/port/stack_trace.cc +1 -0
- package/deps/rocksdb/rocksdb/port/win/port_win.cc +3 -2
- package/deps/rocksdb/rocksdb/src.mk +4 -0
- package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +4 -2
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +15 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +102 -41
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +15 -7
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +1 -3
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +5 -6
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +31 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +6 -0
- package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +10 -5
- package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +11 -15
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +17 -11
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +5 -2
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +28 -21
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +9 -11
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +16 -16
- package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +1 -2
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +14 -9
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +4 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +82 -41
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +13 -14
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +18 -22
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +51 -13
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +3 -11
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +2 -3
- package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +9 -10
- package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.h +3 -2
- package/deps/rocksdb/rocksdb/table/format.cc +1 -2
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +18 -13
- package/deps/rocksdb/rocksdb/table/merging_iterator.h +5 -3
- package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +2 -2
- package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +1 -1
- package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +3 -1
- package/deps/rocksdb/rocksdb/table/table_builder.h +8 -7
- package/deps/rocksdb/rocksdb/table/table_reader.h +9 -0
- package/deps/rocksdb/rocksdb/test_util/testutil.cc +1 -0
- package/deps/rocksdb/rocksdb/test_util/testutil.h +6 -0
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +19 -0
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +434 -110
- package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +3 -1
- package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +3 -0
- package/deps/rocksdb/rocksdb/util/aligned_storage.h +24 -0
- package/deps/rocksdb/rocksdb/util/filter_bench.cc +1 -1
- package/deps/rocksdb/rocksdb/util/random.cc +2 -1
- package/deps/rocksdb/rocksdb/util/stderr_logger.h +1 -1
- package/deps/rocksdb/rocksdb/util/udt_util.cc +33 -0
- package/deps/rocksdb/rocksdb/util/udt_util.h +7 -0
- package/deps/rocksdb/rocksdb/util/udt_util_test.cc +33 -0
- package/deps/rocksdb/rocksdb/util/write_batch_util.h +5 -0
- package/deps/rocksdb/rocksdb/util/xxhash.h +10 -3
- package/deps/rocksdb/rocksdb/utilities/backup/backup_engine_test.cc +13 -13
- package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +104 -48
- package/deps/rocksdb/rocksdb/utilities/debug.cc +16 -4
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +647 -235
- package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +274 -157
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_for_tiering_collector.cc +144 -0
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_for_tiering_collector.h +45 -0
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_for_tiering_collector_test.cc +139 -0
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +12 -0
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector_test.cc +3 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +105 -6
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +64 -8
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +5 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +43 -5
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +5 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +154 -6
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +1 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +158 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +16 -11
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +4 -4
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +9 -8
- package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +2 -1
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +43 -7
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +2 -0
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +1 -1
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
- package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
- package/.tap/test-results/node_modules/abstract-level/test/chained-batch-test.js.tap +0 -0
- package/.tap/test-results/node_modules/abstract-level/test/get-test.js.tap +0 -0
- package/.tap/test-results/test/abstract-level-test.js.tap +0 -1077
- package/.tap/test-results/test/batch-test.js.tap +0 -12
- package/.tap/test-results/test/chained-batch-gc-test.js.tap +0 -11
- package/.tap/test-results/test/cleanup-hanging-iterators-test.js.tap +0 -135
- package/.tap/test-results/test/clear-gc-test.js.tap +0 -13
- package/.tap/test-results/test/column-test.js.tap +0 -55
- package/.tap/test-results/test/common.js.tap +0 -0
- package/.tap/test-results/test/compression-test.js.tap +0 -30
- package/.tap/test-results/test/db-identity.js.tap +0 -12
- package/.tap/test-results/test/electron.js.tap +0 -0
- package/.tap/test-results/test/env-cleanup-hook-test.js.tap +0 -40
- package/.tap/test-results/test/env-cleanup-hook.js.tap +0 -0
- package/.tap/test-results/test/gc.js.tap +0 -0
- package/.tap/test-results/test/getproperty-test.js.tap +0 -29
- package/.tap/test-results/test/iterator-gc-test.js.tap +0 -15
- package/.tap/test-results/test/iterator-hwm-test.js.tap +0 -131
- package/.tap/test-results/test/iterator-recursion-test.js.tap +0 -12
- package/.tap/test-results/test/iterator-starvation-test.js.tap +0 -73
- package/.tap/test-results/test/iterator-test.js.tap +0 -6
- package/.tap/test-results/test/leak-tester-batch.js.tap +0 -0
- package/.tap/test-results/test/leak-tester-iterator.js.tap +0 -0
- package/.tap/test-results/test/leak-tester.js.tap +0 -0
- package/.tap/test-results/test/lock-test.js.tap +0 -18
- package/.tap/test-results/test/lock.js.tap +0 -0
- package/.tap/test-results/test/make.js.tap +0 -0
- package/.tap/test-results/test/max-rev-merge.js.tap +0 -0
- package/.tap/test-results/test/merge-operator-test.js.tap +0 -12
- package/.tap/test-results/test/mkdir-test.js.tap +0 -15
- package/.tap/test-results/test/segfault-test.js.tap +0 -76
- package/.tap/test-results/test/stack-blower.js.tap +0 -0
- package/deps/rocksdb/rocksdb/README.md +0 -29
- 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
|
@@ -369,7 +369,7 @@ class WALDumperCommand : public LDBCommand {
|
|
|
369
369
|
const std::map<std::string, std::string>& options,
|
|
370
370
|
const std::vector<std::string>& flags);
|
|
371
371
|
|
|
372
|
-
bool NoDBOpen() override { return
|
|
372
|
+
bool NoDBOpen() override { return no_db_open_; }
|
|
373
373
|
|
|
374
374
|
static void Help(std::string& ret);
|
|
375
375
|
|
|
@@ -380,6 +380,7 @@ class WALDumperCommand : public LDBCommand {
|
|
|
380
380
|
std::string wal_file_;
|
|
381
381
|
bool print_values_;
|
|
382
382
|
bool is_write_committed_; // default will be set to true
|
|
383
|
+
bool no_db_open_ = true;
|
|
383
384
|
|
|
384
385
|
static const std::string ARG_WAL_FILE;
|
|
385
386
|
static const std::string ARG_WRITE_COMMITTED;
|
|
@@ -619,6 +620,7 @@ class DBQuerierCommand : public LDBCommand {
|
|
|
619
620
|
static const char* GET_CMD;
|
|
620
621
|
static const char* PUT_CMD;
|
|
621
622
|
static const char* DELETE_CMD;
|
|
623
|
+
static const char* COUNT_CMD;
|
|
622
624
|
};
|
|
623
625
|
|
|
624
626
|
class CheckConsistencyCommand : public LDBCommand {
|
|
@@ -28,6 +28,9 @@ void LDBCommandRunner::PrintHelp(const LDBOptions& ldb_options,
|
|
|
28
28
|
ret.append(" --" + LDBCommand::ARG_SECONDARY_PATH +
|
|
29
29
|
"=<secondary_path> to open DB as secondary instance. Operations "
|
|
30
30
|
"not supported in secondary instance will fail.\n\n");
|
|
31
|
+
ret.append(" --" + LDBCommand::ARG_LEADER_PATH +
|
|
32
|
+
"=<leader_path> to open DB as a follower instance. Operations "
|
|
33
|
+
"not supported in follower instance will fail.\n\n");
|
|
31
34
|
ret.append(
|
|
32
35
|
"The following optional parameters control if keys/values are "
|
|
33
36
|
"input/output as hex or as plain strings:\n");
|
|
@@ -0,0 +1,24 @@
|
|
|
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
|
+
#pragma once
|
|
10
|
+
|
|
11
|
+
#include <cstddef>
|
|
12
|
+
|
|
13
|
+
#include "rocksdb/rocksdb_namespace.h"
|
|
14
|
+
|
|
15
|
+
namespace ROCKSDB_NAMESPACE {
|
|
16
|
+
|
|
17
|
+
template <typename T, std::size_t Align = alignof(T)>
|
|
18
|
+
struct aligned_storage {
|
|
19
|
+
struct type {
|
|
20
|
+
alignas(Align) unsigned char data[sizeof(T)];
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -726,7 +726,7 @@ double FilterBench::RandomQueryTest(uint32_t inside_threshold, bool dry_run,
|
|
|
726
726
|
} else {
|
|
727
727
|
may_match = info.full_block_reader_->KeyMayMatch(
|
|
728
728
|
batch_slices[i],
|
|
729
|
-
/*
|
|
729
|
+
/*const_ikey_ptr=*/nullptr,
|
|
730
730
|
/*get_context=*/nullptr,
|
|
731
731
|
/*lookup_context=*/nullptr, ROCKSDB_NAMESPACE::ReadOptions());
|
|
732
732
|
}
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
#include <utility>
|
|
14
14
|
|
|
15
15
|
#include "port/likely.h"
|
|
16
|
+
#include "util/aligned_storage.h"
|
|
16
17
|
#include "util/thread_local.h"
|
|
17
18
|
|
|
18
19
|
#define STORAGE_DECL static thread_local
|
|
@@ -21,7 +22,7 @@ namespace ROCKSDB_NAMESPACE {
|
|
|
21
22
|
|
|
22
23
|
Random* Random::GetTLSInstance() {
|
|
23
24
|
STORAGE_DECL Random* tls_instance;
|
|
24
|
-
STORAGE_DECL
|
|
25
|
+
STORAGE_DECL aligned_storage<Random>::type tls_instance_bytes;
|
|
25
26
|
|
|
26
27
|
auto rv = tls_instance;
|
|
27
28
|
if (UNLIKELY(rv == nullptr)) {
|
|
@@ -17,7 +17,7 @@ namespace ROCKSDB_NAMESPACE {
|
|
|
17
17
|
class StderrLogger : public Logger {
|
|
18
18
|
public:
|
|
19
19
|
explicit StderrLogger(const InfoLogLevel log_level = InfoLogLevel::INFO_LEVEL)
|
|
20
|
-
: Logger(log_level), log_prefix(nullptr) {}
|
|
20
|
+
: Logger(log_level), log_prefix(nullptr), log_prefix_len(0) {}
|
|
21
21
|
explicit StderrLogger(const InfoLogLevel log_level, const std::string prefix)
|
|
22
22
|
: Logger(log_level),
|
|
23
23
|
log_prefix(strdup(prefix.c_str())),
|
|
@@ -158,6 +158,39 @@ Status TimestampRecoveryHandler::PutCF(uint32_t cf, const Slice& key,
|
|
|
158
158
|
return WriteBatchInternal::Put(new_batch_.get(), cf, new_key, value);
|
|
159
159
|
}
|
|
160
160
|
|
|
161
|
+
Status TimestampRecoveryHandler::PutEntityCF(uint32_t cf, const Slice& key,
|
|
162
|
+
const Slice& entity) {
|
|
163
|
+
std::string new_key_buf;
|
|
164
|
+
Slice new_key;
|
|
165
|
+
Status status = TimestampRecoveryHandler::ReconcileTimestampDiscrepancy(
|
|
166
|
+
cf, key, &new_key_buf, &new_key);
|
|
167
|
+
if (!status.ok()) {
|
|
168
|
+
return status;
|
|
169
|
+
}
|
|
170
|
+
Slice entity_copy = entity;
|
|
171
|
+
WideColumns columns;
|
|
172
|
+
if (!WideColumnSerialization::Deserialize(entity_copy, columns).ok()) {
|
|
173
|
+
return Status::Corruption("Unable to deserialize entity",
|
|
174
|
+
entity.ToString(/* hex */ true));
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
return WriteBatchInternal::PutEntity(new_batch_.get(), cf, new_key, columns);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
Status TimestampRecoveryHandler::TimedPutCF(uint32_t cf, const Slice& key,
|
|
181
|
+
const Slice& value,
|
|
182
|
+
uint64_t write_time) {
|
|
183
|
+
std::string new_key_buf;
|
|
184
|
+
Slice new_key;
|
|
185
|
+
Status status =
|
|
186
|
+
ReconcileTimestampDiscrepancy(cf, key, &new_key_buf, &new_key);
|
|
187
|
+
if (!status.ok()) {
|
|
188
|
+
return status;
|
|
189
|
+
}
|
|
190
|
+
return WriteBatchInternal::TimedPut(new_batch_.get(), cf, new_key, value,
|
|
191
|
+
write_time);
|
|
192
|
+
}
|
|
193
|
+
|
|
161
194
|
Status TimestampRecoveryHandler::DeleteCF(uint32_t cf, const Slice& key) {
|
|
162
195
|
std::string new_key_buf;
|
|
163
196
|
Slice new_key;
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
#include <unordered_map>
|
|
12
12
|
#include <vector>
|
|
13
13
|
|
|
14
|
+
#include "db/wide/wide_column_serialization.h"
|
|
14
15
|
#include "db/write_batch_internal.h"
|
|
15
16
|
#include "rocksdb/slice.h"
|
|
16
17
|
#include "rocksdb/status.h"
|
|
@@ -116,6 +117,12 @@ class TimestampRecoveryHandler : public WriteBatch::Handler {
|
|
|
116
117
|
|
|
117
118
|
Status PutCF(uint32_t cf, const Slice& key, const Slice& value) override;
|
|
118
119
|
|
|
120
|
+
Status PutEntityCF(uint32_t cf, const Slice& key,
|
|
121
|
+
const Slice& entity) override;
|
|
122
|
+
|
|
123
|
+
Status TimedPutCF(uint32_t cf, const Slice& key, const Slice& value,
|
|
124
|
+
uint64_t write_time) override;
|
|
125
|
+
|
|
119
126
|
Status DeleteCF(uint32_t cf, const Slice& key) override;
|
|
120
127
|
|
|
121
128
|
Status SingleDeleteCF(uint32_t cf, const Slice& key) override;
|
|
@@ -16,6 +16,7 @@ namespace ROCKSDB_NAMESPACE {
|
|
|
16
16
|
namespace {
|
|
17
17
|
static const std::string kTestKeyWithoutTs = "key";
|
|
18
18
|
static const std::string kValuePlaceHolder = "value";
|
|
19
|
+
static const uint64_t kWriteUnixTime = 100;
|
|
19
20
|
} // namespace
|
|
20
21
|
|
|
21
22
|
class HandleTimestampSizeDifferenceTest : public testing::Test {
|
|
@@ -38,6 +39,34 @@ class HandleTimestampSizeDifferenceTest : public testing::Test {
|
|
|
38
39
|
return AddKey(cf, key);
|
|
39
40
|
}
|
|
40
41
|
|
|
42
|
+
Status TimedPutCF(uint32_t cf, const Slice& key, const Slice& value,
|
|
43
|
+
uint64_t write_unix_time) override {
|
|
44
|
+
if (value.compare(kValuePlaceHolder) != 0) {
|
|
45
|
+
return Status::InvalidArgument();
|
|
46
|
+
}
|
|
47
|
+
if (write_unix_time != kWriteUnixTime) {
|
|
48
|
+
return Status::InvalidArgument();
|
|
49
|
+
}
|
|
50
|
+
return AddKey(cf, key);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
Status PutEntityCF(uint32_t cf, const Slice& key,
|
|
54
|
+
const Slice& entity) override {
|
|
55
|
+
Slice entity_copy = entity;
|
|
56
|
+
WideColumns columns;
|
|
57
|
+
Status s = WideColumnSerialization::Deserialize(entity_copy, columns);
|
|
58
|
+
if (!s.ok()) {
|
|
59
|
+
return s;
|
|
60
|
+
}
|
|
61
|
+
if (columns.size() != 1) {
|
|
62
|
+
return Status::InvalidArgument();
|
|
63
|
+
}
|
|
64
|
+
if (columns[0].value().compare(kValuePlaceHolder) != 0) {
|
|
65
|
+
return Status::InvalidArgument();
|
|
66
|
+
}
|
|
67
|
+
return AddKey(cf, key);
|
|
68
|
+
}
|
|
69
|
+
|
|
41
70
|
Status DeleteCF(uint32_t cf, const Slice& key) override {
|
|
42
71
|
return AddKey(cf, key);
|
|
43
72
|
}
|
|
@@ -117,6 +146,10 @@ class HandleTimestampSizeDifferenceTest : public testing::Test {
|
|
|
117
146
|
WriteBatchInternal::Merge(batch, cf_id, key, kValuePlaceHolder));
|
|
118
147
|
ASSERT_OK(WriteBatchInternal::PutBlobIndex(batch, cf_id, key,
|
|
119
148
|
kValuePlaceHolder));
|
|
149
|
+
ASSERT_OK(WriteBatchInternal::TimedPut(
|
|
150
|
+
batch, cf_id, key, kValuePlaceHolder, kWriteUnixTime));
|
|
151
|
+
WideColumns columns{{kDefaultWideColumnName, kValuePlaceHolder}};
|
|
152
|
+
ASSERT_OK(WriteBatchInternal::PutEntity(batch, cf_id, key, columns));
|
|
120
153
|
}
|
|
121
154
|
}
|
|
122
155
|
|
|
@@ -32,6 +32,11 @@ class ColumnFamilyCollector : public WriteBatch::Handler {
|
|
|
32
32
|
return AddColumnFamilyId(column_family_id);
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
+
Status PutEntityCF(uint32_t column_family_id, const Slice&,
|
|
36
|
+
const Slice&) override {
|
|
37
|
+
return AddColumnFamilyId(column_family_id);
|
|
38
|
+
}
|
|
39
|
+
|
|
35
40
|
Status TimedPutCF(uint32_t column_family_id, const Slice&, const Slice&,
|
|
36
41
|
uint64_t) override {
|
|
37
42
|
return AddColumnFamilyId(column_family_id);
|
|
@@ -11,6 +11,15 @@
|
|
|
11
11
|
#ifndef XXH_NAMESPACE
|
|
12
12
|
#define XXH_NAMESPACE ROCKSDB_
|
|
13
13
|
#endif // !defined(XXH_NAMESPACE)
|
|
14
|
+
|
|
15
|
+
#if (defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API) || \
|
|
16
|
+
defined(XXH_IMPLEMENTATION)) && \
|
|
17
|
+
!defined(XXH_IMPLEM_13a8737387)
|
|
18
|
+
#if defined(__cplusplus) && (__cplusplus > 202002L)
|
|
19
|
+
/* C++23 and future versions have std::unreachable() */
|
|
20
|
+
#include <utility> /* std::unreachable() */
|
|
21
|
+
#endif
|
|
22
|
+
#endif
|
|
14
23
|
/* END RocksDB customizations */
|
|
15
24
|
|
|
16
25
|
// clang-format off
|
|
@@ -1294,7 +1303,7 @@ struct XXH3_state_s {
|
|
|
1294
1303
|
* Note that this doesn't prepare the state for a streaming operation,
|
|
1295
1304
|
* it's still necessary to use XXH3_NNbits_reset*() afterwards.
|
|
1296
1305
|
*/
|
|
1297
|
-
#define XXH3_INITSTATE(XXH3_state_ptr) { (XXH3_state_ptr)->seed = 0; }
|
|
1306
|
+
#define XXH3_INITSTATE(XXH3_state_ptr) do { (XXH3_state_ptr)->seed = 0; } while (0)
|
|
1298
1307
|
|
|
1299
1308
|
|
|
1300
1309
|
/*!
|
|
@@ -2064,8 +2073,6 @@ static int XXH_isLittleEndian(void)
|
|
|
2064
2073
|
# define XXH_UNREACHABLE() unreachable()
|
|
2065
2074
|
|
|
2066
2075
|
#elif defined(__cplusplus) && (__cplusplus > 202002L)
|
|
2067
|
-
/* C++23 and future versions have std::unreachable() */
|
|
2068
|
-
# include <utility> /* std::unreachable() */
|
|
2069
2076
|
# define XXH_UNREACHABLE() std::unreachable()
|
|
2070
2077
|
|
|
2071
2078
|
#elif XXH_HAS_BUILTIN(__builtin_unreachable)
|
|
@@ -3962,7 +3962,7 @@ TEST_P(BackupEngineTestWithParam, BackupUsingDirectIO) {
|
|
|
3962
3962
|
OpenDBAndBackupEngine(true /* destroy_old_data */);
|
|
3963
3963
|
for (int i = 0; i < kNumBackups; ++i) {
|
|
3964
3964
|
FillDB(db_.get(), i * kNumKeysPerBackup /* from */,
|
|
3965
|
-
(i + 1) * kNumKeysPerBackup /* to
|
|
3965
|
+
(i + 1) * kNumKeysPerBackup /* to */);
|
|
3966
3966
|
|
|
3967
3967
|
// Clear the file open counters and then do a bunch of backup engine ops.
|
|
3968
3968
|
// For all ops, files should be opened in direct mode.
|
|
@@ -4406,9 +4406,9 @@ TEST_F(BackupEngineTest, ExcludeFiles) {
|
|
|
4406
4406
|
delete db;
|
|
4407
4407
|
db = nullptr;
|
|
4408
4408
|
|
|
4409
|
-
|
|
4410
|
-
|
|
4411
|
-
|
|
4409
|
+
auto backup_engine = backup_engine_.get();
|
|
4410
|
+
for (auto be_pair : {std::make_pair(backup_engine, alt_backup_engine),
|
|
4411
|
+
std::make_pair(alt_backup_engine, backup_engine)}) {
|
|
4412
4412
|
ASSERT_OK(DestroyDB(dbname_, options_));
|
|
4413
4413
|
RestoreOptions ro;
|
|
4414
4414
|
// Fails without alternate dir
|
|
@@ -4430,9 +4430,9 @@ TEST_F(BackupEngineTest, ExcludeFiles) {
|
|
|
4430
4430
|
CloseBackupEngine();
|
|
4431
4431
|
OpenBackupEngine();
|
|
4432
4432
|
|
|
4433
|
-
|
|
4434
|
-
|
|
4435
|
-
|
|
4433
|
+
backup_engine = backup_engine_.get();
|
|
4434
|
+
for (auto be_pair : {std::make_pair(backup_engine, alt_backup_engine),
|
|
4435
|
+
std::make_pair(alt_backup_engine, backup_engine)}) {
|
|
4436
4436
|
ASSERT_OK(DestroyDB(dbname_, options_));
|
|
4437
4437
|
RestoreOptions ro;
|
|
4438
4438
|
ro.alternate_dirs.push_front(be_pair.second);
|
|
@@ -4459,9 +4459,9 @@ TEST_F(BackupEngineTest, ExcludeFiles) {
|
|
|
4459
4459
|
AssertBackupInfoConsistency(/*allow excluded*/ true);
|
|
4460
4460
|
|
|
4461
4461
|
// Excluded file(s) deleted, unable to restore
|
|
4462
|
-
|
|
4463
|
-
|
|
4464
|
-
|
|
4462
|
+
backup_engine = backup_engine_.get();
|
|
4463
|
+
for (auto be_pair : {std::make_pair(backup_engine, alt_backup_engine),
|
|
4464
|
+
std::make_pair(alt_backup_engine, backup_engine)}) {
|
|
4465
4465
|
RestoreOptions ro;
|
|
4466
4466
|
ro.alternate_dirs.push_front(be_pair.second);
|
|
4467
4467
|
ASSERT_TRUE(be_pair.first->RestoreDBFromLatestBackup(dbname_, dbname_, ro)
|
|
@@ -4475,9 +4475,9 @@ TEST_F(BackupEngineTest, ExcludeFiles) {
|
|
|
4475
4475
|
AssertBackupInfoConsistency(/*allow excluded*/ true);
|
|
4476
4476
|
|
|
4477
4477
|
// Excluded file(s) deleted, unable to restore
|
|
4478
|
-
|
|
4479
|
-
|
|
4480
|
-
|
|
4478
|
+
backup_engine = backup_engine_.get();
|
|
4479
|
+
for (auto be_pair : {std::make_pair(backup_engine, alt_backup_engine),
|
|
4480
|
+
std::make_pair(alt_backup_engine, backup_engine)}) {
|
|
4481
4481
|
RestoreOptions ro;
|
|
4482
4482
|
ro.alternate_dirs.push_front(be_pair.second);
|
|
4483
4483
|
ASSERT_TRUE(be_pair.first->RestoreDBFromLatestBackup(dbname_, dbname_, ro)
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
#ifndef OS_WIN
|
|
14
14
|
#include <unistd.h>
|
|
15
15
|
#endif
|
|
16
|
+
#include <cstdlib>
|
|
16
17
|
#include <iostream>
|
|
17
18
|
#include <thread>
|
|
18
19
|
#include <utility>
|
|
@@ -23,6 +24,7 @@
|
|
|
23
24
|
#include "port/stack_trace.h"
|
|
24
25
|
#include "rocksdb/db.h"
|
|
25
26
|
#include "rocksdb/env.h"
|
|
27
|
+
#include "rocksdb/rocksdb_namespace.h"
|
|
26
28
|
#include "rocksdb/utilities/transaction_db.h"
|
|
27
29
|
#include "test_util/sync_point.h"
|
|
28
30
|
#include "test_util/testharness.h"
|
|
@@ -253,6 +255,13 @@ class CheckpointTest : public testing::Test {
|
|
|
253
255
|
}
|
|
254
256
|
return result;
|
|
255
257
|
}
|
|
258
|
+
|
|
259
|
+
int NumTableFilesAtLevel(int level) {
|
|
260
|
+
std::string property;
|
|
261
|
+
EXPECT_TRUE(db_->GetProperty(
|
|
262
|
+
"rocksdb.num-files-at-level" + std::to_string(level), &property));
|
|
263
|
+
return atoi(property.c_str());
|
|
264
|
+
}
|
|
256
265
|
};
|
|
257
266
|
|
|
258
267
|
TEST_F(CheckpointTest, GetSnapshotLink) {
|
|
@@ -760,18 +769,65 @@ TEST_F(CheckpointTest, CheckpointWithParallelWrites) {
|
|
|
760
769
|
thread.join();
|
|
761
770
|
}
|
|
762
771
|
|
|
763
|
-
|
|
772
|
+
class CheckpointTestWithWalParams
|
|
773
|
+
: public CheckpointTest,
|
|
774
|
+
public testing::WithParamInterface<
|
|
775
|
+
std::tuple<uint64_t, bool, bool, bool>> {
|
|
776
|
+
public:
|
|
777
|
+
uint64_t GetLogSizeForFlush() { return std::get<0>(GetParam()); }
|
|
778
|
+
bool GetWalsInManifest() { return std::get<1>(GetParam()); }
|
|
779
|
+
bool GetManualWalFlush() { return std::get<2>(GetParam()); }
|
|
780
|
+
bool GetBackgroundCloseInactiveWals() { return std::get<3>(GetParam()); }
|
|
781
|
+
};
|
|
782
|
+
|
|
783
|
+
INSTANTIATE_TEST_CASE_P(NormalWalParams, CheckpointTestWithWalParams,
|
|
784
|
+
::testing::Combine(::testing::Values(0U, 100000000U),
|
|
785
|
+
::testing::Bool(), ::testing::Bool(),
|
|
786
|
+
::testing::Values(false)));
|
|
787
|
+
|
|
788
|
+
INSTANTIATE_TEST_CASE_P(DeprecatedWalParams, CheckpointTestWithWalParams,
|
|
789
|
+
::testing::Values(std::make_tuple(100000000U, true,
|
|
790
|
+
false, true)));
|
|
791
|
+
|
|
792
|
+
TEST_P(CheckpointTestWithWalParams, CheckpointWithUnsyncedDataDropped) {
|
|
764
793
|
Options options = CurrentOptions();
|
|
765
|
-
|
|
766
|
-
options.
|
|
794
|
+
options.max_write_buffer_number = 4;
|
|
795
|
+
options.track_and_verify_wals_in_manifest = GetWalsInManifest();
|
|
796
|
+
options.manual_wal_flush = GetManualWalFlush();
|
|
797
|
+
options.background_close_inactive_wals = GetBackgroundCloseInactiveWals();
|
|
798
|
+
auto fault_fs = std::make_shared<FaultInjectionTestFS>(FileSystem::Default());
|
|
799
|
+
std::unique_ptr<Env> fault_fs_env(NewCompositeEnv(fault_fs));
|
|
800
|
+
|
|
801
|
+
if (options.background_close_inactive_wals) {
|
|
802
|
+
// Disable this hygiene check when the fix is disabled
|
|
803
|
+
fault_fs->SetAllowLinkOpenFile();
|
|
804
|
+
}
|
|
805
|
+
|
|
806
|
+
options.env = fault_fs_env.get();
|
|
767
807
|
Reopen(options);
|
|
768
808
|
ASSERT_OK(Put("key1", "val1"));
|
|
809
|
+
if (GetLogSizeForFlush() > 0) {
|
|
810
|
+
// When not flushing memtable for checkpoint, this is the simplest way
|
|
811
|
+
// to get
|
|
812
|
+
// * one inactive WAL, synced
|
|
813
|
+
// * one inactive WAL, not synced, and
|
|
814
|
+
// * one active WAL, not synced
|
|
815
|
+
// with a single thread, so that we have at least one that can be hard
|
|
816
|
+
// linked, etc.
|
|
817
|
+
ASSERT_OK(static_cast_with_check<DBImpl>(db_)->PauseBackgroundWork());
|
|
818
|
+
ASSERT_OK(static_cast_with_check<DBImpl>(db_)->TEST_SwitchMemtable());
|
|
819
|
+
ASSERT_OK(db_->SyncWAL());
|
|
820
|
+
}
|
|
821
|
+
ASSERT_OK(Put("key2", "val2"));
|
|
822
|
+
if (GetLogSizeForFlush() > 0) {
|
|
823
|
+
ASSERT_OK(static_cast_with_check<DBImpl>(db_)->TEST_SwitchMemtable());
|
|
824
|
+
}
|
|
825
|
+
ASSERT_OK(Put("key3", "val3"));
|
|
769
826
|
Checkpoint* checkpoint;
|
|
770
827
|
ASSERT_OK(Checkpoint::Create(db_, &checkpoint));
|
|
771
|
-
ASSERT_OK(checkpoint->CreateCheckpoint(snapshot_name_));
|
|
828
|
+
ASSERT_OK(checkpoint->CreateCheckpoint(snapshot_name_, GetLogSizeForFlush()));
|
|
772
829
|
delete checkpoint;
|
|
773
|
-
ASSERT_OK(
|
|
774
|
-
|
|
830
|
+
ASSERT_OK(fault_fs->DropUnsyncedFileData());
|
|
775
831
|
// make sure it's openable even though whatever data that wasn't synced got
|
|
776
832
|
// dropped.
|
|
777
833
|
options.env = env_;
|
|
@@ -781,6 +837,10 @@ TEST_F(CheckpointTest, CheckpointWithUnsyncedDataDropped) {
|
|
|
781
837
|
std::string get_result;
|
|
782
838
|
ASSERT_OK(snapshot_db->Get(read_opts, "key1", &get_result));
|
|
783
839
|
ASSERT_EQ("val1", get_result);
|
|
840
|
+
ASSERT_OK(snapshot_db->Get(read_opts, "key2", &get_result));
|
|
841
|
+
ASSERT_EQ("val2", get_result);
|
|
842
|
+
ASSERT_OK(snapshot_db->Get(read_opts, "key3", &get_result));
|
|
843
|
+
ASSERT_EQ("val3", get_result);
|
|
784
844
|
delete snapshot_db;
|
|
785
845
|
delete db_;
|
|
786
846
|
db_ = nullptr;
|
|
@@ -797,15 +857,19 @@ TEST_F(CheckpointTest, CheckpointOptionsFileFailedToPersist) {
|
|
|
797
857
|
// Setup `FaultInjectionTestFS` and `SyncPoint` callbacks to fail one
|
|
798
858
|
// operation when inside the OPTIONS file persisting code.
|
|
799
859
|
std::unique_ptr<Env> fault_fs_env(NewCompositeEnv(fault_fs));
|
|
800
|
-
fault_fs->
|
|
860
|
+
fault_fs->SetThreadLocalErrorContext(
|
|
861
|
+
FaultInjectionIOType::kWrite, 7 /* seed*/, 1 /* one_in */,
|
|
862
|
+
false /* retryable */, false /* has_data_loss*/);
|
|
801
863
|
SyncPoint::GetInstance()->SetCallBack(
|
|
802
864
|
"PersistRocksDBOptions:start", [fault_fs](void* /* arg */) {
|
|
803
|
-
fault_fs->
|
|
865
|
+
fault_fs->EnableThreadLocalErrorInjection(
|
|
866
|
+
FaultInjectionIOType::kMetadataWrite);
|
|
804
867
|
});
|
|
805
868
|
SyncPoint::GetInstance()->SetCallBack(
|
|
806
869
|
"FaultInjectionTestFS::InjectMetadataWriteError:Injected",
|
|
807
870
|
[fault_fs](void* /* arg */) {
|
|
808
|
-
fault_fs->
|
|
871
|
+
fault_fs->DisableThreadLocalErrorInjection(
|
|
872
|
+
FaultInjectionIOType::kMetadataWrite);
|
|
809
873
|
});
|
|
810
874
|
options.env = fault_fs_env.get();
|
|
811
875
|
SyncPoint::GetInstance()->EnableProcessing();
|
|
@@ -930,49 +994,41 @@ TEST_F(CheckpointTest, CheckpointWithDbPath) {
|
|
|
930
994
|
delete checkpoint;
|
|
931
995
|
}
|
|
932
996
|
|
|
933
|
-
TEST_F(CheckpointTest,
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
// unopenable DB with error "Corruption: Size mismatch: WAL ...".
|
|
938
|
-
Options options = CurrentOptions();
|
|
939
|
-
std::unique_ptr<FaultInjectionTestEnv> fault_env(
|
|
940
|
-
new FaultInjectionTestEnv(env_));
|
|
941
|
-
options.env = fault_env.get();
|
|
942
|
-
options.track_and_verify_wals_in_manifest = true;
|
|
943
|
-
Reopen(options);
|
|
944
|
-
|
|
945
|
-
ASSERT_OK(Put("key1", "val1"));
|
|
946
|
-
|
|
947
|
-
SyncPoint::GetInstance()->SetCallBack(
|
|
948
|
-
"DBImpl::SyncWAL:BeforeMarkLogsSynced:1",
|
|
949
|
-
[this](void* /* arg */) { ASSERT_OK(Put("key2", "val2")); });
|
|
997
|
+
TEST_F(CheckpointTest, CheckpointWithArchievedLog) {
|
|
998
|
+
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->LoadDependency(
|
|
999
|
+
{{"WalManager::ArchiveWALFile",
|
|
1000
|
+
"CheckpointTest:CheckpointWithArchievedLog"}});
|
|
950
1001
|
ROCKSDB_NAMESPACE::SyncPoint::GetInstance()->EnableProcessing();
|
|
1002
|
+
Options options = CurrentOptions();
|
|
1003
|
+
options.WAL_ttl_seconds = 3600;
|
|
1004
|
+
options.disable_auto_compactions = true;
|
|
1005
|
+
DestroyAndReopen(options);
|
|
951
1006
|
|
|
952
|
-
std::
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
checkpoint.reset(checkpoint_ptr);
|
|
957
|
-
}
|
|
958
|
-
|
|
959
|
-
ASSERT_OK(checkpoint->CreateCheckpoint(snapshot_name_));
|
|
960
|
-
|
|
961
|
-
// Ensure callback ran.
|
|
962
|
-
ASSERT_EQ("val2", Get("key2"));
|
|
963
|
-
|
|
964
|
-
Close();
|
|
965
|
-
|
|
966
|
-
// Simulate full loss of unsynced data. This drops "key2" -> "val2" from the
|
|
967
|
-
// DB WAL.
|
|
968
|
-
ASSERT_OK(fault_env->DropUnsyncedFileData());
|
|
1007
|
+
ASSERT_OK(Put("key1", std::string(1024 * 1024, 'a')));
|
|
1008
|
+
// flush and archive the first log
|
|
1009
|
+
ASSERT_OK(Flush());
|
|
1010
|
+
ASSERT_OK(Put("key2", std::string(1024, 'a')));
|
|
969
1011
|
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
1012
|
+
Checkpoint* checkpoint;
|
|
1013
|
+
ASSERT_OK(Checkpoint::Create(db_, &checkpoint));
|
|
1014
|
+
TEST_SYNC_POINT("CheckpointTest:CheckpointWithArchievedLog");
|
|
1015
|
+
ASSERT_OK(checkpoint->CreateCheckpoint(snapshot_name_, 1024 * 1024));
|
|
1016
|
+
// unflushed log size < 1024 * 1024 < total file size including archived log,
|
|
1017
|
+
// so flush shouldn't occur, there is only one file at level 0
|
|
1018
|
+
ASSERT_EQ(NumTableFilesAtLevel(0), 1);
|
|
1019
|
+
delete checkpoint;
|
|
1020
|
+
checkpoint = nullptr;
|
|
973
1021
|
|
|
974
|
-
|
|
975
|
-
|
|
1022
|
+
DB* snapshot_db;
|
|
1023
|
+
ASSERT_OK(DB::Open(options, snapshot_name_, &snapshot_db));
|
|
1024
|
+
ReadOptions read_opts;
|
|
1025
|
+
std::string get_result;
|
|
1026
|
+
ASSERT_OK(snapshot_db->Get(read_opts, "key1", &get_result));
|
|
1027
|
+
ASSERT_EQ(std::string(1024 * 1024, 'a'), get_result);
|
|
1028
|
+
get_result.clear();
|
|
1029
|
+
ASSERT_OK(snapshot_db->Get(read_opts, "key2", &get_result));
|
|
1030
|
+
ASSERT_EQ(std::string(1024, 'a'), get_result);
|
|
1031
|
+
delete snapshot_db;
|
|
976
1032
|
}
|
|
977
1033
|
|
|
978
1034
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -85,9 +85,21 @@ Status GetAllKeyVersions(DB* db, ColumnFamilyHandle* cfh, Slice begin_key,
|
|
|
85
85
|
ScopedArenaPtr<InternalIterator> iter(
|
|
86
86
|
idb->NewInternalIterator(read_options, &arena, kMaxSequenceNumber, cfh));
|
|
87
87
|
|
|
88
|
-
|
|
88
|
+
const Comparator* ucmp = icmp.user_comparator();
|
|
89
|
+
size_t ts_sz = ucmp->timestamp_size();
|
|
90
|
+
|
|
91
|
+
Slice from_slice = begin_key;
|
|
92
|
+
bool has_begin = !begin_key.empty();
|
|
93
|
+
Slice end_slice = end_key;
|
|
94
|
+
bool has_end = !end_key.empty();
|
|
95
|
+
std::string begin_key_buf, end_key_buf;
|
|
96
|
+
auto [from, end] = MaybeAddTimestampsToRange(
|
|
97
|
+
has_begin ? &from_slice : nullptr, has_end ? &end_slice : nullptr, ts_sz,
|
|
98
|
+
&begin_key_buf, &end_key_buf);
|
|
99
|
+
if (has_begin) {
|
|
100
|
+
assert(from.has_value());
|
|
89
101
|
InternalKey ikey;
|
|
90
|
-
ikey.SetMinPossibleForUserKey(
|
|
102
|
+
ikey.SetMinPossibleForUserKey(from.value());
|
|
91
103
|
iter->Seek(ikey.Encode());
|
|
92
104
|
} else {
|
|
93
105
|
iter->SeekToFirst();
|
|
@@ -102,8 +114,8 @@ Status GetAllKeyVersions(DB* db, ColumnFamilyHandle* cfh, Slice begin_key,
|
|
|
102
114
|
return pik_status;
|
|
103
115
|
}
|
|
104
116
|
|
|
105
|
-
if (
|
|
106
|
-
icmp.user_comparator()->Compare(ikey.user_key,
|
|
117
|
+
if (has_end && end.has_value() &&
|
|
118
|
+
icmp.user_comparator()->Compare(ikey.user_key, end.value()) > 0) {
|
|
107
119
|
break;
|
|
108
120
|
}
|
|
109
121
|
|