diff --git a/service/storage_service.cc b/service/storage_service.cc index 86c628f742..f99e36fed6 100644 --- a/service/storage_service.cc +++ b/service/storage_service.cc @@ -2726,6 +2726,30 @@ class topology_coordinator { ); } + std::vector mark_nodes_as_cleanup_needed(node_to_work_on& node, bool rollback) { + auto& topo = _topo_sm._topology; + std::vector muts; + muts.reserve(topo.normal_nodes.size()); + std::unordered_set dirty_nodes; + + for (auto& [_, erm] : _db.get_non_local_strategy_keyspaces_erms()) { + const std::unordered_set& nodes = rollback ? erm->get_all_pending_nodes() : erm->get_dirty_endpoints(); + dirty_nodes.insert(nodes.begin(), nodes.end()); + } + + for (auto& n : dirty_nodes) { + auto id = raft::server_id(n.uuid()); + // mark all nodes (except self) as cleanup needed + if (node.id != id) { + topology_mutation_builder builder(node.guard.write_timestamp()); + builder.with_node(id).set("cleanup_status", cleanup_status::running); + muts.emplace_back(builder.build()); + slogger.trace("raft topology: mark node {} as needed cleanup", id); + } + } + return muts; + } + // Returns true if the state machine was transitioned into tablet migration path. future maybe_start_tablet_migration(group0_guard);