diff --git a/mutation_reader.cc b/mutation_reader.cc index d816470719..8eb89110bf 100644 --- a/mutation_reader.cc +++ b/mutation_reader.cc @@ -977,6 +977,9 @@ future<> foreign_reader::fast_forward_to(position_range pr, db::timeout_clock::t flat_mutation_reader make_foreign_reader(schema_ptr schema, foreign_ptr> reader, streamed_mutation::forwarding fwd_sm) { + if (reader.get_owner_shard() == engine().cpu_id()) { + return std::move(*reader); + } return make_flat_mutation_reader(std::move(schema), std::move(reader), fwd_sm); } diff --git a/mutation_reader.hh b/mutation_reader.hh index e2556a6258..0a0d0477ce 100644 --- a/mutation_reader.hh +++ b/mutation_reader.hh @@ -381,6 +381,9 @@ stable_flattened_mutations_consumer make_stable_flattened_mut /// fast_forward_to() a read-ahead (a fill_buffer() on the remote reader) is /// issued. This read-ahead runs in the background and is brough back to /// foreground on the next fill_buffer() or fast_forward_to() call. +/// If the reader resides on this shard (the shard where make_foreign_reader() +/// is called) there is no need to wrap it in foreign_reader, just return it as +/// is. flat_mutation_reader make_foreign_reader(schema_ptr schema, foreign_ptr> reader, streamed_mutation::forwarding fwd_sm = streamed_mutation::forwarding::no);