From c896309383888ea1e99ffc9dc505d44cbee2ef1b Mon Sep 17 00:00:00 2001 From: Duarte Nunes Date: Mon, 13 Jun 2016 09:46:52 +0200 Subject: [PATCH] database: Actually decrease query_state limit query_state expects the current row limit to be updated so it can be enforced across partition ranges. A regression introduced in e4e8acc94629d3cc82b8ef884c5adfc949f04951 prevented that from happening by passing a copy of the limit to querying_reader. This patch fixes the issue by having column_family::query update the limit as it processes partitions from the querying_reader. Fixes #1338 Signed-off-by: Duarte Nunes Message-Id: <1465804012-30535-1-git-send-email-duarte@scylladb.com> --- database.cc | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/database.cc b/database.cc index 5da96bbf63..1c7bea4a74 100644 --- a/database.cc +++ b/database.cc @@ -1890,6 +1890,7 @@ column_family::query(schema_ptr s, const query::read_command& cmd, query::result auto add_partition = [&qs] (uint32_t live_rows, mutation&& m) { auto pb = qs.builder.add_partition(*qs.schema, m.key()); m.partition().query_compacted(pb, *qs.schema, live_rows); + qs.limit -= live_rows; }; return do_with(querying_reader(qs.schema, as_mutation_source(), range, qs.cmd.slice, qs.limit, qs.cmd.timestamp, add_partition), [] (auto&& rd) { return rd.read(); }); @@ -1897,10 +1898,10 @@ column_family::query(schema_ptr s, const query::read_command& cmd, query::result return make_ready_future>( make_lw_shared(qs.builder.build())); }).finally([lc, this]() mutable { - _stats.reads.mark(lc); - if (lc.is_start()) { - _stats.estimated_read.add(lc.latency(), _stats.reads.hist.count); - } + _stats.reads.mark(lc); + if (lc.is_start()) { + _stats.estimated_read.add(lc.latency(), _stats.reads.hist.count); + } }); } }