Read Repair: repair during read path
When a read query encounters inconsistent results at a consistency level greater than ONE
or LOCAL_ONE
, DataStax Enterprise (DSE) initiates a read repair.
Such read repairs run in the foreground and block application operations until the repair process is complete.
Read queries with a consistency level of |
In more detail:
-
The coordinator node asks one replica for data and the others for a digest of their data.
-
If there is a mismatch in the data returned to the coordinator from the replicas, a read is requested from all replicas involved in the query (dictated by the consistency level) and the results are merged.
-
If a single replica doesn’t have all of the latest data for each column, a new record is assembled by mixing and matching columns from different replicas.
-
After determining the latest version, the record is written back to only the replicas involved in the request.
For example, in the case of a LOCAL_QUORUM
read with a replication factor of three, two replicas are queried, so only those two replicas are repaired.
Read repair does not propagate expired tombstones, nor does it consider expired tombstones when actually repairing data.
That means that if there is tombstoned data that has not been propagated to all replica nodes before |
For versions of DSE earlier than 5.1.12, cluster-wide and local datacenter non-blocking background repairs can also be configured, and are governed by the parameters dclocal_read_repair_chance
and read_repair_chance
as described in table_options
.
In more detail:
-
If the read repair chance properties are not zero on a table, during each query DSE generates a random number between
0.0
and1.0
. -
If that random number is less than or equal to
read_repair_chance
, a non-blocking global read repair is initiated. -
If not, DSE tests to see if the random number is less than or equal to
dc_local_read_repair_chance
, and, if it is, a non-blocking read repair is performed in the local DC only.
DSE uses a single random value for both of the read repair tests and global read repair, |
Read repair cannot be performed on tables that use
DateTieredCompactionStrategy (DTCS) - Deprecated, due to the method of checking timestamps used in DTCS compaction.
If your table uses DateTieredCompactionStrategy
, set read_repair_chance
to zero.
For other compaction strategies, read_repair_chance
is typically set to a value of 0.2.