You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2014/06/27 04:37:14 UTC
[5/8] git commit: Fix inconsistent use of consistencyForCommit that
allowed LOCAL_QUORUM operations to incorrect become full QUORUM patch by
Sankalp Kohli; reviewed by jbellis for CASSANDRA-7345
Fix inconsistent use of consistencyForCommit that allowed LOCAL_QUORUM operations to incorrect become full QUORUM
patch by Sankalp Kohli; reviewed by jbellis for CASSANDRA-7345
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/2b973b9e
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/2b973b9e
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/2b973b9e
Branch: refs/heads/cassandra-2.1
Commit: 2b973b9ed1c1c6bd1c5b0c756cae12db434f02c0
Parents: 900f29c
Author: Jonathan Ellis <jb...@apache.org>
Authored: Thu Jun 26 21:35:50 2014 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Thu Jun 26 21:35:50 2014 -0500
----------------------------------------------------------------------
CHANGES.txt | 2 ++
src/java/org/apache/cassandra/service/StorageProxy.java | 11 ++++++-----
2 files changed, 8 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/2b973b9e/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index c74b27d..365722f 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,7 @@
2.0.10
* Fix race in FileCacheService RemovalListener (CASSANDRA-7278)
+ * Fix inconsistent use of consistencyForCommit that allowed LOCAL_QUORUM
+ operations to incorrect become full QUORUM (CASSANDRA-7345)
2.0.9
http://git-wip-us.apache.org/repos/asf/cassandra/blob/2b973b9e/src/java/org/apache/cassandra/service/StorageProxy.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StorageProxy.java b/src/java/org/apache/cassandra/service/StorageProxy.java
index 3b10cff..c606d75 100644
--- a/src/java/org/apache/cassandra/service/StorageProxy.java
+++ b/src/java/org/apache/cassandra/service/StorageProxy.java
@@ -217,7 +217,7 @@ public class StorageProxy implements StorageProxyMBean
List<InetAddress> liveEndpoints = p.left;
int requiredParticipants = p.right;
- UUID ballot = beginAndRepairPaxos(start, key, metadata, liveEndpoints, requiredParticipants, consistencyForPaxos);
+ UUID ballot = beginAndRepairPaxos(start, key, metadata, liveEndpoints, requiredParticipants, consistencyForPaxos, consistencyForCommit);
// read the current values and check they validate the conditions
Tracing.trace("Reading existing values for CAS precondition");
@@ -302,7 +302,7 @@ public class StorageProxy implements StorageProxyMBean
* @return the Paxos ballot promised by the replicas if no in-progress requests were seen and a quorum of
* nodes have seen the mostRecentCommit. Otherwise, return null.
*/
- private static UUID beginAndRepairPaxos(long start, ByteBuffer key, CFMetaData metadata, List<InetAddress> liveEndpoints, int requiredParticipants, ConsistencyLevel consistencyForPaxos)
+ private static UUID beginAndRepairPaxos(long start, ByteBuffer key, CFMetaData metadata, List<InetAddress> liveEndpoints, int requiredParticipants, ConsistencyLevel consistencyForPaxos, ConsistencyLevel consistencyForCommit)
throws WriteTimeoutException
{
long timeout = TimeUnit.MILLISECONDS.toNanos(DatabaseDescriptor.getCasContentionTimeout());
@@ -338,7 +338,7 @@ public class StorageProxy implements StorageProxyMBean
Commit refreshedInProgress = Commit.newProposal(inProgress.key, ballot, inProgress.update);
if (proposePaxos(refreshedInProgress, liveEndpoints, requiredParticipants, false, consistencyForPaxos))
{
- commitPaxos(refreshedInProgress, ConsistencyLevel.QUORUM);
+ commitPaxos(refreshedInProgress, consistencyForCommit);
}
else
{
@@ -1140,16 +1140,17 @@ public class StorageProxy implements StorageProxyMBean
int requiredParticipants = p.right;
// does the work of applying in-progress writes; throws UAE or timeout if it can't
+ final ConsistencyLevel consistencyForCommitOrFetch = consistency_level == ConsistencyLevel.LOCAL_SERIAL ? ConsistencyLevel.LOCAL_QUORUM : ConsistencyLevel.QUORUM;
try
{
- beginAndRepairPaxos(start, command.key, metadata, liveEndpoints, requiredParticipants, consistency_level);
+ beginAndRepairPaxos(start, command.key, metadata, liveEndpoints, requiredParticipants, consistency_level, consistencyForCommitOrFetch);
}
catch (WriteTimeoutException e)
{
throw new ReadTimeoutException(consistency_level, 0, consistency_level.blockFor(Keyspace.open(command.ksName)), false);
}
- rows = fetchRows(commands, consistency_level == ConsistencyLevel.LOCAL_SERIAL ? ConsistencyLevel.LOCAL_QUORUM : ConsistencyLevel.QUORUM);
+ rows = fetchRows(commands, consistencyForCommitOrFetch);
}
else
{