mirror of https://github.com/apache/cassandra
Before this patch, a SERIAL read or a non-applying CAS replay any in-progress commit by calling `beginAndRepairPaxos`, but only a quorum of nodes is contacted, so a minority of nodes could have an unfinished in-progress proposal in their Paxos state. If such in-progress proposal is not replayed by a SERIAL read/non-applying CAS, it should never be replayed by any following operation as that would break serializability, but nothing was done to avoid this. This patch ensures that both a SERIAL read or a non-applying CAS commit an empty update before succeeding. This ensures that no prior incomplete in-progress proposal can be replayed (such proposal will be discarded as older than the last committed ballot). As this fix has a performance impact on SERIAL reads, a flag is provided to disable the new code (even if this is discouraged by a warning). Patch by Sylvain Lebresne, reviewed by Benjamin Lerer for CASSANDRA-12126 |
||
|---|---|---|
| .. | ||
| burn/org/apache/cassandra | ||
| conf | ||
| data | ||
| distributed/org/apache/cassandra | ||
| long/org/apache/cassandra | ||
| microbench/org/apache/cassandra/test/microbench | ||
| resources | ||
| unit/org/apache/cassandra | ||