Repair
The repair virtual tables provide comprehensive tracking of repair operations, from high-level summaries to individual validation tasks.
Overview
Section titled “Overview”Cassandra 5.0 introduces detailed repair tracking through virtual tables, enabling monitoring without external tools:
| Table | Scope | Description |
|---|---|---|
repairs | Top-level | Overall repair command status |
repair_sessions | Session | Individual repair sessions within a repair |
repair_jobs | Job | Per-table repair jobs within a session |
repair_validations | Validation | Merkle tree validation tasks |
repair_participates | Participation | Repairs where this node participates (not initiates) |
repairs
Section titled “repairs”Top-level repair operation tracking.
Schema
Section titled “Schema”VIRTUAL TABLE system_views.repairs ( id timeuuid PRIMARY KEY, command_id int, keyspace_name text, table_names frozen<list<text>>, status text, completed boolean, duration_millis bigint, failure_cause text, participants frozen<list<text>>, sessions frozen<set<timeuuid>>, -- Options used options_incremental boolean, options_parallelism text, options_primary_range boolean, options_data_centers frozen<set<text>>, options_hosts frozen<set<text>>, -- State timestamps state_init_timestamp timestamp, state_start_timestamp timestamp, state_success_timestamp timestamp, state_failure_timestamp timestamp, last_updated_at timestamp)| Column | Type | Description |
|---|---|---|
id | timeuuid | Unique repair identifier |
command_id | int | nodetool command ID |
keyspace_name | text | Keyspace being repaired |
table_names | list | Tables included in repair |
status | text | Current status |
completed | boolean | Whether repair has finished |
duration_millis | bigint | Total duration (milliseconds) |
failure_cause | text | Error message if failed |
participants | list | Nodes involved in repair |
options_* | various | Repair options used |
state_*_timestamp | timestamp | State transition times |
Status Values
Section titled “Status Values”Lowercase Status Values
Status values are lowercase in the implementation. Use lowercase in queries.
| Status | Description |
|---|---|
init | Repair initialized |
start | Repair started |
running | Actively repairing |
success | Completed successfully |
failure | Failed with error |
skipped | Skipped (e.g., no ranges) |
Example Queries
Section titled “Example Queries”-- Recent repairsSELECT id, keyspace_name, status, duration_millis / 1000 AS duration_sec, state_init_timestampFROM system_views.repairs;
-- Active repairsSELECT id, keyspace_name, table_names, status, participantsFROM system_views.repairsWHERE completed = false;
-- Failed repairsSELECT id, keyspace_name, failure_cause, duration_millisFROM system_views.repairsWHERE status = 'failure';repair_sessions
Section titled “repair_sessions”Individual repair sessions within a repair operation.
Schema
Section titled “Schema”VIRTUAL TABLE system_views.repair_sessions ( id timeuuid PRIMARY KEY, keyspace_name text, table_names frozen<list<text>>, repair_id timeuuid, status text, completed boolean, duration_millis bigint, failure_cause text, participants frozen<list<text>>, ranges frozen<list<text>>, jobs frozen<set<uuid>>, -- State timestamps state_init_timestamp timestamp, state_start_timestamp timestamp, state_success_timestamp timestamp, state_failure_timestamp timestamp, last_updated_at timestamp)Example Queries
Section titled “Example Queries”-- Sessions for a specific repairSELECT id, status, duration_millis, rangesFROM system_views.repair_sessionsWHERE repair_id = ?;
-- Active sessionsSELECT id, keyspace_name, status, participantsFROM system_views.repair_sessionsWHERE completed = false;
-- All sessions for duration analysisSELECT status, duration_millisFROM system_views.repair_sessions;Group and average duration data by status in application.
repair_jobs
Section titled “repair_jobs”Per-table repair jobs within a session.
Schema
Section titled “Schema”VIRTUAL TABLE system_views.repair_jobs ( id uuid PRIMARY KEY, keyspace_name text, table_name text, repair_id timeuuid, session_id timeuuid, status text, completed boolean, duration_millis bigint, failure_cause text, participants frozen<list<text>>, ranges frozen<list<text>>, -- State timestamps state_init_timestamp timestamp, state_start_timestamp timestamp, state_snapshot_start_timestamp timestamp, state_snapshot_complete_timestamp timestamp, state_validation_start_timestamp timestamp, state_validation_complete_timestamp timestamp, state_stream_start_timestamp timestamp, state_success_timestamp timestamp, state_failure_timestamp timestamp, last_updated_at timestamp)Job States
Section titled “Job States”Lowercase State Values
State values are lowercase in the implementation. Use lowercase in queries.
| State | Description |
|---|---|
init | Job created |
start | Job started |
snapshot_start | Taking snapshot |
snapshot_complete | Snapshot done |
validation_start | Building Merkle trees |
validation_complete | Merkle trees built |
stream_start | Streaming differences |
success | Job completed |
failure | Job failed |
Example Queries
Section titled “Example Queries”-- Jobs for a sessionSELECT id, table_name, status, duration_millisFROM system_views.repair_jobsWHERE session_id = ?;
-- Completed jobs with validation timestampsSELECT keyspace_name, table_name, state_validation_start_timestamp, state_validation_complete_timestampFROM system_views.repair_jobsWHERE completed = true;
-- Jobs currently streamingSELECT keyspace_name, table_name, statusFROM system_views.repair_jobsWHERE status = 'stream_start';Calculate validation duration by subtracting timestamps in application.
repair_validations
Section titled “repair_validations”Merkle tree validation tasks (the most granular level).
Schema
Section titled “Schema”VIRTUAL TABLE system_views.repair_validations ( id uuid PRIMARY KEY, keyspace_name text, table_name text, repair_id timeuuid, session_id timeuuid, initiator text, status text, completed boolean, duration_millis bigint, failure_cause text, ranges frozen<list<text>>, -- Progress tracking estimated_partitions bigint, partitions_processed bigint, estimated_total_bytes bigint, bytes_read bigint, progress_percentage float, -- State timestamps state_init_timestamp timestamp, state_start_timestamp timestamp, state_accept_timestamp timestamp, state_sending_trees_timestamp timestamp, state_success_timestamp timestamp, state_failure_timestamp timestamp, last_updated_at timestamp)Example Queries
Section titled “Example Queries”-- Active validations with progressSELECT keyspace_name, table_name, initiator, progress_percentage, partitions_processed, estimated_partitionsFROM system_views.repair_validationsWHERE completed = false;
-- Validation performanceSELECT keyspace_name, table_name, bytes_read / 1048576 AS mb_read, duration_millis / 1000 AS duration_secFROM system_views.repair_validationsWHERE completed = true AND duration_millis > 0;Calculate MB/s as mb_read / duration_sec.
repair_participates
Section titled “repair_participates”Repairs where this node is a participant (not the initiator).
Schema
Section titled “Schema”VIRTUAL TABLE system_views.repair_participates ( id timeuuid PRIMARY KEY, initiator text, tables frozen<set<text>>, status text, completed boolean, duration_millis bigint, failure_cause text, incremental boolean, global boolean, preview_kind text, ranges frozen<list<text>>, repaired_at timestamp, validations frozen<set<uuid>>, -- State timestamps state_init_timestamp timestamp, state_success_timestamp timestamp, state_failure_timestamp timestamp, last_updated_at timestamp)Example Queries
Section titled “Example Queries”-- Repairs initiated by other nodesSELECT id, initiator, tables, status, duration_millis, state_init_timestampFROM system_views.repair_participates;
-- Active participationsSELECT initiator, tables, statusFROM system_views.repair_participatesWHERE completed = false;Sort by state_init_timestamp in application to see recent repairs first.
Monitoring Queries
Section titled “Monitoring Queries”Repair Health Dashboard
Section titled “Repair Health Dashboard”-- All repairs with status and timestampsSELECT status, state_init_timestampFROM system_views.repairs;
-- Active repairsSELECT id FROM system_views.repairs WHERE completed = false;
-- Active sessionsSELECT id FROM system_views.repair_sessions WHERE completed = false;
-- Active jobsSELECT id FROM system_views.repair_jobs WHERE completed = false;
-- Active validationsSELECT id FROM system_views.repair_validations WHERE completed = false;Filter by timestamp and aggregate counts in application.
Progress Monitoring
Section titled “Progress Monitoring”-- Active repairsSELECT id, keyspace_name, statusFROM system_views.repairsWHERE completed = false;
-- Sessions for a specific repair (use repair_id from above)SELECT id, repair_id, status, rangesFROM system_views.repair_sessionsWHERE repair_id = <repair_id>;
-- Jobs for a specific session (use session_id from above)SELECT table_name, statusFROM system_views.repair_jobsWHERE session_id = <session_id>;Alerting Rules
Section titled “Alerting Rules”Long-Running Repair
Section titled “Long-Running Repair”-- Alert: Repairs running > 4 hoursSELECT id, keyspace_name, duration_millis / 3600000 AS hoursFROM system_views.repairsWHERE completed = false AND duration_millis > 14400000;Failed Repairs
Section titled “Failed Repairs”-- Alert: Recent repair failuresSELECT id, keyspace_name, failure_cause, state_failure_timestampFROM system_views.repairsWHERE status = 'failure';Filter in application for failures within the last hour.
Stuck Validations
Section titled “Stuck Validations”-- Alert: Validations not progressingSELECT id, keyspace_name, table_name, progress_percentage, duration_millis / 60000 AS duration_minutesFROM system_views.repair_validationsWHERE completed = false AND duration_millis > 1800000 AND progress_percentage < 0.5;Related Documentation
Section titled “Related Documentation”- Virtual Tables Overview - Introduction to virtual tables
- Repair Guide - Repair procedures and strategies
- nodetool repair - Repair command reference