view_builder: add metrics
The view builder service lacked metrics, so a basic set of them is added.
This commit is contained in:
@@ -1213,6 +1213,29 @@ view_builder::view_builder(database& db, db::system_distributed_keyspace& sys_di
|
||||
: _db(db)
|
||||
, _sys_dist_ks(sys_dist_ks)
|
||||
, _mnotifier(mn) {
|
||||
setup_metrics();
|
||||
}
|
||||
|
||||
void view_builder::setup_metrics() {
|
||||
namespace sm = seastar::metrics;
|
||||
|
||||
_metrics.add_group("view_builder", {
|
||||
sm::make_gauge("pending_bookkeeping_ops",
|
||||
sm::description("Number of tasks waiting to perform bookkeeping operations"),
|
||||
[this] { return _sem.waiters(); }),
|
||||
|
||||
sm::make_derive("steps_performed",
|
||||
sm::description("Number of performed build steps."),
|
||||
_stats.steps_performed),
|
||||
|
||||
sm::make_derive("steps_failed",
|
||||
sm::description("Number of failed build steps."),
|
||||
_stats.steps_failed),
|
||||
|
||||
sm::make_gauge("builds_in_progress",
|
||||
sm::description("Number of currently active view builds."),
|
||||
[this] { return _base_to_build_step.size(); })
|
||||
});
|
||||
}
|
||||
|
||||
future<> view_builder::start(service::migration_manager& mm) {
|
||||
@@ -1599,6 +1622,7 @@ future<> view_builder::do_build_step() {
|
||||
exponential_backoff_retry r(1s, 1min);
|
||||
while (!_base_to_build_step.empty() && !_as.abort_requested()) {
|
||||
auto units = get_units(_sem, 1).get0();
|
||||
++_stats.steps_performed;
|
||||
try {
|
||||
execute(_current_step->second, exponential_backoff_retry(1s, 1min));
|
||||
r.reset();
|
||||
@@ -1606,6 +1630,7 @@ future<> view_builder::do_build_step() {
|
||||
return;
|
||||
} catch (...) {
|
||||
++_current_step->second.base->cf_stats()->view_building_paused;
|
||||
++_stats.steps_failed;
|
||||
auto base = _current_step->second.base->schema();
|
||||
vlogger.warn("Error executing build step for base {}.{}: {}", base->ks_name(), base->cf_name(), std::current_exception());
|
||||
r.retry(_as).get();
|
||||
|
||||
@@ -115,6 +115,11 @@ class view_builder final : public service::migration_listener::only_view_notific
|
||||
std::optional<dht::token> next_token;
|
||||
};
|
||||
|
||||
struct stats {
|
||||
uint64_t steps_performed = 0;
|
||||
uint64_t steps_failed = 0;
|
||||
};
|
||||
|
||||
/**
|
||||
* Keeps track of the build progress for all the views of a particular
|
||||
* base table. Each execution of the build step comprises a query of
|
||||
@@ -164,6 +169,8 @@ class view_builder final : public service::migration_listener::only_view_notific
|
||||
seastar::shared_promise<> _shards_finished_read_promise;
|
||||
// Used for testing.
|
||||
std::unordered_map<std::pair<sstring, sstring>, seastar::shared_promise<>, utils::tuple_hash> _build_notifiers;
|
||||
stats _stats;
|
||||
metrics::metric_groups _metrics;
|
||||
|
||||
public:
|
||||
// The view builder processes the base table in steps of batch_size rows.
|
||||
@@ -206,6 +213,7 @@ private:
|
||||
future<> do_build_step();
|
||||
void execute(build_step&, exponential_backoff_retry);
|
||||
future<> maybe_mark_view_as_built(view_ptr, dht::token);
|
||||
void setup_metrics();
|
||||
|
||||
struct consumer;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user