@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
|
@@ -21,27 +21,21 @@ struct MultiCfIteratorInfo {
|
|
|
21
21
|
int order;
|
|
22
22
|
};
|
|
23
23
|
|
|
24
|
+
template <typename ResetFunc, typename PopulateFunc>
|
|
24
25
|
class MultiCfIteratorImpl {
|
|
25
26
|
public:
|
|
26
27
|
MultiCfIteratorImpl(
|
|
27
|
-
const Comparator* comparator,
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
MultiCfHeapItemComparator<std::greater<int>>(comparator_))),
|
|
28
|
+
const ReadOptions& read_options, const Comparator* comparator,
|
|
29
|
+
std::vector<std::pair<ColumnFamilyHandle*, std::unique_ptr<Iterator>>>&&
|
|
30
|
+
cfh_iter_pairs,
|
|
31
|
+
ResetFunc reset_func, PopulateFunc populate_func)
|
|
32
|
+
: allow_unprepared_value_(read_options.allow_unprepared_value),
|
|
33
|
+
comparator_(comparator),
|
|
34
|
+
cfh_iter_pairs_(std::move(cfh_iter_pairs)),
|
|
35
35
|
reset_func_(std::move(reset_func)),
|
|
36
|
-
populate_func_(std::move(populate_func))
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
cfh_iter_pairs_.reserve(column_families.size());
|
|
40
|
-
for (size_t i = 0; i < column_families.size(); ++i) {
|
|
41
|
-
cfh_iter_pairs_.emplace_back(
|
|
42
|
-
column_families[i], std::unique_ptr<Iterator>(child_iterators[i]));
|
|
43
|
-
}
|
|
44
|
-
}
|
|
36
|
+
populate_func_(std::move(populate_func)),
|
|
37
|
+
heap_(MultiCfMinHeap(
|
|
38
|
+
MultiCfHeapItemComparator<std::greater<int>>(comparator_))) {}
|
|
45
39
|
~MultiCfIteratorImpl() { status_.PermitUncheckedError(); }
|
|
46
40
|
|
|
47
41
|
// No copy allowed
|
|
@@ -101,10 +95,28 @@ class MultiCfIteratorImpl {
|
|
|
101
95
|
AdvanceIterator(max_heap, [](Iterator* iter) { iter->Prev(); });
|
|
102
96
|
}
|
|
103
97
|
|
|
98
|
+
bool PrepareValue() {
|
|
99
|
+
assert(Valid());
|
|
100
|
+
|
|
101
|
+
if (!allow_unprepared_value_) {
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (std::holds_alternative<MultiCfMaxHeap>(heap_)) {
|
|
106
|
+
return PopulateIterator(std::get<MultiCfMaxHeap>(heap_));
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return PopulateIterator(std::get<MultiCfMinHeap>(heap_));
|
|
110
|
+
}
|
|
111
|
+
|
|
104
112
|
private:
|
|
113
|
+
Status status_;
|
|
114
|
+
bool allow_unprepared_value_;
|
|
115
|
+
const Comparator* comparator_;
|
|
105
116
|
std::vector<std::pair<ColumnFamilyHandle*, std::unique_ptr<Iterator>>>
|
|
106
117
|
cfh_iter_pairs_;
|
|
107
|
-
|
|
118
|
+
ResetFunc reset_func_;
|
|
119
|
+
PopulateFunc populate_func_;
|
|
108
120
|
|
|
109
121
|
template <typename CompareOp>
|
|
110
122
|
class MultiCfHeapItemComparator {
|
|
@@ -125,7 +137,7 @@ class MultiCfIteratorImpl {
|
|
|
125
137
|
private:
|
|
126
138
|
const Comparator* comparator_;
|
|
127
139
|
};
|
|
128
|
-
|
|
140
|
+
|
|
129
141
|
using MultiCfMinHeap =
|
|
130
142
|
BinaryHeap<MultiCfIteratorInfo,
|
|
131
143
|
MultiCfHeapItemComparator<std::greater<int>>>;
|
|
@@ -136,9 +148,6 @@ class MultiCfIteratorImpl {
|
|
|
136
148
|
|
|
137
149
|
MultiCfIterHeap heap_;
|
|
138
150
|
|
|
139
|
-
std::function<void()> reset_func_;
|
|
140
|
-
std::function<void(autovector<MultiCfIteratorInfo>)> populate_func_;
|
|
141
|
-
|
|
142
151
|
Iterator* current() const {
|
|
143
152
|
if (std::holds_alternative<MultiCfMaxHeap>(heap_)) {
|
|
144
153
|
auto& max_heap = std::get<MultiCfMaxHeap>(heap_);
|
|
@@ -163,11 +172,11 @@ class MultiCfIteratorImpl {
|
|
|
163
172
|
}
|
|
164
173
|
|
|
165
174
|
void InitMinHeap() {
|
|
166
|
-
heap_.emplace<MultiCfMinHeap>(
|
|
175
|
+
heap_.template emplace<MultiCfMinHeap>(
|
|
167
176
|
MultiCfHeapItemComparator<std::greater<int>>(comparator_));
|
|
168
177
|
}
|
|
169
178
|
void InitMaxHeap() {
|
|
170
|
-
heap_.emplace<MultiCfMaxHeap>(
|
|
179
|
+
heap_.template emplace<MultiCfMaxHeap>(
|
|
171
180
|
MultiCfHeapItemComparator<std::less<int>>(comparator_));
|
|
172
181
|
}
|
|
173
182
|
|
|
@@ -186,13 +195,14 @@ class MultiCfIteratorImpl {
|
|
|
186
195
|
if (!status_.ok()) {
|
|
187
196
|
// Non-OK status from the iterator. Bail out early
|
|
188
197
|
heap.clear();
|
|
189
|
-
|
|
198
|
+
return;
|
|
190
199
|
}
|
|
191
200
|
}
|
|
192
201
|
++i;
|
|
193
202
|
}
|
|
194
|
-
if (!heap.empty()) {
|
|
195
|
-
PopulateIterator(heap);
|
|
203
|
+
if (!allow_unprepared_value_ && !heap.empty()) {
|
|
204
|
+
[[maybe_unused]] const bool result = PopulateIterator(heap);
|
|
205
|
+
assert(result || (!Valid() && !status_.ok()));
|
|
196
206
|
}
|
|
197
207
|
}
|
|
198
208
|
|
|
@@ -212,32 +222,41 @@ class MultiCfIteratorImpl {
|
|
|
212
222
|
// 2. Make sure all others have iterated past the top iterator key slice
|
|
213
223
|
// 3. Advance the top iterator, and add it back to the heap if valid
|
|
214
224
|
auto top = heap.top();
|
|
225
|
+
assert(top.iterator);
|
|
226
|
+
assert(top.iterator->Valid());
|
|
227
|
+
assert(top.iterator->status().ok());
|
|
228
|
+
|
|
215
229
|
heap.pop();
|
|
216
|
-
|
|
230
|
+
|
|
231
|
+
while (!heap.empty()) {
|
|
217
232
|
auto current = heap.top();
|
|
218
233
|
assert(current.iterator);
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
234
|
+
assert(current.iterator->Valid());
|
|
235
|
+
assert(current.iterator->status().ok());
|
|
236
|
+
|
|
237
|
+
if (comparator_->Compare(current.iterator->key(), top.iterator->key()) !=
|
|
238
|
+
0) {
|
|
239
|
+
break;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
advance_func(current.iterator);
|
|
243
|
+
|
|
244
|
+
if (current.iterator->Valid()) {
|
|
222
245
|
assert(current.iterator->status().ok());
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
246
|
+
heap.replace_top(current);
|
|
247
|
+
} else {
|
|
248
|
+
considerStatus(current.iterator->status());
|
|
249
|
+
if (!status_.ok()) {
|
|
250
|
+
heap.clear();
|
|
251
|
+
return;
|
|
226
252
|
} else {
|
|
227
|
-
|
|
228
|
-
if (!status_.ok()) {
|
|
229
|
-
heap.clear();
|
|
230
|
-
return;
|
|
231
|
-
} else {
|
|
232
|
-
heap.pop();
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
if (!heap.empty()) {
|
|
236
|
-
current = heap.top();
|
|
253
|
+
heap.pop();
|
|
237
254
|
}
|
|
238
255
|
}
|
|
239
256
|
}
|
|
257
|
+
|
|
240
258
|
advance_func(top.iterator);
|
|
259
|
+
|
|
241
260
|
if (top.iterator->Valid()) {
|
|
242
261
|
assert(top.iterator->status().ok());
|
|
243
262
|
heap.push(top);
|
|
@@ -249,13 +268,14 @@ class MultiCfIteratorImpl {
|
|
|
249
268
|
}
|
|
250
269
|
}
|
|
251
270
|
|
|
252
|
-
if (!heap.empty()) {
|
|
253
|
-
PopulateIterator(heap);
|
|
271
|
+
if (!allow_unprepared_value_ && !heap.empty()) {
|
|
272
|
+
[[maybe_unused]] const bool result = PopulateIterator(heap);
|
|
273
|
+
assert(result || (!Valid() && !status_.ok()));
|
|
254
274
|
}
|
|
255
275
|
}
|
|
256
276
|
|
|
257
277
|
template <typename BinaryHeap>
|
|
258
|
-
|
|
278
|
+
bool PopulateIterator(BinaryHeap& heap) {
|
|
259
279
|
// 1. Keep the top iterator (by popping it from the heap) and add it to list
|
|
260
280
|
// to populate
|
|
261
281
|
// 2. For all non-top iterators having the same key as top iter popped
|
|
@@ -265,31 +285,69 @@ class MultiCfIteratorImpl {
|
|
|
265
285
|
// populate the value/columns and attribute_groups from the list
|
|
266
286
|
// collected in step 1 and 2 and add all the iters back to the heap
|
|
267
287
|
assert(!heap.empty());
|
|
288
|
+
|
|
289
|
+
auto prepare_value = [this, &heap](Iterator* iterator) {
|
|
290
|
+
assert(iterator);
|
|
291
|
+
assert(iterator->Valid());
|
|
292
|
+
assert(iterator->status().ok());
|
|
293
|
+
|
|
294
|
+
if (!iterator->PrepareValue()) {
|
|
295
|
+
assert(!iterator->Valid());
|
|
296
|
+
assert(!iterator->status().ok());
|
|
297
|
+
|
|
298
|
+
considerStatus(iterator->status());
|
|
299
|
+
heap.clear();
|
|
300
|
+
|
|
301
|
+
assert(!Valid());
|
|
302
|
+
assert(!status_.ok());
|
|
303
|
+
|
|
304
|
+
return false;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
return true;
|
|
308
|
+
};
|
|
309
|
+
|
|
268
310
|
auto top = heap.top();
|
|
269
|
-
|
|
311
|
+
assert(top.iterator);
|
|
312
|
+
assert(top.iterator->Valid());
|
|
313
|
+
assert(top.iterator->status().ok());
|
|
314
|
+
|
|
315
|
+
if (!prepare_value(top.iterator)) {
|
|
316
|
+
return false;
|
|
317
|
+
}
|
|
318
|
+
|
|
270
319
|
autovector<MultiCfIteratorInfo> to_populate;
|
|
320
|
+
|
|
271
321
|
to_populate.push_back(top);
|
|
272
|
-
|
|
322
|
+
heap.pop();
|
|
323
|
+
|
|
324
|
+
while (!heap.empty()) {
|
|
273
325
|
auto current = heap.top();
|
|
274
326
|
assert(current.iterator);
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
}
|
|
327
|
+
assert(current.iterator->Valid());
|
|
328
|
+
assert(current.iterator->status().ok());
|
|
329
|
+
|
|
330
|
+
if (comparator_->Compare(current.iterator->key(), top.iterator->key()) !=
|
|
331
|
+
0) {
|
|
332
|
+
break;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
if (!prepare_value(current.iterator)) {
|
|
336
|
+
return false;
|
|
286
337
|
}
|
|
338
|
+
|
|
339
|
+
to_populate.push_back(current);
|
|
340
|
+
heap.pop();
|
|
287
341
|
}
|
|
342
|
+
|
|
288
343
|
// Add the items back to the heap
|
|
289
344
|
for (auto& item : to_populate) {
|
|
290
345
|
heap.push(item);
|
|
291
346
|
}
|
|
347
|
+
|
|
292
348
|
populate_func_(to_populate);
|
|
349
|
+
|
|
350
|
+
return true;
|
|
293
351
|
}
|
|
294
352
|
};
|
|
295
353
|
|