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; } }