This patch introduces a new `incremental_mode` parameter to the tablet repair REST API, providing more fine-grained control over the incremental repair process. Previously, incremental repair was on and could not be turned off. This change allows users to select from three distinct modes: - `regular`: This is the default mode. It performs a standard incremental repair, processing only unrepaired sstables and skipping those that are already repaired. The repair state (`repaired_at`, `sstables_repaired_at`) is updated. - `full`: This mode forces the repair to process all sstables, including those that have been previously repaired. This is useful when a full data validation is needed without disabling the incremental repair feature. The repair state is updated. - `disabled`: This mode completely disables the incremental repair logic for the current repair operation. It behaves like a classic (pre-incremental) repair, and it does not update any incremental repair state (`repaired_at` in sstables or `sstables_repaired_at` in the system.tablets table). The implementation includes: - Adding the `incremental_mode` parameter to the `/storage_service/repair/tablet` API endpoint. - Updating the internal repair logic to handle the different modes. - Adding a new test case to verify the behavior of each mode. - Updating the API documentation and developer documentation. Fixes #25605 Closes scylladb/scylladb#25693
60 lines
2.7 KiB
C++
60 lines
2.7 KiB
C++
/*
|
|
* Copyright (C) 2023-present ScyllaDB
|
|
*/
|
|
|
|
/*
|
|
* SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "mutation/mutation.hh"
|
|
#include "db/system_keyspace.hh"
|
|
#include "service/session.hh"
|
|
#include "locator/tablets.hh"
|
|
|
|
namespace replica {
|
|
|
|
class tablet_mutation_builder {
|
|
api::timestamp_type _ts;
|
|
schema_ptr _s;
|
|
mutation _m;
|
|
private:
|
|
clustering_key get_ck(dht::token last_token) {
|
|
return clustering_key::from_single_value(*_s, data_value(dht::token::to_int64(last_token)).serialize_nonnull());
|
|
}
|
|
public:
|
|
tablet_mutation_builder(api::timestamp_type ts, table_id table)
|
|
: _ts(ts)
|
|
, _s(db::system_keyspace::tablets())
|
|
, _m(_s, partition_key::from_single_value(*_s,
|
|
data_value(table.uuid()).serialize_nonnull()
|
|
))
|
|
{ }
|
|
|
|
tablet_mutation_builder& set_new_replicas(dht::token last_token, locator::tablet_replica_set replicas);
|
|
tablet_mutation_builder& set_replicas(dht::token last_token, locator::tablet_replica_set replicas);
|
|
tablet_mutation_builder& set_stage(dht::token last_token, locator::tablet_transition_stage stage);
|
|
tablet_mutation_builder& set_transition(dht::token last_token, locator::tablet_transition_kind);
|
|
tablet_mutation_builder& set_session(dht::token last_token, service::session_id);
|
|
tablet_mutation_builder& del_session(dht::token last_token);
|
|
tablet_mutation_builder& del_transition(dht::token last_token);
|
|
tablet_mutation_builder& set_resize_decision(locator::resize_decision, const gms::feature_service&);
|
|
tablet_mutation_builder& set_repair_scheduler_config(locator::repair_scheduler_config);
|
|
tablet_mutation_builder& set_repair_time(dht::token last_token, db_clock::time_point repair_time);
|
|
tablet_mutation_builder& set_sstables_repair_at(dht::token last_token, int64_t sstables_repaired_at);
|
|
tablet_mutation_builder& set_repair_task_info(dht::token last_token, locator::tablet_task_info info, const gms::feature_service& features);
|
|
tablet_mutation_builder& del_repair_task_info(dht::token last_token, const gms::feature_service& features);
|
|
tablet_mutation_builder& set_migration_task_info(dht::token last_token, locator::tablet_task_info info, const gms::feature_service& features);
|
|
tablet_mutation_builder& del_migration_task_info(dht::token last_token, const gms::feature_service& features);
|
|
tablet_mutation_builder& set_resize_task_info(locator::tablet_task_info info, const gms::feature_service& features);
|
|
tablet_mutation_builder& del_resize_task_info(const gms::feature_service& features);
|
|
tablet_mutation_builder& set_base_table(table_id base_table);
|
|
|
|
mutation build() {
|
|
return std::move(_m);
|
|
}
|
|
};
|
|
|
|
} // namespace replica
|