diff --git a/cql3/statements/select_statement.cc b/cql3/statements/select_statement.cc index b83309f83b..38d2e82a2b 100644 --- a/cql3/statements/select_statement.cc +++ b/cql3/statements/select_statement.cc @@ -574,7 +574,9 @@ indexed_table_select_statement::do_execute_base_query( command->slice.set_range(*_schema, base_pk, row_ranges); } } - concurrency *= 2; + if (concurrency < max_base_table_query_concurrency) { + concurrency *= 2; + } return proxy.query(_schema, command, std::move(prange), options.get_consistency(), {timeout, state.get_permit(), state.get_client_state(), state.get_trace_state()}) .then([&ranges_to_vnodes, &merger] (service::storage_proxy::coordinator_query_result qr) { auto is_short_read = qr.query_result->is_short_read(); @@ -638,7 +640,7 @@ indexed_table_select_statement::do_execute_base_query( // we continue exponentially, asking for 2x more key than before auto already_done = std::distance(keys.begin(), key_it); auto next_iteration = already_done + 1; - next_iteration = std::min(next_iteration, keys.size() - already_done); + next_iteration = std::min({next_iteration, keys.size() - already_done, max_base_table_query_concurrency}); auto key_it_end = key_it + next_iteration; auto command = ::make_lw_shared(*cmd); diff --git a/cql3/statements/select_statement.hh b/cql3/statements/select_statement.hh index d254fb6cf3..87279ced18 100644 --- a/cql3/statements/select_statement.hh +++ b/cql3/statements/select_statement.hh @@ -188,6 +188,8 @@ class indexed_table_select_statement : public select_statement { noncopyable_function _get_partition_ranges_for_posting_list; noncopyable_function _get_partition_slice_for_posting_list; public: + static constexpr size_t max_base_table_query_concurrency = 4096; + static ::shared_ptr prepare(database& db, schema_ptr schema, uint32_t bound_terms,