Files
scylladb/idl/mapreduce_request.idl.hh
Dawid Mędrek cd50152522 service/mapreduce_service: Cancel query when stopping
Before these changes, shutting down a node could be prolonged because of
mapreduce_service. `mapreduce_service::stop()` uninitializes messaging
service, which includes waiting for all ongoing RPC handlers. We already
had a mechanism for cancelling local mapreduce tasks, but we were missing
one for cancelling external queries.

In this commit, we modify the signature of the request so it supports
cancelling via an abort source. We also provide a reproducer test
for the problem.

Fixes scylladb/scylladb#22337

Closes scylladb/scylladb#22651
2025-02-10 20:12:59 +02:00

50 lines
1.1 KiB
C++

/*
* Copyright 2022-present ScyllaDB
*/
/*
* SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0
*/
#include "dht/i_partitioner_fwd.hh"
#include "idl/read_command.idl.hh"
#include "idl/consistency_level.idl.hh"
namespace db {
namespace functions {
class function_name {
sstring keyspace;
sstring name;
};
}
}
namespace query {
struct mapreduce_request {
struct aggregation_info {
db::functions::function_name name;
std::vector<sstring> column_names;
};
enum class reduction_type : uint8_t {
count,
aggregate
};
std::vector<query::mapreduce_request::reduction_type> reduction_types;
query::read_command cmd;
dht::partition_range_vector pr;
db::consistency_level cl;
lowres_system_clock::time_point timeout;
std::optional<std::vector<query::mapreduce_request::aggregation_info>> aggregation_infos [[version 5.1]];
};
struct mapreduce_result {
std::vector<bytes_opt> query_results;
};
verb [[cancellable]] mapreduce_request(query::mapreduce_request req [[ref]], std::optional<tracing::trace_info> trace_info [[ref]]) -> query::mapreduce_result;
}