You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by al...@apache.org on 2014/06/03 17:52:13 UTC

git commit: Fix handling of empty counter replication mutations

Repository: cassandra
Updated Branches:
  refs/heads/cassandra-1.2 d48a1871d -> 1dc157afe


Fix handling of empty counter replication mutations

patch by Aleksey Yeschenko; reviewed by Richard Low for CASSANDRA-7144


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

Branch: refs/heads/cassandra-1.2
Commit: 1dc157afe7da3dce57f7657e445ba12f16073d49
Parents: d48a187
Author: Aleksey Yeschenko <al...@apache.org>
Authored: Tue Jun 3 18:51:20 2014 +0300
Committer: Aleksey Yeschenko <al...@apache.org>
Committed: Tue Jun 3 18:51:20 2014 +0300

----------------------------------------------------------------------
 CHANGES.txt                                           |  1 +
 src/java/org/apache/cassandra/db/CounterMutation.java |  3 ++-
 .../org/apache/cassandra/service/StorageProxy.java    | 14 ++++++++++++--
 3 files changed, 15 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/1dc157af/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index e45cc72..8014170 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 1.2.17
+ * Fix handling of empty counter replication mutations (CASSANDRA-7144)
  * Use LOCAL_ONE for non-superuser auth queries (CASSANDRA-7328)
  * Set keepalive on MessagingService connections (CASSANDRA-7170)
  * Add Cloudstack snitch (CASSANDRA-7147)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/1dc157af/src/java/org/apache/cassandra/db/CounterMutation.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/CounterMutation.java b/src/java/org/apache/cassandra/db/CounterMutation.java
index 62ea3f7..76aaeb5 100644
--- a/src/java/org/apache/cassandra/db/CounterMutation.java
+++ b/src/java/org/apache/cassandra/db/CounterMutation.java
@@ -96,7 +96,8 @@ public class CounterMutation implements IMutation
                 cf.retainAll(rowMutation.getColumnFamily(cf.metadata().cfId));
             replicationMutation.add(cf);
         }
-        return replicationMutation;
+
+        return replicationMutation.isEmpty() ? null : replicationMutation;
     }
 
     private void addReadCommandFromColumnFamily(String table, ByteBuffer key, ColumnFamily columnFamily, List<ReadCommand> commands)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/1dc157af/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 7ef3d72..3c3c052 100644
--- a/src/java/org/apache/cassandra/service/StorageProxy.java
+++ b/src/java/org/apache/cassandra/service/StorageProxy.java
@@ -781,8 +781,18 @@ public class StorageProxy implements StorageProxyMBean
                     {
                         public void runMayThrow() throws OverloadedException
                         {
-                            // send mutation to other replica
-                            sendToHintedEndpoints(cm.makeReplicationMutation(), remotes, responseHandler, localDataCenter, consistency_level);
+                            // send the mutation to other replicas, if not null (see CASSANDRA-7144 for details)
+                            RowMutation replicationMutation = cm.makeReplicationMutation();
+                            if (replicationMutation != null)
+                            {
+                                sendToHintedEndpoints(cm.makeReplicationMutation(), remotes, responseHandler, localDataCenter, consistency_level);
+                            }
+                            else
+                            {
+                                // simulate the rest of the responses to avoid the timeout
+                                for (int i = 0; i < remotes.size(); i++)
+                                    responseHandler.response(null);
+                            }
                         }
                     });
                 }