Sam Tunnicliffe created CASSANDRA-15601:
-------------------------------------------
Summary: Ensure repaired data tracking reads a consistent amount
of data across replicas
Key: CASSANDRA-15601
URL: https://issues.apache.org/jira/browse/CASSANDRA-15601
Project: Cassandra
Issue Type: Bug
Components: Consistency/Repair
Reporter: Sam Tunnicliffe
Assignee: Sam Tunnicliffe
When generating a digest for repaired data tracking, the amount of repaired
data that needs to be read may depend on the unrepaired data on the replica. As
this may vary between replicas, digest mismatches can be reported even though
the repaired data may actually be in sync.
For example, two replicas, A & B and a table like
{code}
CREATE TABLE t (pk int, ck int, PRIMARY KEY (pk, ck)) WITH CLUSTERING ORDER BY
ck DESC;
Unrepaired
===========
Instance A
(0, 5)
Instance B
(0, 6)
(0, 5)
Repaired (Both A & B)
=========
(0, 4)
(0, 3)
(0, 2)
(0, 1)
(0, 0)
SELECT * FROM tbl WHERE pk = 0 LIMIT 3;
{code}
Instance A would read (0, 5) from the unrepaired set and (0, 4) (0, 3) from the
repaired set.
Instance B would read (0, 6) (0, 5) from its unrepaired set and just (0, 4)
from repaired data.
Unrepaired row/range/partition tombstones shadowing repaired data and present
on some replicas but not others will have the opposite effect, with more
repaired data being read in comparison.
To fix this, when repaired data tracking is in effect each replica needs to
overread during a full data read. Replicas should read up to {{LIMIT}} (i.e.
the {{DataLimit}} of the {{ReadCommand}}) from the repaired set, regardless of
how much is read from the unrepaired data. At the point where that amount of
repaired data has been read, replica should stop updating the digest. So if
unrepaired tombstones cause more than {{LIMIT}} repaired data to be read, the
digest is only calculated over the first {{LIMIT}}-worth of repaired data.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]