@nxtedition/rocksdb 13.1.4 → 13.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 +43 -16
- package/deps/rocksdb/rocksdb/{TARGETS → BUCK} +27 -0
- package/deps/rocksdb/rocksdb/CMakeLists.txt +3 -1
- package/deps/rocksdb/rocksdb/Makefile +2 -2
- package/deps/rocksdb/rocksdb/cache/cache.cc +3 -1
- package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +2 -0
- package/deps/rocksdb/rocksdb/db/attribute_group_iterator_impl.h +34 -9
- package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +7 -6
- package/deps/rocksdb/rocksdb/db/blob/blob_source.h +5 -1
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +22 -14
- package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +149 -0
- package/deps/rocksdb/rocksdb/db/builder.cc +13 -24
- package/deps/rocksdb/rocksdb/db/coalescing_iterator.h +35 -10
- package/deps/rocksdb/rocksdb/db/column_family.cc +21 -10
- package/deps/rocksdb/rocksdb/db/column_family.h +15 -8
- package/deps/rocksdb/rocksdb/db/column_family_test.cc +98 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +126 -16
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +51 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +2 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +2 -8
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +24 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +52 -22
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +9 -7
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +36 -9
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +6 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +30 -17
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +26 -23
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +43 -33
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +6 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +19 -9
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +6 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +632 -411
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +171 -51
- package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +7 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_job.cc +37 -10
- package/deps/rocksdb/rocksdb/db/compaction/compaction_service_test.cc +51 -11
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.cc +10 -3
- package/deps/rocksdb/rocksdb/db/compaction/tiered_compaction_test.cc +350 -154
- package/deps/rocksdb/rocksdb/db/convenience.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +62 -27
- package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +68 -1
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +91 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +134 -70
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +71 -23
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +43 -16
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +47 -33
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +27 -19
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +38 -25
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +3 -3
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +7 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +258 -42
- package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +161 -9
- package/deps/rocksdb/rocksdb/db/db_iter.cc +118 -86
- package/deps/rocksdb/rocksdb/db/db_iter.h +44 -17
- package/deps/rocksdb/rocksdb/db/db_options_test.cc +27 -6
- package/deps/rocksdb/rocksdb/db/db_test.cc +48 -16
- package/deps/rocksdb/rocksdb/db/db_test2.cc +60 -15
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +97 -44
- package/deps/rocksdb/rocksdb/db/db_test_util.h +7 -1
- package/deps/rocksdb/rocksdb/db/dbformat.cc +15 -5
- package/deps/rocksdb/rocksdb/db/dbformat.h +137 -55
- package/deps/rocksdb/rocksdb/db/event_helpers.cc +1 -0
- package/deps/rocksdb/rocksdb/db/experimental.cc +54 -0
- package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +663 -8
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +152 -91
- package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +134 -11
- package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +55 -9
- package/deps/rocksdb/rocksdb/db/flush_job.cc +52 -29
- package/deps/rocksdb/rocksdb/db/flush_job.h +5 -3
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +18 -12
- package/deps/rocksdb/rocksdb/db/forward_iterator.cc +23 -29
- package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +3 -2
- package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +2 -0
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +9 -6
- package/deps/rocksdb/rocksdb/db/internal_stats.h +54 -0
- package/deps/rocksdb/rocksdb/db/job_context.h +1 -1
- package/deps/rocksdb/rocksdb/db/log_reader.cc +6 -7
- package/deps/rocksdb/rocksdb/db/manifest_ops.cc +47 -0
- package/deps/rocksdb/rocksdb/db/manifest_ops.h +20 -0
- package/deps/rocksdb/rocksdb/db/memtable.cc +165 -64
- package/deps/rocksdb/rocksdb/db/memtable.h +422 -243
- package/deps/rocksdb/rocksdb/db/memtable_list.cc +99 -68
- package/deps/rocksdb/rocksdb/db/memtable_list.h +63 -38
- package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +28 -25
- package/deps/rocksdb/rocksdb/db/multi_cf_iterator_impl.h +118 -60
- package/deps/rocksdb/rocksdb/db/multi_cf_iterator_test.cc +344 -89
- package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +2 -3
- package/deps/rocksdb/rocksdb/db/repair.cc +15 -14
- package/deps/rocksdb/rocksdb/db/repair_test.cc +0 -13
- package/deps/rocksdb/rocksdb/db/snapshot_checker.h +7 -0
- package/deps/rocksdb/rocksdb/db/table_cache.cc +62 -65
- package/deps/rocksdb/rocksdb/db/table_cache.h +70 -76
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +5 -6
- package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +1 -1
- package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +8 -7
- package/deps/rocksdb/rocksdb/db/version_builder.cc +17 -19
- package/deps/rocksdb/rocksdb/db/version_builder.h +13 -12
- package/deps/rocksdb/rocksdb/db/version_edit.h +30 -0
- package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +3 -5
- package/deps/rocksdb/rocksdb/db/version_set.cc +89 -129
- package/deps/rocksdb/rocksdb/db/version_set.h +12 -4
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +1 -2
- package/deps/rocksdb/rocksdb/db/version_set_test.cc +12 -8
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.cc +0 -15
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization.h +0 -2
- package/deps/rocksdb/rocksdb/db/wide/wide_column_serialization_test.cc +9 -7
- package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.cc +0 -8
- package/deps/rocksdb/rocksdb/db/wide/wide_columns_helper.h +28 -2
- package/deps/rocksdb/rocksdb/db/write_batch.cc +32 -10
- package/deps/rocksdb/rocksdb/db/write_batch_internal.h +9 -0
- package/deps/rocksdb/rocksdb/db/write_batch_test.cc +2 -1
- package/deps/rocksdb/rocksdb/db/write_thread.cc +3 -1
- package/deps/rocksdb/rocksdb/db/write_thread.h +6 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +15 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +7 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +4 -0
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +18 -2
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +100 -22
- package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +15 -4
- package/deps/rocksdb/rocksdb/db_stress_tool/multi_ops_txns_stress.cc +34 -8
- package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +223 -78
- package/deps/rocksdb/rocksdb/env/file_system.cc +6 -1
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +53 -0
- package/deps/rocksdb/rocksdb/env/io_posix.cc +63 -17
- package/deps/rocksdb/rocksdb/env/io_posix.h +30 -1
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +132 -48
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +92 -24
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +727 -109
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +3 -4
- package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +1 -1
- package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +8 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/attribute_groups.h +20 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +9 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/configurable.h +9 -5
- package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +2 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/db.h +10 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/env.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +7 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +34 -37
- package/deps/rocksdb/rocksdb/include/rocksdb/iterator_base.h +21 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/options.h +56 -28
- package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +3 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/table.h +36 -28
- package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +11 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +1 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +84 -60
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/secondary_index.h +102 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +89 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +32 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +30 -1
- package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +23 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +2 -2
- package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +2 -0
- package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +79 -21
- package/deps/rocksdb/rocksdb/memtable/skiplist.h +41 -18
- package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +1 -5
- package/deps/rocksdb/rocksdb/memtable/wbwi_memtable.cc +169 -0
- package/deps/rocksdb/rocksdb/memtable/wbwi_memtable.h +400 -0
- package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +2 -0
- package/deps/rocksdb/rocksdb/options/cf_options.cc +137 -82
- package/deps/rocksdb/rocksdb/options/cf_options.h +18 -6
- package/deps/rocksdb/rocksdb/options/configurable.cc +31 -17
- package/deps/rocksdb/rocksdb/options/configurable_helper.h +7 -6
- package/deps/rocksdb/rocksdb/options/options_helper.cc +10 -8
- package/deps/rocksdb/rocksdb/options/options_parser.cc +74 -54
- package/deps/rocksdb/rocksdb/options/options_settable_test.cc +89 -0
- package/deps/rocksdb/rocksdb/options/options_test.cc +112 -26
- package/deps/rocksdb/rocksdb/port/port.h +5 -9
- package/deps/rocksdb/rocksdb/src.mk +8 -0
- package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +4 -0
- package/deps/rocksdb/rocksdb/table/block_based/block.h +1 -7
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +2 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +62 -80
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +13 -3
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +16 -5
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +38 -7
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +12 -4
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +4 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +4 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +204 -1
- package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +3 -3
- package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +2 -1
- package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +4 -0
- package/deps/rocksdb/rocksdb/table/format.cc +3 -3
- package/deps/rocksdb/rocksdb/table/meta_blocks.cc +4 -1
- package/deps/rocksdb/rocksdb/table/mock_table.cc +0 -50
- package/deps/rocksdb/rocksdb/table/mock_table.h +53 -0
- package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +4 -0
- package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +1 -1
- package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +10 -5
- package/deps/rocksdb/rocksdb/table/table_builder.h +3 -1
- package/deps/rocksdb/rocksdb/table/table_properties.cc +181 -0
- package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +5 -5
- package/deps/rocksdb/rocksdb/table/table_test.cc +71 -64
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim.py +45 -45
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim_test.py +35 -35
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_plot.py +43 -43
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +41 -4
- package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +1 -0
- package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +1 -1
- package/deps/rocksdb/rocksdb/unreleased_history/add.sh +13 -0
- package/deps/rocksdb/rocksdb/util/aligned_buffer.h +24 -5
- package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +7 -0
- package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +0 -52
- package/deps/rocksdb/rocksdb/util/file_checksum_helper.h +1 -10
- package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +92 -0
- package/deps/rocksdb/rocksdb/util/thread_operation.h +1 -0
- package/deps/rocksdb/rocksdb/util/udt_util.cc +50 -4
- package/deps/rocksdb/rocksdb/util/udt_util.h +24 -11
- package/deps/rocksdb/rocksdb/util/udt_util_test.cc +26 -13
- package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +1 -16
- package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +2 -0
- package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index.cc +214 -0
- package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index.h +60 -0
- package/deps/rocksdb/rocksdb/utilities/secondary_index/faiss_ivf_index_test.cc +124 -0
- package/deps/rocksdb/rocksdb/utilities/secondary_index/secondary_index_mixin.h +441 -0
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_for_tiering_collector.cc +34 -3
- package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_for_tiering_collector.h +7 -2
- package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +437 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +34 -11
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +14 -7
- package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +7 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +17 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +69 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +20 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +1290 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_committed_transaction_ts_test.cc +324 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +18 -1
- package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +8 -1
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +57 -12
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +32 -3
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +33 -2
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +721 -9
- package/deps/rocksdb/rocksdb.gyp +2 -0
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
- package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
|
@@ -105,6 +105,7 @@ class Repairer {
|
|
|
105
105
|
SanitizeOptions(immutable_db_options_, default_cf_opts)),
|
|
106
106
|
default_iopts_(
|
|
107
107
|
ImmutableOptions(immutable_db_options_, default_cf_opts_)),
|
|
108
|
+
default_mopts_(MutableCFOptions(default_cf_opts_)),
|
|
108
109
|
unknown_cf_opts_(
|
|
109
110
|
SanitizeOptions(immutable_db_options_, unknown_cf_opts)),
|
|
110
111
|
create_unknown_cfs_(create_unknown_cfs),
|
|
@@ -261,6 +262,7 @@ class Repairer {
|
|
|
261
262
|
const InternalKeyComparator icmp_;
|
|
262
263
|
const ColumnFamilyOptions default_cf_opts_;
|
|
263
264
|
const ImmutableOptions default_iopts_; // table_cache_ holds reference
|
|
265
|
+
const MutableCFOptions default_mopts_;
|
|
264
266
|
const ColumnFamilyOptions unknown_cf_opts_;
|
|
265
267
|
const bool create_unknown_cfs_;
|
|
266
268
|
std::shared_ptr<Cache> raw_table_cache_;
|
|
@@ -411,9 +413,12 @@ class Repairer {
|
|
|
411
413
|
if (record_status.ok()) {
|
|
412
414
|
const UnorderedMap<uint32_t, size_t>& record_ts_sz =
|
|
413
415
|
reader.GetRecordedTimestampSize();
|
|
416
|
+
// Use same value for `seq_per_batch` and `batch_per_txn` as
|
|
417
|
+
// WriteBatchInternal::InsertInto does below.
|
|
414
418
|
record_status = HandleWriteBatchTimestampSizeDifference(
|
|
415
419
|
&batch, running_ts_sz, record_ts_sz,
|
|
416
|
-
TimestampSizeConsistencyMode::kVerifyConsistency
|
|
420
|
+
TimestampSizeConsistencyMode::kVerifyConsistency,
|
|
421
|
+
/* seq_per_batch */ false, /* batch_per_txn */ true);
|
|
417
422
|
if (record_status.ok()) {
|
|
418
423
|
record_status =
|
|
419
424
|
WriteBatchInternal::InsertInto(&batch, cf_mems, nullptr, nullptr);
|
|
@@ -444,7 +449,7 @@ class Repairer {
|
|
|
444
449
|
Arena arena;
|
|
445
450
|
ScopedArenaPtr<InternalIterator> iter(
|
|
446
451
|
mem->NewIterator(ro, /*seqno_to_time_mapping=*/nullptr, &arena,
|
|
447
|
-
/*prefix_extractor=*/nullptr));
|
|
452
|
+
/*prefix_extractor=*/nullptr, /*for_flush=*/true));
|
|
448
453
|
int64_t _current_time = 0;
|
|
449
454
|
immutable_db_options_.clock->GetCurrentTime(&_current_time)
|
|
450
455
|
.PermitUncheckedError(); // ignore error
|
|
@@ -472,10 +477,10 @@ class Repairer {
|
|
|
472
477
|
write_option, cfd->internal_comparator(),
|
|
473
478
|
cfd->internal_tbl_prop_coll_factories(), kNoCompression,
|
|
474
479
|
default_compression, cfd->GetID(), cfd->GetName(), -1 /* level */,
|
|
475
|
-
false /* is_bottommost */,
|
|
476
|
-
0 /* oldest_key_time */,
|
|
477
|
-
"DB Repairer" /* db_id */, db_session_id_,
|
|
478
|
-
meta.fd.GetNumber());
|
|
480
|
+
current_time /* newest_key_time */, false /* is_bottommost */,
|
|
481
|
+
TableFileCreationReason::kRecovery, 0 /* oldest_key_time */,
|
|
482
|
+
0 /* file_creation_time */, "DB Repairer" /* db_id */, db_session_id_,
|
|
483
|
+
0 /*target_file_size*/, meta.fd.GetNumber());
|
|
479
484
|
|
|
480
485
|
SeqnoToTimeMapping empty_seqno_to_time_mapping;
|
|
481
486
|
status = BuildTable(
|
|
@@ -537,8 +542,7 @@ class Repairer {
|
|
|
537
542
|
// TODO: plumb Env::IOActivity, Env::IOPriority
|
|
538
543
|
const ReadOptions read_options;
|
|
539
544
|
status = table_cache_->GetTableProperties(
|
|
540
|
-
file_options_, read_options, icmp_, t->meta, &props,
|
|
541
|
-
0 /* block_protection_bytes_per_key */);
|
|
545
|
+
file_options_, read_options, icmp_, t->meta, &props, default_mopts_);
|
|
542
546
|
}
|
|
543
547
|
if (status.ok()) {
|
|
544
548
|
auto s =
|
|
@@ -602,15 +606,13 @@ class Repairer {
|
|
|
602
606
|
ropts.total_order_seek = true;
|
|
603
607
|
InternalIterator* iter = table_cache_->NewIterator(
|
|
604
608
|
ropts, file_options_, cfd->internal_comparator(), t->meta,
|
|
605
|
-
nullptr /* range_del_agg */,
|
|
606
|
-
cfd->GetLatestMutableCFOptions()->prefix_extractor,
|
|
609
|
+
nullptr /* range_del_agg */, *cfd->GetLatestMutableCFOptions(),
|
|
607
610
|
/*table_reader_ptr=*/nullptr, /*file_read_hist=*/nullptr,
|
|
608
611
|
TableReaderCaller::kRepair, /*arena=*/nullptr, /*skip_filters=*/false,
|
|
609
612
|
/*level=*/-1, /*max_file_size_for_l0_meta_pin=*/0,
|
|
610
613
|
/*smallest_compaction_key=*/nullptr,
|
|
611
614
|
/*largest_compaction_key=*/nullptr,
|
|
612
|
-
/*allow_unprepared_value=*/false
|
|
613
|
-
cfd->GetLatestMutableCFOptions()->block_protection_bytes_per_key);
|
|
615
|
+
/*allow_unprepared_value=*/false);
|
|
614
616
|
ParsedInternalKey parsed;
|
|
615
617
|
for (iter->SeekToFirst(); iter->Valid(); iter->Next()) {
|
|
616
618
|
Slice key = iter->key();
|
|
@@ -651,8 +653,7 @@ class Repairer {
|
|
|
651
653
|
std::unique_ptr<FragmentedRangeTombstoneIterator> r_iter;
|
|
652
654
|
status = table_cache_->GetRangeTombstoneIterator(
|
|
653
655
|
ropts, cfd->internal_comparator(), t->meta,
|
|
654
|
-
cfd->GetLatestMutableCFOptions()
|
|
655
|
-
&r_iter);
|
|
656
|
+
*cfd->GetLatestMutableCFOptions(), &r_iter);
|
|
656
657
|
|
|
657
658
|
if (r_iter) {
|
|
658
659
|
r_iter->SeekToFirst();
|
|
@@ -60,19 +60,6 @@ class RepairTest : public DBTestBase {
|
|
|
60
60
|
ASSERT_GT(verify_passed, 0);
|
|
61
61
|
SyncPoint::GetInstance()->DisableProcessing();
|
|
62
62
|
}
|
|
63
|
-
|
|
64
|
-
std::vector<FileMetaData*> GetLevelFileMetadatas(int level, int cf = 0) {
|
|
65
|
-
VersionSet* const versions = dbfull()->GetVersionSet();
|
|
66
|
-
assert(versions);
|
|
67
|
-
ColumnFamilyData* const cfd =
|
|
68
|
-
versions->GetColumnFamilySet()->GetColumnFamily(cf);
|
|
69
|
-
assert(cfd);
|
|
70
|
-
Version* const current = cfd->current();
|
|
71
|
-
assert(current);
|
|
72
|
-
VersionStorageInfo* const storage_info = current->storage_info();
|
|
73
|
-
assert(storage_info);
|
|
74
|
-
return storage_info->LevelFiles(level);
|
|
75
|
-
}
|
|
76
63
|
};
|
|
77
64
|
|
|
78
65
|
TEST_F(RepairTest, SortRepairedDBL0ByEpochNumber) {
|
|
@@ -55,4 +55,11 @@ class WritePreparedSnapshotChecker : public SnapshotChecker {
|
|
|
55
55
|
const WritePreparedTxnDB* const txn_db_;
|
|
56
56
|
};
|
|
57
57
|
|
|
58
|
+
bool DataIsDefinitelyInSnapshot(SequenceNumber seqno, SequenceNumber snapshot,
|
|
59
|
+
const SnapshotChecker* snapshot_checker);
|
|
60
|
+
|
|
61
|
+
bool DataIsDefinitelyNotInSnapshot(SequenceNumber seqno,
|
|
62
|
+
SequenceNumber snapshot,
|
|
63
|
+
const SnapshotChecker* snapshot_checker);
|
|
64
|
+
|
|
58
65
|
} // namespace ROCKSDB_NAMESPACE
|
|
@@ -91,10 +91,9 @@ Status TableCache::GetTableReader(
|
|
|
91
91
|
const ReadOptions& ro, const FileOptions& file_options,
|
|
92
92
|
const InternalKeyComparator& internal_comparator,
|
|
93
93
|
const FileMetaData& file_meta, bool sequential_mode,
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
bool skip_filters, int level, bool prefetch_index_and_filter_in_cache,
|
|
94
|
+
HistogramImpl* file_read_hist, std::unique_ptr<TableReader>* table_reader,
|
|
95
|
+
const MutableCFOptions& mutable_cf_options, bool skip_filters, int level,
|
|
96
|
+
bool prefetch_index_and_filter_in_cache,
|
|
98
97
|
size_t max_file_size_for_l0_meta_pin, Temperature file_temperature) {
|
|
99
98
|
std::string fname = TableFileName(
|
|
100
99
|
ioptions_.cf_paths, file_meta.fd.GetNumber(), file_meta.fd.GetPathId());
|
|
@@ -146,13 +145,14 @@ Status TableCache::GetTableReader(
|
|
|
146
145
|
} else {
|
|
147
146
|
expected_unique_id = kNullUniqueId64x2; // null ID == no verification
|
|
148
147
|
}
|
|
149
|
-
s =
|
|
148
|
+
s = mutable_cf_options.table_factory->NewTableReader(
|
|
150
149
|
ro,
|
|
151
150
|
TableReaderOptions(
|
|
152
|
-
ioptions_, prefix_extractor, file_options,
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
151
|
+
ioptions_, mutable_cf_options.prefix_extractor, file_options,
|
|
152
|
+
internal_comparator,
|
|
153
|
+
mutable_cf_options.block_protection_bytes_per_key, skip_filters,
|
|
154
|
+
immortal_tables_, false /* force_direct_prefetch */, level,
|
|
155
|
+
block_cache_tracer_, max_file_size_for_l0_meta_pin, db_session_id_,
|
|
156
156
|
file_meta.fd.GetNumber(), expected_unique_id,
|
|
157
157
|
file_meta.fd.largest_seqno, file_meta.tail_size,
|
|
158
158
|
file_meta.user_defined_timestamps_persisted),
|
|
@@ -173,10 +173,9 @@ Status TableCache::FindTable(
|
|
|
173
173
|
const ReadOptions& ro, const FileOptions& file_options,
|
|
174
174
|
const InternalKeyComparator& internal_comparator,
|
|
175
175
|
const FileMetaData& file_meta, TypedHandle** handle,
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
int level, bool prefetch_index_and_filter_in_cache,
|
|
176
|
+
const MutableCFOptions& mutable_cf_options, const bool no_io,
|
|
177
|
+
HistogramImpl* file_read_hist, bool skip_filters, int level,
|
|
178
|
+
bool prefetch_index_and_filter_in_cache,
|
|
180
179
|
size_t max_file_size_for_l0_meta_pin, Temperature file_temperature) {
|
|
181
180
|
PERF_TIMER_GUARD_WITH_CLOCK(find_table_nanos, ioptions_.clock);
|
|
182
181
|
uint64_t number = file_meta.fd.GetNumber();
|
|
@@ -199,9 +198,8 @@ Status TableCache::FindTable(
|
|
|
199
198
|
|
|
200
199
|
std::unique_ptr<TableReader> table_reader;
|
|
201
200
|
Status s = GetTableReader(ro, file_options, internal_comparator, file_meta,
|
|
202
|
-
false /* sequential mode */,
|
|
203
|
-
|
|
204
|
-
&table_reader, prefix_extractor, skip_filters,
|
|
201
|
+
false /* sequential mode */, file_read_hist,
|
|
202
|
+
&table_reader, mutable_cf_options, skip_filters,
|
|
205
203
|
level, prefetch_index_and_filter_in_cache,
|
|
206
204
|
max_file_size_for_l0_meta_pin, file_temperature);
|
|
207
205
|
if (!s.ok()) {
|
|
@@ -225,13 +223,12 @@ InternalIterator* TableCache::NewIterator(
|
|
|
225
223
|
const ReadOptions& options, const FileOptions& file_options,
|
|
226
224
|
const InternalKeyComparator& icomparator, const FileMetaData& file_meta,
|
|
227
225
|
RangeDelAggregator* range_del_agg,
|
|
228
|
-
const
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
size_t max_file_size_for_l0_meta_pin,
|
|
226
|
+
const MutableCFOptions& mutable_cf_options, TableReader** table_reader_ptr,
|
|
227
|
+
HistogramImpl* file_read_hist, TableReaderCaller caller, Arena* arena,
|
|
228
|
+
bool skip_filters, int level, size_t max_file_size_for_l0_meta_pin,
|
|
232
229
|
const InternalKey* smallest_compaction_key,
|
|
233
230
|
const InternalKey* largest_compaction_key, bool allow_unprepared_value,
|
|
234
|
-
|
|
231
|
+
const SequenceNumber* read_seqno,
|
|
235
232
|
std::unique_ptr<TruncatedRangeDelIterator>* range_del_iter) {
|
|
236
233
|
PERF_TIMER_GUARD(new_table_iterator_nanos);
|
|
237
234
|
|
|
@@ -246,7 +243,7 @@ InternalIterator* TableCache::NewIterator(
|
|
|
246
243
|
table_reader = fd.table_reader;
|
|
247
244
|
if (table_reader == nullptr) {
|
|
248
245
|
s = FindTable(options, file_options, icomparator, file_meta, &handle,
|
|
249
|
-
|
|
246
|
+
mutable_cf_options,
|
|
250
247
|
options.read_tier == kBlockCacheTier /* no_io */,
|
|
251
248
|
file_read_hist, skip_filters, level,
|
|
252
249
|
true /* prefetch_index_and_filter_in_cache */,
|
|
@@ -262,8 +259,9 @@ InternalIterator* TableCache::NewIterator(
|
|
|
262
259
|
result = NewEmptyInternalIterator<Slice>(arena);
|
|
263
260
|
} else {
|
|
264
261
|
result = table_reader->NewIterator(
|
|
265
|
-
options, prefix_extractor.get(), arena,
|
|
266
|
-
file_options.compaction_readahead_size,
|
|
262
|
+
options, mutable_cf_options.prefix_extractor.get(), arena,
|
|
263
|
+
skip_filters, caller, file_options.compaction_readahead_size,
|
|
264
|
+
allow_unprepared_value);
|
|
267
265
|
}
|
|
268
266
|
if (handle != nullptr) {
|
|
269
267
|
cache_.RegisterReleaseAsCleanup(handle, *result);
|
|
@@ -330,7 +328,7 @@ InternalIterator* TableCache::NewIterator(
|
|
|
330
328
|
Status TableCache::GetRangeTombstoneIterator(
|
|
331
329
|
const ReadOptions& options,
|
|
332
330
|
const InternalKeyComparator& internal_comparator,
|
|
333
|
-
const FileMetaData& file_meta,
|
|
331
|
+
const FileMetaData& file_meta, const MutableCFOptions& mutable_cf_options,
|
|
334
332
|
std::unique_ptr<FragmentedRangeTombstoneIterator>* out_iter) {
|
|
335
333
|
assert(out_iter);
|
|
336
334
|
const FileDescriptor& fd = file_meta.fd;
|
|
@@ -339,7 +337,7 @@ Status TableCache::GetRangeTombstoneIterator(
|
|
|
339
337
|
TypedHandle* handle = nullptr;
|
|
340
338
|
if (t == nullptr) {
|
|
341
339
|
s = FindTable(options, file_options_, internal_comparator, file_meta,
|
|
342
|
-
&handle,
|
|
340
|
+
&handle, mutable_cf_options);
|
|
343
341
|
if (s.ok()) {
|
|
344
342
|
t = cache_.Value(handle);
|
|
345
343
|
}
|
|
@@ -431,14 +429,13 @@ bool TableCache::GetFromRowCache(const Slice& user_key, IterKey& row_cache_key,
|
|
|
431
429
|
return found;
|
|
432
430
|
}
|
|
433
431
|
|
|
434
|
-
Status TableCache::Get(
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
size_t max_file_size_for_l0_meta_pin) {
|
|
432
|
+
Status TableCache::Get(const ReadOptions& options,
|
|
433
|
+
const InternalKeyComparator& internal_comparator,
|
|
434
|
+
const FileMetaData& file_meta, const Slice& k,
|
|
435
|
+
GetContext* get_context,
|
|
436
|
+
const MutableCFOptions& mutable_cf_options,
|
|
437
|
+
HistogramImpl* file_read_hist, bool skip_filters,
|
|
438
|
+
int level, size_t max_file_size_for_l0_meta_pin) {
|
|
442
439
|
auto& fd = file_meta.fd;
|
|
443
440
|
std::string* row_cache_entry = nullptr;
|
|
444
441
|
bool done = false;
|
|
@@ -463,7 +460,7 @@ Status TableCache::Get(
|
|
|
463
460
|
if (s.ok() && !done) {
|
|
464
461
|
if (t == nullptr) {
|
|
465
462
|
s = FindTable(options, file_options_, internal_comparator, file_meta,
|
|
466
|
-
&handle,
|
|
463
|
+
&handle, mutable_cf_options,
|
|
467
464
|
options.read_tier == kBlockCacheTier /* no_io */,
|
|
468
465
|
file_read_hist, skip_filters, level,
|
|
469
466
|
true /* prefetch_index_and_filter_in_cache */,
|
|
@@ -492,7 +489,8 @@ Status TableCache::Get(
|
|
|
492
489
|
}
|
|
493
490
|
if (s.ok()) {
|
|
494
491
|
get_context->SetReplayLog(row_cache_entry); // nullptr if no cache.
|
|
495
|
-
s = t->Get(options, k, get_context,
|
|
492
|
+
s = t->Get(options, k, get_context,
|
|
493
|
+
mutable_cf_options.prefix_extractor.get(), skip_filters);
|
|
496
494
|
get_context->SetReplayLog(nullptr);
|
|
497
495
|
} else if (options.read_tier == kBlockCacheTier && s.IsIncomplete()) {
|
|
498
496
|
// Couldn't find table in cache and couldn't open it because of no_io.
|
|
@@ -545,11 +543,9 @@ void TableCache::UpdateRangeTombstoneSeqnums(
|
|
|
545
543
|
Status TableCache::MultiGetFilter(
|
|
546
544
|
const ReadOptions& options,
|
|
547
545
|
const InternalKeyComparator& internal_comparator,
|
|
548
|
-
const FileMetaData& file_meta,
|
|
549
|
-
const std::shared_ptr<const SliceTransform>& prefix_extractor,
|
|
546
|
+
const FileMetaData& file_meta, const MutableCFOptions& mutable_cf_options,
|
|
550
547
|
HistogramImpl* file_read_hist, int level,
|
|
551
|
-
MultiGetContext::Range* mget_range, TypedHandle** table_handle
|
|
552
|
-
uint8_t block_protection_bytes_per_key) {
|
|
548
|
+
MultiGetContext::Range* mget_range, TypedHandle** table_handle) {
|
|
553
549
|
auto& fd = file_meta.fd;
|
|
554
550
|
IterKey row_cache_key;
|
|
555
551
|
std::string row_cache_entry_buffer;
|
|
@@ -568,7 +564,7 @@ Status TableCache::MultiGetFilter(
|
|
|
568
564
|
mget_range->end());
|
|
569
565
|
if (t == nullptr) {
|
|
570
566
|
s = FindTable(options, file_options_, internal_comparator, file_meta,
|
|
571
|
-
&handle,
|
|
567
|
+
&handle, mutable_cf_options,
|
|
572
568
|
options.read_tier == kBlockCacheTier /* no_io */,
|
|
573
569
|
file_read_hist,
|
|
574
570
|
/*skip_filters=*/false, level,
|
|
@@ -580,7 +576,8 @@ Status TableCache::MultiGetFilter(
|
|
|
580
576
|
*table_handle = handle;
|
|
581
577
|
}
|
|
582
578
|
if (s.ok()) {
|
|
583
|
-
s = t->MultiGetFilter(options, prefix_extractor.get(),
|
|
579
|
+
s = t->MultiGetFilter(options, mutable_cf_options.prefix_extractor.get(),
|
|
580
|
+
mget_range);
|
|
584
581
|
}
|
|
585
582
|
if (s.ok() && !options.ignore_range_deletions) {
|
|
586
583
|
// Update the range tombstone sequence numbers for the keys here
|
|
@@ -601,8 +598,7 @@ Status TableCache::GetTableProperties(
|
|
|
601
598
|
const InternalKeyComparator& internal_comparator,
|
|
602
599
|
const FileMetaData& file_meta,
|
|
603
600
|
std::shared_ptr<const TableProperties>* properties,
|
|
604
|
-
|
|
605
|
-
const std::shared_ptr<const SliceTransform>& prefix_extractor, bool no_io) {
|
|
601
|
+
const MutableCFOptions& mutable_cf_options, bool no_io) {
|
|
606
602
|
auto table_reader = file_meta.fd.table_reader;
|
|
607
603
|
// table already been pre-loaded?
|
|
608
604
|
if (table_reader) {
|
|
@@ -613,8 +609,7 @@ Status TableCache::GetTableProperties(
|
|
|
613
609
|
|
|
614
610
|
TypedHandle* table_handle = nullptr;
|
|
615
611
|
Status s = FindTable(read_options, file_options, internal_comparator,
|
|
616
|
-
file_meta, &table_handle,
|
|
617
|
-
prefix_extractor, no_io);
|
|
612
|
+
file_meta, &table_handle, mutable_cf_options, no_io);
|
|
618
613
|
if (!s.ok()) {
|
|
619
614
|
return s;
|
|
620
615
|
}
|
|
@@ -627,14 +622,15 @@ Status TableCache::GetTableProperties(
|
|
|
627
622
|
|
|
628
623
|
Status TableCache::ApproximateKeyAnchors(
|
|
629
624
|
const ReadOptions& ro, const InternalKeyComparator& internal_comparator,
|
|
630
|
-
const FileMetaData& file_meta,
|
|
625
|
+
const FileMetaData& file_meta, const MutableCFOptions& mutable_cf_options,
|
|
626
|
+
|
|
631
627
|
std::vector<TableReader::Anchor>& anchors) {
|
|
632
628
|
Status s;
|
|
633
629
|
TableReader* t = file_meta.fd.table_reader;
|
|
634
630
|
TypedHandle* handle = nullptr;
|
|
635
631
|
if (t == nullptr) {
|
|
636
632
|
s = FindTable(ro, file_options_, internal_comparator, file_meta, &handle,
|
|
637
|
-
|
|
633
|
+
mutable_cf_options);
|
|
638
634
|
if (s.ok()) {
|
|
639
635
|
t = cache_.Value(handle);
|
|
640
636
|
}
|
|
@@ -651,8 +647,7 @@ Status TableCache::ApproximateKeyAnchors(
|
|
|
651
647
|
size_t TableCache::GetMemoryUsageByTableReader(
|
|
652
648
|
const FileOptions& file_options, const ReadOptions& read_options,
|
|
653
649
|
const InternalKeyComparator& internal_comparator,
|
|
654
|
-
const FileMetaData& file_meta,
|
|
655
|
-
const std::shared_ptr<const SliceTransform>& prefix_extractor) {
|
|
650
|
+
const FileMetaData& file_meta, const MutableCFOptions& mutable_cf_options) {
|
|
656
651
|
auto table_reader = file_meta.fd.table_reader;
|
|
657
652
|
// table already been pre-loaded?
|
|
658
653
|
if (table_reader) {
|
|
@@ -660,9 +655,9 @@ size_t TableCache::GetMemoryUsageByTableReader(
|
|
|
660
655
|
}
|
|
661
656
|
|
|
662
657
|
TypedHandle* table_handle = nullptr;
|
|
663
|
-
Status s =
|
|
664
|
-
|
|
665
|
-
|
|
658
|
+
Status s =
|
|
659
|
+
FindTable(read_options, file_options, internal_comparator, file_meta,
|
|
660
|
+
&table_handle, mutable_cf_options, true /* no_io */);
|
|
666
661
|
if (!s.ok()) {
|
|
667
662
|
return 0;
|
|
668
663
|
}
|
|
@@ -681,16 +676,14 @@ uint64_t TableCache::ApproximateOffsetOf(
|
|
|
681
676
|
const ReadOptions& read_options, const Slice& key,
|
|
682
677
|
const FileMetaData& file_meta, TableReaderCaller caller,
|
|
683
678
|
const InternalKeyComparator& internal_comparator,
|
|
684
|
-
|
|
685
|
-
const std::shared_ptr<const SliceTransform>& prefix_extractor) {
|
|
679
|
+
const MutableCFOptions& mutable_cf_options) {
|
|
686
680
|
uint64_t result = 0;
|
|
687
681
|
TableReader* table_reader = file_meta.fd.table_reader;
|
|
688
682
|
TypedHandle* table_handle = nullptr;
|
|
689
683
|
if (table_reader == nullptr) {
|
|
690
684
|
Status s =
|
|
691
685
|
FindTable(read_options, file_options_, internal_comparator, file_meta,
|
|
692
|
-
&table_handle,
|
|
693
|
-
prefix_extractor, false /* no_io */);
|
|
686
|
+
&table_handle, mutable_cf_options, false /* no_io */);
|
|
694
687
|
if (s.ok()) {
|
|
695
688
|
table_reader = cache_.Value(table_handle);
|
|
696
689
|
}
|
|
@@ -710,16 +703,14 @@ uint64_t TableCache::ApproximateSize(
|
|
|
710
703
|
const ReadOptions& read_options, const Slice& start, const Slice& end,
|
|
711
704
|
const FileMetaData& file_meta, TableReaderCaller caller,
|
|
712
705
|
const InternalKeyComparator& internal_comparator,
|
|
713
|
-
|
|
714
|
-
const std::shared_ptr<const SliceTransform>& prefix_extractor) {
|
|
706
|
+
const MutableCFOptions& mutable_cf_options) {
|
|
715
707
|
uint64_t result = 0;
|
|
716
708
|
TableReader* table_reader = file_meta.fd.table_reader;
|
|
717
709
|
TypedHandle* table_handle = nullptr;
|
|
718
710
|
if (table_reader == nullptr) {
|
|
719
711
|
Status s =
|
|
720
712
|
FindTable(read_options, file_options_, internal_comparator, file_meta,
|
|
721
|
-
&table_handle,
|
|
722
|
-
prefix_extractor, false /* no_io */);
|
|
713
|
+
&table_handle, mutable_cf_options, false /* no_io */);
|
|
723
714
|
if (s.ok()) {
|
|
724
715
|
table_reader = cache_.Value(table_handle);
|
|
725
716
|
}
|
|
@@ -735,13 +726,19 @@ uint64_t TableCache::ApproximateSize(
|
|
|
735
726
|
return result;
|
|
736
727
|
}
|
|
737
728
|
|
|
738
|
-
void TableCache::ReleaseObsolete(Cache* cache,
|
|
729
|
+
void TableCache::ReleaseObsolete(Cache* cache, uint64_t file_number,
|
|
730
|
+
Cache::Handle* h,
|
|
739
731
|
uint32_t uncache_aggressiveness) {
|
|
740
732
|
CacheInterface typed_cache(cache);
|
|
741
733
|
TypedHandle* table_handle = reinterpret_cast<TypedHandle*>(h);
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
734
|
+
if (table_handle == nullptr) {
|
|
735
|
+
table_handle = typed_cache.Lookup(GetSliceForFileNumber(&file_number));
|
|
736
|
+
}
|
|
737
|
+
if (table_handle != nullptr) {
|
|
738
|
+
TableReader* table_reader = typed_cache.Value(table_handle);
|
|
739
|
+
table_reader->MarkObsolete(uncache_aggressiveness);
|
|
740
|
+
typed_cache.ReleaseAndEraseIfLastRef(table_handle);
|
|
741
|
+
}
|
|
745
742
|
}
|
|
746
743
|
|
|
747
744
|
} // namespace ROCKSDB_NAMESPACE
|