Repository: cassandra
Updated Branches:
  refs/heads/trunk 9c9279a29 -> 7785e12a6


Improve system query to read paxos table on propose

patch by kohlisankalp; reviewed by slebresne for CASSANDRA-7929


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/7785e12a
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/7785e12a
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/7785e12a

Branch: refs/heads/trunk
Commit: 7785e12a656fbcb0166c1dfa8f3fd5a66b0553f5
Parents: 9c9279a
Author: Sankalp Kohli <kohlisank...@gmail.com>
Authored: Fri Oct 3 10:22:30 2014 +0200
Committer: Sylvain Lebresne <sylv...@datastax.com>
Committed: Fri Oct 3 10:24:07 2014 +0200

----------------------------------------------------------------------
 CHANGES.txt                                            |  1 +
 src/java/org/apache/cassandra/db/SystemKeyspace.java   | 13 +++++++++++++
 .../org/apache/cassandra/service/paxos/PaxosState.java |  6 +++---
 3 files changed, 17 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/7785e12a/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 95e6f67..dc9a32f 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 3.0
+ * Improve query to read paxos table on propose (CASSANDRA-7929)
  * Remove cassandra-cli (CASSANDRA-7920)
  * Optimize java source-based UDF invocation (CASSANDRA-7924)
  * Accept dollar quoted strings in CQL (CASSANDRA-7769)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/7785e12a/src/java/org/apache/cassandra/db/SystemKeyspace.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/SystemKeyspace.java 
b/src/java/org/apache/cassandra/db/SystemKeyspace.java
index 8b62740..2cff38d 100644
--- a/src/java/org/apache/cassandra/db/SystemKeyspace.java
+++ b/src/java/org/apache/cassandra/db/SystemKeyspace.java
@@ -860,6 +860,19 @@ public class SystemKeyspace
         return new PaxosState(promised, accepted, mostRecent);
     }
 
+    public static Commit loadPaxosPromise(ByteBuffer key, CFMetaData metadata)
+    {
+        String req = "SELECT in_progress_ballot FROM system.%s WHERE row_key = 
? AND cf_id = ?";
+        UntypedResultSet results = executeInternal(String.format(req, 
PAXOS_CF), key, metadata.cfId);
+        if (results.isEmpty())
+            return Commit.emptyCommit(key, metadata);
+        UntypedResultSet.Row row = results.one();
+        Commit promised = row.has("in_progress_ballot")
+                ? new Commit(key, row.getUUID("in_progress_ballot"), 
ArrayBackedSortedColumns.factory.create(metadata))
+                : Commit.emptyCommit(key, metadata);
+        return promised;
+    }
+
     public static void savePaxosPromise(Commit promise)
     {
         String req = "UPDATE system.%s USING TIMESTAMP ? AND TTL ? SET 
in_progress_ballot = ? WHERE row_key = ? AND cf_id = ?";

http://git-wip-us.apache.org/repos/asf/cassandra/blob/7785e12a/src/java/org/apache/cassandra/service/paxos/PaxosState.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/paxos/PaxosState.java 
b/src/java/org/apache/cassandra/service/paxos/PaxosState.java
index df7365d..37cea5c 100644
--- a/src/java/org/apache/cassandra/service/paxos/PaxosState.java
+++ b/src/java/org/apache/cassandra/service/paxos/PaxosState.java
@@ -87,8 +87,8 @@ public class PaxosState
         lock.lock();
         try
         {
-            PaxosState state = SystemKeyspace.loadPaxosState(proposal.key, 
proposal.update.metadata());
-            if (proposal.hasBallot(state.promised.ballot) || 
proposal.isAfter(state.promised))
+            Commit promised = SystemKeyspace.loadPaxosPromise(proposal.key, 
proposal.update.metadata());
+            if (proposal.hasBallot(promised.ballot) || 
proposal.isAfter(promised))
             {
                 Tracing.trace("Accepting proposal {}", proposal);
                 SystemKeyspace.savePaxosProposal(proposal);
@@ -96,7 +96,7 @@ public class PaxosState
             }
             else
             {
-                Tracing.trace("Rejecting proposal for {} because inProgress is 
now {}", proposal, state.promised);
+                Tracing.trace("Rejecting proposal for {} because inProgress is 
now {}", proposal, promised);
                 return false;
             }
         }

Reply via email to