From 8d050b679a7073d37d85d9d8368705253f263c2b Mon Sep 17 00:00:00 2001 From: Avi Kivity Date: Tue, 4 Aug 2015 17:11:39 +0300 Subject: [PATCH] db: improve make_local_reader() Instead of merging shard data using make_combined_reader(), take advantage of the fact that shard data is disjoint, and use make_joining_reader(). This removes the need to sort the partitions as they are being read. --- service/storage_proxy.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/service/storage_proxy.cc b/service/storage_proxy.cc index 0f465410b7..36b94fb0dd 100644 --- a/service/storage_proxy.cc +++ b/service/storage_proxy.cc @@ -3167,13 +3167,15 @@ public: mutation_reader storage_proxy::make_local_reader(utils::UUID cf_id, const query::partition_range& range) { + unsigned first_shard = range.start() ? dht::shard_of(range.start()->value().token()) : 0; + unsigned last_shard = range.end() ? dht::shard_of(range.end()->value().token()) : smp::count - 1; std::vector readers; - for (unsigned cpu : smp::all_cpus()) { + for (auto cpu = first_shard; cpu <= last_shard; ++cpu) { readers.emplace_back([reader = make_lw_shared(cf_id, _db, cpu, range)] () mutable { return (*reader)(); }); } - return make_combined_reader(std::move(readers)); + return make_joining_reader(std::move(readers)); } }