replica: Prefer memtable::make_flat_reader_opt() to memtable::make_flat_reader()
The former is significantly cheaper when there is nothing to be read.
This commit is contained in:
@@ -759,12 +759,15 @@ memtable::update(db::rp_handle&& h) {
|
||||
|
||||
future<>
|
||||
memtable::apply(memtable& mt, reader_permit permit) {
|
||||
return with_closeable(mt.make_flat_reader(_schema, std::move(permit)), [this] (auto&& rd) mutable {
|
||||
return consume_partitions(rd, [self = this->shared_from_this(), &rd] (mutation&& m) {
|
||||
self->apply(m);
|
||||
return stop_iteration::no;
|
||||
if (auto reader_opt = mt.make_flat_reader_opt(_schema, std::move(permit), query::full_partition_range, _schema->full_slice())) {
|
||||
return with_closeable(std::move(*reader_opt), [this] (auto&& rd) mutable {
|
||||
return consume_partitions(rd, [self = this->shared_from_this(), &rd] (mutation&& m) {
|
||||
self->apply(m);
|
||||
return stop_iteration::no;
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
[[unlikely]] return make_ready_future<>();
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -178,7 +178,9 @@ table::make_reader_v2(schema_ptr s,
|
||||
// https://github.com/scylladb/scylla/issues/185
|
||||
|
||||
for (auto&& mt : *_memtables) {
|
||||
readers.emplace_back(mt->make_flat_reader(s, permit, range, slice, pc, trace_state, fwd, fwd_mr));
|
||||
if (auto reader_opt = mt->make_flat_reader_opt(s, permit, range, slice, pc, trace_state, fwd, fwd_mr)) {
|
||||
readers.emplace_back(std::move(*reader_opt));
|
||||
}
|
||||
}
|
||||
|
||||
const auto bypass_cache = slice.options.contains(query::partition_slice::option::bypass_cache);
|
||||
@@ -238,7 +240,9 @@ table::make_streaming_reader(schema_ptr s, reader_permit permit,
|
||||
std::vector<flat_mutation_reader_v2> readers;
|
||||
readers.reserve(_memtables->size() + 1);
|
||||
for (auto&& mt : *_memtables) {
|
||||
readers.emplace_back(mt->make_flat_reader(s, permit, range, slice, pc, trace_state, fwd, fwd_mr));
|
||||
if (auto reader_opt = mt->make_flat_reader_opt(s, permit, range, slice, pc, trace_state, fwd, fwd_mr)) {
|
||||
readers.emplace_back(std::move(*reader_opt));
|
||||
}
|
||||
}
|
||||
readers.emplace_back(make_sstable_reader(s, permit, _sstables, range, slice, pc, std::move(trace_state), fwd, fwd_mr));
|
||||
return make_combined_reader(s, std::move(permit), std::move(readers), fwd, fwd_mr);
|
||||
@@ -256,7 +260,9 @@ flat_mutation_reader_v2 table::make_streaming_reader(schema_ptr schema, reader_p
|
||||
std::vector<flat_mutation_reader_v2> readers;
|
||||
readers.reserve(_memtables->size() + 1);
|
||||
for (auto&& mt : *_memtables) {
|
||||
readers.emplace_back(mt->make_flat_reader(schema, permit, range, slice, pc, trace_state, fwd, fwd_mr));
|
||||
if (auto reader_opt = mt->make_flat_reader_opt(schema, permit, range, slice, pc, trace_state, fwd, fwd_mr)) {
|
||||
readers.emplace_back(std::move(*reader_opt));
|
||||
}
|
||||
}
|
||||
readers.emplace_back(make_sstable_reader(schema, permit, _sstables, range, slice, pc, std::move(trace_state), fwd, fwd_mr));
|
||||
return make_combined_reader(std::move(schema), std::move(permit), std::move(readers), fwd, fwd_mr);
|
||||
@@ -2319,7 +2325,9 @@ table::make_reader_excluding_sstables(schema_ptr s,
|
||||
readers.reserve(_memtables->size() + 1);
|
||||
|
||||
for (auto&& mt : *_memtables) {
|
||||
readers.emplace_back(mt->make_flat_reader(s, permit, range, slice, pc, trace_state, fwd, fwd_mr));
|
||||
if (auto reader_opt = mt->make_flat_reader_opt(s, permit, range, slice, pc, trace_state, fwd, fwd_mr)) {
|
||||
readers.emplace_back(std::move(*reader_opt));
|
||||
}
|
||||
}
|
||||
|
||||
auto excluded_ssts = boost::copy_range<std::unordered_set<sstables::shared_sstable>>(excluded);
|
||||
|
||||
Reference in New Issue
Block a user