@nxtedition/rocksdb 10.1.4 → 10.1.6
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 +16 -12
- 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/index.js +1 -2
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
- package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
- package/util.h +25 -2
- 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
- package/tmp/000099.sst +0 -0
- package/tmp/000102.sst +0 -0
- package/tmp/000103.log +0 -0
- package/tmp/CURRENT +0 -1
- package/tmp/IDENTITY +0 -1
- package/tmp/LOCK +0 -0
- package/tmp/MANIFEST-000104 +0 -0
- package/tmp/OPTIONS-000098 +0 -207
- package/tmp/OPTIONS-000106 +0 -207
|
@@ -314,6 +314,8 @@ class CompactionJob {
|
|
|
314
314
|
// deleted because that version is not visible in any snapshot.
|
|
315
315
|
std::vector<SequenceNumber> existing_snapshots_;
|
|
316
316
|
|
|
317
|
+
SequenceNumber earliest_snapshot_;
|
|
318
|
+
|
|
317
319
|
// This is the earliest snapshot that could be used for write-conflict
|
|
318
320
|
// checking by a transaction. For any user-key newer than this snapshot, we
|
|
319
321
|
// should make sure not to remove evidence that a write occurred.
|
|
@@ -4330,6 +4330,118 @@ TEST_F(CompactionPickerTest, IntraL0WhenL0IsSmall) {
|
|
|
4330
4330
|
}
|
|
4331
4331
|
}
|
|
4332
4332
|
|
|
4333
|
+
TEST_F(CompactionPickerTest, UniversalMaxReadAmpLargeDB) {
|
|
4334
|
+
ioptions_.compaction_style = kCompactionStyleUniversal;
|
|
4335
|
+
ioptions_.num_levels = 50;
|
|
4336
|
+
mutable_cf_options_.RefreshDerivedOptions(ioptions_);
|
|
4337
|
+
mutable_cf_options_.compaction_options_universal.size_ratio = 10;
|
|
4338
|
+
mutable_cf_options_.write_buffer_size = 256 << 20;
|
|
4339
|
+
// Avoid space amp compaction
|
|
4340
|
+
mutable_cf_options_.compaction_options_universal
|
|
4341
|
+
.max_size_amplification_percent = 200;
|
|
4342
|
+
const int kMaxRuns = 8;
|
|
4343
|
+
for (int max_read_amp : {kMaxRuns, 0, -1}) {
|
|
4344
|
+
SCOPED_TRACE("max_read_amp = " + std::to_string(max_read_amp));
|
|
4345
|
+
if (max_read_amp == -1) {
|
|
4346
|
+
mutable_cf_options_.level0_file_num_compaction_trigger = kMaxRuns;
|
|
4347
|
+
} else {
|
|
4348
|
+
mutable_cf_options_.level0_file_num_compaction_trigger = 4;
|
|
4349
|
+
}
|
|
4350
|
+
mutable_cf_options_.compaction_options_universal.max_read_amp =
|
|
4351
|
+
max_read_amp;
|
|
4352
|
+
UniversalCompactionPicker universal_compaction_picker(ioptions_, &icmp_);
|
|
4353
|
+
uint64_t max_run_size = 20ull << 30;
|
|
4354
|
+
// When max_read_amp = 0, we estimate the number of levels needed based on
|
|
4355
|
+
// size_ratio and write_buffer_size. See more in
|
|
4356
|
+
// UniversalCompactionBuilder::PickCompaction().
|
|
4357
|
+
// With a 20GB last level, we estimate that 8 levels are needed:
|
|
4358
|
+
// L0 256MB
|
|
4359
|
+
// L1 256MB * 1.1 (size_ratio) = 282MB
|
|
4360
|
+
// L2 (256MB + 282MB) * 1.1 = 592MB
|
|
4361
|
+
// L3 1243MB
|
|
4362
|
+
// L4 2610MB
|
|
4363
|
+
// L5 5481MB
|
|
4364
|
+
// L6 11510MB
|
|
4365
|
+
// L7 24171MB > 20GB
|
|
4366
|
+
for (int i = 0; i <= kMaxRuns; ++i) {
|
|
4367
|
+
SCOPED_TRACE("i = " + std::to_string(i));
|
|
4368
|
+
NewVersionStorage(/*num_levels=*/50, kCompactionStyleUniversal);
|
|
4369
|
+
Add(/*level=*/49, /*file_number=*/10, /*smallest=*/"100",
|
|
4370
|
+
/*largest=*/"200", /*file_size=*/max_run_size, /*path_id=*/0,
|
|
4371
|
+
/*smallest_seq=*/0, /*largest_seq=*/0,
|
|
4372
|
+
/*compensated_file_size=*/max_run_size);
|
|
4373
|
+
// Besides the last sorted run, we add additional `i` sorted runs
|
|
4374
|
+
// without triggering space-amp or size-amp compactions.
|
|
4375
|
+
uint64_t file_size = 1 << 20;
|
|
4376
|
+
for (int j = 0; j < i; ++j) {
|
|
4377
|
+
Add(/*level=*/j, /*file_number=*/100 - j, /*smallest=*/"100",
|
|
4378
|
+
/*largest=*/"200", /*file_size=*/file_size, /*path_id=*/0,
|
|
4379
|
+
/*smallest_seq=*/100 - j, /*largest_seq=*/100 - j,
|
|
4380
|
+
/*compensated_file_size=*/file_size);
|
|
4381
|
+
// to avoid space-amp and size-amp compaction
|
|
4382
|
+
file_size *= 2;
|
|
4383
|
+
}
|
|
4384
|
+
UpdateVersionStorageInfo();
|
|
4385
|
+
// level0_file_num_compaction_trigger is still used as trigger to
|
|
4386
|
+
// check potential compactions
|
|
4387
|
+
ASSERT_EQ(
|
|
4388
|
+
universal_compaction_picker.NeedsCompaction(vstorage_.get()),
|
|
4389
|
+
i + 1 >= mutable_cf_options_.level0_file_num_compaction_trigger);
|
|
4390
|
+
std::unique_ptr<Compaction> compaction(
|
|
4391
|
+
universal_compaction_picker.PickCompaction(
|
|
4392
|
+
cf_name_, mutable_cf_options_, mutable_db_options_,
|
|
4393
|
+
vstorage_.get(), &log_buffer_));
|
|
4394
|
+
if (i == kMaxRuns) {
|
|
4395
|
+
// There are in total i + 1 > kMaxRuns sorted runs.
|
|
4396
|
+
// This triggers compaction ignoring size_ratio.
|
|
4397
|
+
ASSERT_NE(nullptr, compaction);
|
|
4398
|
+
ASSERT_EQ(CompactionReason::kUniversalSortedRunNum,
|
|
4399
|
+
compaction->compaction_reason());
|
|
4400
|
+
// First two runs are compacted
|
|
4401
|
+
ASSERT_EQ(0, compaction->start_level());
|
|
4402
|
+
ASSERT_EQ(1, compaction->output_level());
|
|
4403
|
+
ASSERT_EQ(1U, compaction->num_input_files(0));
|
|
4404
|
+
ASSERT_EQ(1U, compaction->num_input_files(1));
|
|
4405
|
+
} else {
|
|
4406
|
+
ASSERT_EQ(nullptr, compaction);
|
|
4407
|
+
}
|
|
4408
|
+
}
|
|
4409
|
+
}
|
|
4410
|
+
}
|
|
4411
|
+
|
|
4412
|
+
TEST_F(CompactionPickerTest, UniversalMaxReadAmpSmallDB) {
|
|
4413
|
+
ioptions_.compaction_style = kCompactionStyleUniversal;
|
|
4414
|
+
ioptions_.num_levels = 50;
|
|
4415
|
+
mutable_cf_options_.RefreshDerivedOptions(ioptions_);
|
|
4416
|
+
mutable_cf_options_.level0_file_num_compaction_trigger = 1;
|
|
4417
|
+
mutable_cf_options_.compaction_options_universal.size_ratio = 10;
|
|
4418
|
+
mutable_cf_options_.write_buffer_size = 256 << 20;
|
|
4419
|
+
mutable_cf_options_.compaction_options_universal
|
|
4420
|
+
.max_size_amplification_percent = 200;
|
|
4421
|
+
const int kMaxRuns = 1;
|
|
4422
|
+
for (int max_read_amp : {-1, kMaxRuns, 0}) {
|
|
4423
|
+
SCOPED_TRACE("max_read_amp = " + std::to_string(max_read_amp));
|
|
4424
|
+
mutable_cf_options_.compaction_options_universal.max_read_amp =
|
|
4425
|
+
max_read_amp;
|
|
4426
|
+
UniversalCompactionPicker universal_compaction_picker(ioptions_, &icmp_);
|
|
4427
|
+
NewVersionStorage(/*num_levels=*/50, kCompactionStyleUniversal);
|
|
4428
|
+
// max_run_size is much smaller than write_buffer_size,
|
|
4429
|
+
// only 1 level is needed.
|
|
4430
|
+
uint64_t max_run_size = 8 << 10;
|
|
4431
|
+
Add(/*level=*/49, /*file_number=*/10, /*smallest=*/"100",
|
|
4432
|
+
/*largest=*/"200", /*file_size=*/max_run_size, /*path_id=*/0,
|
|
4433
|
+
/*smallest_seq=*/0, /*largest_seq=*/0,
|
|
4434
|
+
/*compensated_file_size=*/max_run_size);
|
|
4435
|
+
UpdateVersionStorageInfo();
|
|
4436
|
+
ASSERT_TRUE(universal_compaction_picker.NeedsCompaction(vstorage_.get()));
|
|
4437
|
+
std::unique_ptr<Compaction> compaction(
|
|
4438
|
+
universal_compaction_picker.PickCompaction(
|
|
4439
|
+
cf_name_, mutable_cf_options_, mutable_db_options_, vstorage_.get(),
|
|
4440
|
+
&log_buffer_));
|
|
4441
|
+
ASSERT_EQ(nullptr, compaction);
|
|
4442
|
+
}
|
|
4443
|
+
}
|
|
4444
|
+
|
|
4333
4445
|
} // namespace ROCKSDB_NAMESPACE
|
|
4334
4446
|
|
|
4335
4447
|
int main(int argc, char** argv) {
|
|
@@ -227,6 +227,7 @@ class UniversalCompactionBuilder {
|
|
|
227
227
|
const InternalKeyComparator* icmp_;
|
|
228
228
|
double score_;
|
|
229
229
|
std::vector<SortedRun> sorted_runs_;
|
|
230
|
+
uint64_t max_run_size_;
|
|
230
231
|
const std::string& cf_name_;
|
|
231
232
|
const MutableCFOptions& mutable_cf_options_;
|
|
232
233
|
const MutableDBOptions& mutable_db_options_;
|
|
@@ -235,7 +236,8 @@ class UniversalCompactionBuilder {
|
|
|
235
236
|
LogBuffer* log_buffer_;
|
|
236
237
|
|
|
237
238
|
static std::vector<UniversalCompactionBuilder::SortedRun> CalculateSortedRuns(
|
|
238
|
-
const VersionStorageInfo& vstorage, int last_level
|
|
239
|
+
const VersionStorageInfo& vstorage, int last_level,
|
|
240
|
+
uint64_t* max_run_size);
|
|
239
241
|
|
|
240
242
|
// Pick a path ID to place a newly generated file, with its estimated file
|
|
241
243
|
// size.
|
|
@@ -440,11 +442,15 @@ void UniversalCompactionBuilder::SortedRun::DumpSizeInfo(
|
|
|
440
442
|
|
|
441
443
|
std::vector<UniversalCompactionBuilder::SortedRun>
|
|
442
444
|
UniversalCompactionBuilder::CalculateSortedRuns(
|
|
443
|
-
const VersionStorageInfo& vstorage, int last_level
|
|
445
|
+
const VersionStorageInfo& vstorage, int last_level,
|
|
446
|
+
uint64_t* max_run_size) {
|
|
447
|
+
assert(max_run_size);
|
|
448
|
+
*max_run_size = 0;
|
|
444
449
|
std::vector<UniversalCompactionBuilder::SortedRun> ret;
|
|
445
450
|
for (FileMetaData* f : vstorage.LevelFiles(0)) {
|
|
446
451
|
ret.emplace_back(0, f, f->fd.GetFileSize(), f->compensated_file_size,
|
|
447
452
|
f->being_compacted);
|
|
453
|
+
*max_run_size = std::max(*max_run_size, f->fd.GetFileSize());
|
|
448
454
|
}
|
|
449
455
|
for (int level = 1; level <= last_level; level++) {
|
|
450
456
|
uint64_t total_compensated_size = 0U;
|
|
@@ -466,6 +472,7 @@ UniversalCompactionBuilder::CalculateSortedRuns(
|
|
|
466
472
|
ret.emplace_back(level, nullptr, total_size, total_compensated_size,
|
|
467
473
|
being_compacted);
|
|
468
474
|
}
|
|
475
|
+
*max_run_size = std::max(*max_run_size, total_size);
|
|
469
476
|
}
|
|
470
477
|
return ret;
|
|
471
478
|
}
|
|
@@ -477,13 +484,16 @@ Compaction* UniversalCompactionBuilder::PickCompaction() {
|
|
|
477
484
|
score_ = vstorage_->CompactionScore(kLevel0);
|
|
478
485
|
int max_output_level =
|
|
479
486
|
vstorage_->MaxOutputLevel(ioptions_.allow_ingest_behind);
|
|
480
|
-
|
|
487
|
+
max_run_size_ = 0;
|
|
488
|
+
sorted_runs_ =
|
|
489
|
+
CalculateSortedRuns(*vstorage_, max_output_level, &max_run_size_);
|
|
490
|
+
int file_num_compaction_trigger =
|
|
491
|
+
mutable_cf_options_.level0_file_num_compaction_trigger;
|
|
481
492
|
|
|
482
493
|
if (sorted_runs_.size() == 0 ||
|
|
483
494
|
(vstorage_->FilesMarkedForPeriodicCompaction().empty() &&
|
|
484
495
|
vstorage_->FilesMarkedForCompaction().empty() &&
|
|
485
|
-
sorted_runs_.size() < (unsigned int)
|
|
486
|
-
.level0_file_num_compaction_trigger)) {
|
|
496
|
+
sorted_runs_.size() < (unsigned int)file_num_compaction_trigger)) {
|
|
487
497
|
ROCKS_LOG_BUFFER(log_buffer_, "[%s] Universal: nothing to do\n",
|
|
488
498
|
cf_name_.c_str());
|
|
489
499
|
TEST_SYNC_POINT_CALLBACK(
|
|
@@ -505,11 +515,9 @@ Compaction* UniversalCompactionBuilder::PickCompaction() {
|
|
|
505
515
|
TEST_SYNC_POINT_CALLBACK("PostPickPeriodicCompaction", c);
|
|
506
516
|
}
|
|
507
517
|
|
|
508
|
-
// Check for size amplification.
|
|
509
518
|
if (c == nullptr &&
|
|
510
|
-
sorted_runs_.size() >=
|
|
511
|
-
|
|
512
|
-
mutable_cf_options_.level0_file_num_compaction_trigger)) {
|
|
519
|
+
sorted_runs_.size() >= static_cast<size_t>(file_num_compaction_trigger)) {
|
|
520
|
+
// Check for size amplification.
|
|
513
521
|
if ((c = PickCompactionToReduceSizeAmp()) != nullptr) {
|
|
514
522
|
TEST_SYNC_POINT("PickCompactionToReduceSizeAmpReturnNonnullptr");
|
|
515
523
|
ROCKS_LOG_BUFFER(log_buffer_, "[%s] Universal: compacting for size amp\n",
|
|
@@ -527,13 +535,48 @@ Compaction* UniversalCompactionBuilder::PickCompaction() {
|
|
|
527
535
|
cf_name_.c_str());
|
|
528
536
|
} else {
|
|
529
537
|
// Size amplification and file size ratios are within configured limits.
|
|
530
|
-
// If max read amplification
|
|
531
|
-
// compaction
|
|
532
|
-
//
|
|
538
|
+
// If max read amplification exceeds configured limits, then force
|
|
539
|
+
// compaction to reduce the number sorted runs without looking at file
|
|
540
|
+
// size ratios.
|
|
541
|
+
|
|
533
542
|
// This is guaranteed by NeedsCompaction()
|
|
534
543
|
assert(sorted_runs_.size() >=
|
|
535
|
-
static_cast<size_t>(
|
|
536
|
-
|
|
544
|
+
static_cast<size_t>(file_num_compaction_trigger));
|
|
545
|
+
int max_num_runs =
|
|
546
|
+
mutable_cf_options_.compaction_options_universal.max_read_amp;
|
|
547
|
+
if (max_num_runs < 0) {
|
|
548
|
+
// any value < -1 is not valid
|
|
549
|
+
assert(max_num_runs == -1);
|
|
550
|
+
// By default, fall back to `level0_file_num_compaction_trigger`
|
|
551
|
+
max_num_runs = file_num_compaction_trigger;
|
|
552
|
+
} else if (max_num_runs == 0) {
|
|
553
|
+
if (mutable_cf_options_.compaction_options_universal.stop_style ==
|
|
554
|
+
kCompactionStopStyleTotalSize) {
|
|
555
|
+
// 0 means auto-tuning by RocksDB. We estimate max num run based on
|
|
556
|
+
// max_run_size, size_ratio and write buffer size:
|
|
557
|
+
// Assume the size of the lowest level size is equal to
|
|
558
|
+
// write_buffer_size. Each subsequent level is the max size without
|
|
559
|
+
// triggering size_ratio compaction. `max_num_runs` is the minimum
|
|
560
|
+
// number of levels required such that the target size of the
|
|
561
|
+
// largest level is at least `max_run_size_`.
|
|
562
|
+
max_num_runs = 1;
|
|
563
|
+
double cur_level_max_size =
|
|
564
|
+
static_cast<double>(mutable_cf_options_.write_buffer_size);
|
|
565
|
+
double total_run_size = 0;
|
|
566
|
+
while (cur_level_max_size < static_cast<double>(max_run_size_)) {
|
|
567
|
+
// This loop should not take too many iterations since
|
|
568
|
+
// cur_level_max_size at least doubles each iteration.
|
|
569
|
+
total_run_size += cur_level_max_size;
|
|
570
|
+
cur_level_max_size = (100.0 + ratio) / 100.0 * total_run_size;
|
|
571
|
+
++max_num_runs;
|
|
572
|
+
}
|
|
573
|
+
} else {
|
|
574
|
+
// TODO: implement the auto-tune logic for this stop style
|
|
575
|
+
max_num_runs = file_num_compaction_trigger;
|
|
576
|
+
}
|
|
577
|
+
} else {
|
|
578
|
+
// max_num_runs > 0, it's the limit on the number of sorted run
|
|
579
|
+
}
|
|
537
580
|
// Get the total number of sorted runs that are not being compacted
|
|
538
581
|
int num_sr_not_compacted = 0;
|
|
539
582
|
for (size_t i = 0; i < sorted_runs_.size(); i++) {
|
|
@@ -544,17 +587,25 @@ Compaction* UniversalCompactionBuilder::PickCompaction() {
|
|
|
544
587
|
|
|
545
588
|
// The number of sorted runs that are not being compacted is greater
|
|
546
589
|
// than the maximum allowed number of sorted runs
|
|
547
|
-
if (num_sr_not_compacted >
|
|
548
|
-
|
|
549
|
-
unsigned int num_files =
|
|
550
|
-
num_sr_not_compacted -
|
|
551
|
-
mutable_cf_options_.level0_file_num_compaction_trigger + 1;
|
|
590
|
+
if (num_sr_not_compacted > max_num_runs) {
|
|
591
|
+
unsigned int num_files = num_sr_not_compacted - max_num_runs + 1;
|
|
552
592
|
if ((c = PickCompactionToReduceSortedRuns(UINT_MAX, num_files)) !=
|
|
553
593
|
nullptr) {
|
|
554
594
|
ROCKS_LOG_BUFFER(log_buffer_,
|
|
555
|
-
"[%s] Universal: compacting for file num
|
|
556
|
-
|
|
595
|
+
"[%s] Universal: compacting for file num, to "
|
|
596
|
+
"compact file num -- %u, max num runs allowed"
|
|
597
|
+
"-- %d, max_run_size -- %" PRIu64 "\n",
|
|
598
|
+
cf_name_.c_str(), num_files, max_num_runs,
|
|
599
|
+
max_run_size_);
|
|
557
600
|
}
|
|
601
|
+
} else {
|
|
602
|
+
ROCKS_LOG_BUFFER(
|
|
603
|
+
log_buffer_,
|
|
604
|
+
"[%s] Universal: skipping compaction for file num, num runs not "
|
|
605
|
+
"being compacted -- %u, max num runs allowed -- %d, max_run_size "
|
|
606
|
+
"-- %" PRIu64 "\n",
|
|
607
|
+
cf_name_.c_str(), num_sr_not_compacted, max_num_runs,
|
|
608
|
+
max_run_size_);
|
|
558
609
|
}
|
|
559
610
|
}
|
|
560
611
|
}
|
|
@@ -275,6 +275,8 @@ Status CompactionServiceCompactionJob::Run() {
|
|
|
275
275
|
log_buffer_->FlushBufferToLog();
|
|
276
276
|
LogCompaction();
|
|
277
277
|
const uint64_t start_micros = db_options_.clock->NowMicros();
|
|
278
|
+
c->GetOrInitInputTableProperties();
|
|
279
|
+
|
|
278
280
|
// Pick the only sub-compaction we should have
|
|
279
281
|
assert(compact_->sub_compact_states.size() == 1);
|
|
280
282
|
SubcompactionState* sub_compact = compact_->sub_compact_states.data();
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
#include "rocksdb/iostats_context.h"
|
|
14
14
|
#include "rocksdb/listener.h"
|
|
15
15
|
#include "rocksdb/utilities/debug.h"
|
|
16
|
+
#include "rocksdb/utilities/table_properties_collectors.h"
|
|
16
17
|
#include "test_util/mock_time_env.h"
|
|
17
18
|
#include "utilities/merge_operators.h"
|
|
18
19
|
|
|
@@ -1734,6 +1735,82 @@ TEST_P(TimedPutPrecludeLastLevelTest, PreserveTimedPutOnPenultimateLevel) {
|
|
|
1734
1735
|
Close();
|
|
1735
1736
|
}
|
|
1736
1737
|
|
|
1738
|
+
TEST_P(TimedPutPrecludeLastLevelTest, AutoTriggerCompaction) {
|
|
1739
|
+
const int kNumTrigger = 10;
|
|
1740
|
+
const int kNumLevels = 7;
|
|
1741
|
+
const int kNumKeys = 200;
|
|
1742
|
+
|
|
1743
|
+
Options options = CurrentOptions();
|
|
1744
|
+
options.compaction_style = kCompactionStyleUniversal;
|
|
1745
|
+
options.preclude_last_level_data_seconds = 60;
|
|
1746
|
+
options.preserve_internal_time_seconds = 0;
|
|
1747
|
+
options.env = mock_env_.get();
|
|
1748
|
+
options.level0_file_num_compaction_trigger = kNumTrigger;
|
|
1749
|
+
options.num_levels = kNumLevels;
|
|
1750
|
+
options.last_level_temperature = Temperature::kCold;
|
|
1751
|
+
ConfigOptions config_options;
|
|
1752
|
+
config_options.ignore_unsupported_options = false;
|
|
1753
|
+
std::shared_ptr<TablePropertiesCollectorFactory> factory;
|
|
1754
|
+
std::string id = CompactForTieringCollectorFactory::kClassName();
|
|
1755
|
+
ASSERT_OK(TablePropertiesCollectorFactory::CreateFromString(
|
|
1756
|
+
config_options, "compaction_trigger_ratio=0.4; id=" + id, &factory));
|
|
1757
|
+
auto collector_factory =
|
|
1758
|
+
factory->CheckedCast<CompactForTieringCollectorFactory>();
|
|
1759
|
+
options.table_properties_collector_factories.push_back(factory);
|
|
1760
|
+
DestroyAndReopen(options);
|
|
1761
|
+
WriteOptions wo;
|
|
1762
|
+
wo.protection_bytes_per_key = GetParam();
|
|
1763
|
+
|
|
1764
|
+
Random rnd(301);
|
|
1765
|
+
|
|
1766
|
+
dbfull()->TEST_WaitForPeriodicTaskRun([&] {
|
|
1767
|
+
mock_clock_->MockSleepForSeconds(static_cast<int>(rnd.Uniform(10) + 1));
|
|
1768
|
+
});
|
|
1769
|
+
|
|
1770
|
+
for (int i = 0; i < kNumKeys / 4; i++) {
|
|
1771
|
+
ASSERT_OK(Put(Key(i), rnd.RandomString(100), wo));
|
|
1772
|
+
dbfull()->TEST_WaitForPeriodicTaskRun([&] {
|
|
1773
|
+
mock_clock_->MockSleepForSeconds(static_cast<int>(rnd.Uniform(2)));
|
|
1774
|
+
});
|
|
1775
|
+
}
|
|
1776
|
+
// Create one file with regular Put.
|
|
1777
|
+
ASSERT_OK(Flush());
|
|
1778
|
+
|
|
1779
|
+
// Create one file with TimedPut.
|
|
1780
|
+
// These data are eligible to be put on the last level once written to db
|
|
1781
|
+
// and compaction will fast track them to the last level.
|
|
1782
|
+
for (int i = kNumKeys / 4; i < kNumKeys / 2; i++) {
|
|
1783
|
+
ASSERT_OK(TimedPut(0, Key(i), rnd.RandomString(100), 50, wo));
|
|
1784
|
+
}
|
|
1785
|
+
ASSERT_OK(Flush());
|
|
1786
|
+
|
|
1787
|
+
// TimedPut file moved to the last level via auto triggered compaction.
|
|
1788
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
1789
|
+
ASSERT_EQ("1,0,0,0,0,0,1", FilesPerLevel());
|
|
1790
|
+
ASSERT_GT(GetSstSizeHelper(Temperature::kUnknown), 0);
|
|
1791
|
+
ASSERT_GT(GetSstSizeHelper(Temperature::kCold), 0);
|
|
1792
|
+
|
|
1793
|
+
collector_factory->SetCompactionTriggerRatio(1.1);
|
|
1794
|
+
for (int i = kNumKeys / 2; i < kNumKeys * 3 / 4; i++) {
|
|
1795
|
+
ASSERT_OK(TimedPut(0, Key(i), rnd.RandomString(100), 50, wo));
|
|
1796
|
+
}
|
|
1797
|
+
ASSERT_OK(Flush());
|
|
1798
|
+
|
|
1799
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
1800
|
+
ASSERT_EQ("2,0,0,0,0,0,1", FilesPerLevel());
|
|
1801
|
+
|
|
1802
|
+
collector_factory->SetCompactionTriggerRatio(0);
|
|
1803
|
+
for (int i = kNumKeys * 3 / 4; i < kNumKeys; i++) {
|
|
1804
|
+
ASSERT_OK(TimedPut(0, Key(i), rnd.RandomString(100), 50, wo));
|
|
1805
|
+
}
|
|
1806
|
+
ASSERT_OK(Flush());
|
|
1807
|
+
|
|
1808
|
+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
|
|
1809
|
+
ASSERT_EQ("3,0,0,0,0,0,1", FilesPerLevel());
|
|
1810
|
+
|
|
1811
|
+
Close();
|
|
1812
|
+
}
|
|
1813
|
+
|
|
1737
1814
|
INSTANTIATE_TEST_CASE_P(TimedPutPrecludeLastLevelTest,
|
|
1738
1815
|
TimedPutPrecludeLastLevelTest, ::testing::Values(0, 8));
|
|
1739
1816
|
|
|
@@ -71,6 +71,9 @@ Status VerifySstFileChecksumInternal(const Options& options,
|
|
|
71
71
|
} else {
|
|
72
72
|
return s;
|
|
73
73
|
}
|
|
74
|
+
if (!s.ok()) {
|
|
75
|
+
return s;
|
|
76
|
+
}
|
|
74
77
|
std::unique_ptr<TableReader> table_reader;
|
|
75
78
|
std::unique_ptr<RandomAccessFileReader> file_reader(
|
|
76
79
|
new RandomAccessFileReader(
|