mirror of https://github.com/apache/cassandra
Implement mutation tracking repair as a new repair task that replaces Merkle tree validation and streaming for tracked keyspaces. Instead of building hash trees and comparing data, MutationTrackingSyncCoordinator sends MT_SYNC_REQ to all participants to collect their witnessed offsets, then waits for background offset broadcasts to confirm all replicas have reconciled to those target offsets. Key changes: - Add MutationTrackingIncrementalRepairTask that creates per-range MutationTrackingSyncCoordinator instances and blocks until all shards reach the target reconciled offsets or timeout. - Add MT_SYNC_REQ/MT_SYNC_RSP verbs and MutationTrackingSyncRequest/ MutationTrackingSyncResponse messages for the repair protocol to establish a happens-before relationship between repair start and offset collection. - RepairCoordinator.create() factory method snapshots TCM state to decide whether to use mutation tracking repair and flips incremental to false (skipping anti-compaction) when MT is active without migration. - Support mutation tracking migration: during untracked->tracked migration, run incremental repair first (for pre-migration data), then MT sync. KeyspaceMigrationInfo validates that repair ranges don't partially overlap pending migration ranges and routes streaming/SSTable finalization through the correct tracked vs untracked path. - Temporarily route read repair mutations through the untracked write path during migration by adding isReadRepair flag to Mutation and bypassing migration routing checks in ReadRepairVerbHandler and CassandraKeyspaceWriteHandler. This is a stopgap; CASSANDRA-21252 will roll back this approach and handle read repair properly. - Add offset collection APIs to CoordinatorLog, Node2OffsetsMap, and Shard for computing union and intersection of witnessed offsets scoped to specific participant host IDs (supporting --force with dead node exclusion). - Add configurable mutation_tracking_sync_timeout (default 2m) with JMX get/set on StorageServiceMBean. - Fix ActiveRepairService to use tryFailure() instead of setFailure() to avoid double-completion exceptions during concurrent repair failures. Co-Authored-By: Ariel Weisberg <aweisberg@apple.com> |
||
|---|---|---|
| .. | ||
| com/datastax/driver/core | ||
| org | ||