Files
scylladb/cql3/stats.hh
Wojciech Mitros e44820ba1f transport: generalize the bounce result message for bouncing to other nodes
In the following patches, we'll start allowing forwarding requests to strongly
consistent tables so that they'll get executed on the suitable tablet Raft group
members. For that we'll reuse the approach that we already have for bouncing
requests to other shards - we'll try to execute a request locally, and the
result of that will be a bounce message with another replica as the target.
In this patch we generalize the former bounce_to_shard result message so that
it will be able to specify the target of the bounce as another shard or specific
replica.
We also rename it to result_message::bounce so that it stops implying that only
another shard may be its target.
Aside from the host_id and the shard, the new message also includes the timeout,
because in the service handling the forwarding we won't have the access to it,
and it's needed for specifying how long we should wait for the forwarded
requests. It also includes an information whether this is a write request
to return correct timeout response in case the deadline is exceeded.
We will return other hosts in the new bounce message when executing requests to
strongly consistent tables when we can't handle the request because we aren't
a suitable replica. We can't handle this message yet, so we don't return it
anywhere and we still assume that every bounce message is a bounce to the same
host.
2026-03-12 17:48:57 +01:00

105 lines
3.2 KiB
C++

/*
* Copyright (C) 2015-present ScyllaDB
*
* Modified by ScyllaDB
*/
/*
* SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0
*/
#pragma once
#include "cql3/statements/statement_type.hh"
#include "db/consistency_level_type.hh"
#include <cstdint>
namespace cql3 {
/** Enums for selecting counters in `cql_stats', like:
* stats.query_cnt(source_selector::USER, ks_selector::NONSYSTEM, cond_selector::NO_CONDITIONS, statement_type::INSERT)
*/
enum class source_selector : size_t {
INTERNAL = 0u,
USER,
SIZE // Keep me as the last entry
};
enum class ks_selector : size_t {
SYSTEM = 0u,
NONSYSTEM,
SIZE // Keep me as the last entry
};
enum class cond_selector : size_t {
NO_CONDITIONS = 0u,
WITH_CONDITIONS,
SIZE // Keep me as the last entry
};
// Shard-local CQL statistics
// @sa cql3/query_processor.cc explains the meaning of each counter
struct cql_stats {
uint64_t& query_cnt(source_selector ss, ks_selector kss, cond_selector cs, statements::statement_type st) {
return _query_cnt[(size_t)ss][(size_t)kss][(size_t)cs][(size_t)st];
}
const uint64_t& query_cnt(source_selector ss, ks_selector kss, cond_selector cs, statements::statement_type st) const {
return _query_cnt[(size_t)ss][(size_t)kss][(size_t)cs][(size_t)st];
}
uint64_t& unpaged_select_queries(ks_selector kss) {
return _unpaged_select_queries[(size_t)kss];
}
const uint64_t& unpaged_select_queries(ks_selector kss) const {
return _unpaged_select_queries[(size_t)kss];
}
uint64_t batches = 0;
uint64_t cas_batches = 0;
uint64_t statements_in_batches = 0;
uint64_t statements_in_cas_batches = 0;
uint64_t batches_pure_logged = 0;
uint64_t batches_pure_unlogged = 0;
uint64_t batches_unlogged_from_logged = 0;
uint64_t rows_read = 0;
uint64_t reverse_queries = 0;
int64_t secondary_index_creates = 0;
int64_t secondary_index_drops = 0;
int64_t secondary_index_reads = 0;
int64_t secondary_index_rows_read = 0;
int64_t filtered_reads = 0;
int64_t filtered_rows_matched_total = 0;
int64_t filtered_rows_read_total = 0;
int64_t select_bypass_caches = 0;
int64_t select_allow_filtering = 0;
int64_t select_partition_range_scan = 0;
int64_t select_partition_range_scan_no_bypass_cache = 0;
int64_t select_parallelized = 0;
uint64_t minimum_replication_factor_fail_violations = 0;
uint64_t minimum_replication_factor_warn_violations = 0;
uint64_t maximum_replication_factor_warn_violations = 0;
uint64_t maximum_replication_factor_fail_violations = 0;
uint64_t replication_strategy_warn_list_violations = 0;
uint64_t replication_strategy_fail_list_violations = 0;
uint64_t writes_per_consistency_level[size_t(db::consistency_level::MAX_VALUE) + 1] = {};
uint64_t write_consistency_levels_disallowed_violations = 0;
uint64_t write_consistency_levels_warned_violations = 0;
uint64_t forwarded_requests = 0;
private:
uint64_t _unpaged_select_queries[(size_t)ks_selector::SIZE] = {0ul};
uint64_t _query_cnt[(size_t)source_selector::SIZE]
[(size_t)ks_selector::SIZE]
[(size_t)cond_selector::SIZE]
[statements::statement_type::MAX_VALUE + 1] = {};
};
}