mirror of
https://github.com/scylladb/scylladb.git
synced 2026-04-27 20:05:10 +00:00
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
50 lines
1.1 KiB
C++
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;
|
|
}
|