Read repair

When a read request involves multiple replicas, the coordinator node compares the data returned from each replica. If a replica’s response doesn’t match the other nodes, then the coordinator node triggers read repair to patch the mismatched replica.

The coordinator node uses records with the most recent timestamp for the read repair and the response to the read request.

Read repair limitations

Read repair isn’t the same as anti-entropy repair. Don’t rely on read repair as your sole means of synchronizing replicas.

  • Read repair doesn’t propagate expired tombstones, and it doesn’t consider expired tombstones when selecting the most recent write for a given record. This can result in resurrected deletes (zombies) when repairing from replicas that contain missed deletes due to extended downtime. For more information, see Deletes and tombstones.

  • Read repair only includes the replicas selected for a read; all other replicas are excluded from the repair.

  • Read repair is never triggered at ONE or LOCAL_ONE because those consistency levels read directly from one replica without comparing replicas. If replicas aren’t routinely repaired by other means, responses can be inconsistent when different nodes are selected for similar reads.

  • Read repair runs in the foreground and blocks application operations, including responding to the original read request, until the repair is complete. If a cluster is stable and receives routine anti-entropy repairs and other consistency maintenance, read repairs shouldn’t occur frequently. If nodes frequently require read repair, there are underlying stability or consistency issues that need to be addressed.

Disable legacy background read repair DSE 5.1.11 and earlier

DSE 5.1.11 and earlier included a background read repair feature that was set with read_repair_chance and dclocal_read_repair_chance. This feature was unreliable and prone to bugs and performance issues. Additionally, these background read repairs were ultimately unnecessary because regular foreground read repairs also ran regardless of the background read repair configuration.

This feature was deprecated in 5.1.10 and removed in 5.1.12. It isn’t recommended for use in any version of DSE where it is available. If you are supporting a legacy application that relies on version 5.1.11 or earlier, set read_repair_chance and dclocal_read_repair_chance to 0 to disable background read repair. You can use a script to disable background read repair on all tables on a node, for example:

for i in `cqlsh -e 'describe schema;' |grep 'CREATE TABLE'|sed -e 's|CREATE TABLE \([^ ]*\) .*|\1|'`; do
 echo "alter table $i with read_repair_chance = 0.0 and dclocal_read_repair_chance = 0.0;"
done| tee alters.cql
cqlsh -f alters.cql

Was this helpful?

Give Feedback

How can we improve the documentation?

© Copyright IBM Corporation 2026 | Privacy policy | Terms of use Manage Privacy Choices

Apache, Apache Cassandra, Cassandra, Apache Tomcat, Tomcat, Apache Lucene, Apache Solr, Apache Hadoop, Hadoop, Apache Pulsar, Pulsar, Apache Spark, Spark, Apache TinkerPop, TinkerPop, Apache Kafka and Kafka are either registered trademarks or trademarks of the Apache Software Foundation or its subsidiaries in Canada, the United States and/or other countries. Kubernetes is the registered trademark of the Linux Foundation.

General Inquiries: Contact IBM