You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ja...@apache.org on 2014/07/09 01:21:55 UTC

git commit: Anti-compaction proceeds if any part of the repair failed

Repository: cassandra
Updated Branches:
  refs/heads/cassandra-2.1.0 895eaecc3 -> eb4032e5f


Anti-compaction proceeds if any part of the repair failed

patch by jasobrown; reviewed by yukim for CASSANDRA-7521


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

Branch: refs/heads/cassandra-2.1.0
Commit: eb4032e5fb4b5c7ec4f59989c0e62ebc431c1e21
Parents: 895eaec
Author: Jason Brown <ja...@apple.com>
Authored: Tue Jul 8 16:20:58 2014 -0700
Committer: Jason Brown <ja...@apple.com>
Committed: Tue Jul 8 16:20:58 2014 -0700

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../cassandra/service/ActiveRepairService.java  | 22 +++++++++++---------
 .../cassandra/service/StorageService.java       |  5 ++++-
 3 files changed, 17 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/eb4032e5/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 180b044..7fff2d4 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,6 @@
 2.1.0-final
  * (Windows) fix startup when WMI memory query fails (CASSANDRA-7505)
+ * Anti-compaction proceeds if any part of the repair failed (CASANDRA-7521)
 
 
 2.1.0-rc3

http://git-wip-us.apache.org/repos/asf/cassandra/blob/eb4032e5/src/java/org/apache/cassandra/service/ActiveRepairService.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/ActiveRepairService.java b/src/java/org/apache/cassandra/service/ActiveRepairService.java
index 70394bc..35a86f6 100644
--- a/src/java/org/apache/cassandra/service/ActiveRepairService.java
+++ b/src/java/org/apache/cassandra/service/ActiveRepairService.java
@@ -316,19 +316,21 @@ public class ActiveRepairService
         parentRepairSessions.put(parentRepairSession, new ParentRepairSession(columnFamilyStores, ranges, sstablesToRepair, System.currentTimeMillis()));
     }
 
-    public void finishParentSession(UUID parentSession, Set<InetAddress> neighbors) throws InterruptedException, ExecutionException, IOException
+    public void finishParentSession(UUID parentSession, Set<InetAddress> neighbors, boolean doAntiCompaction) throws InterruptedException, ExecutionException, IOException
     {
-
-        for (InetAddress neighbor : neighbors)
-        {
-            AnticompactionRequest acr = new AnticompactionRequest(parentSession);
-            MessageOut<RepairMessage> req = acr.createMessage();
-            MessagingService.instance().sendOneWay(req, neighbor);
-        }
         try
         {
-            List<Future<?>> futures = doAntiCompaction(parentSession);
-            FBUtilities.waitOnFutures(futures);
+            if (doAntiCompaction)
+            {
+                for (InetAddress neighbor : neighbors)
+                {
+                    AnticompactionRequest acr = new AnticompactionRequest(parentSession);
+                    MessageOut<RepairMessage> req = acr.createMessage();
+                    MessagingService.instance().sendOneWay(req, neighbor);
+                }
+                List<Future<?>> futures = doAntiCompaction(parentSession);
+                FBUtilities.waitOnFutures(futures);
+            }
         }
         finally
         {

http://git-wip-us.apache.org/repos/asf/cassandra/blob/eb4032e5/src/java/org/apache/cassandra/service/StorageService.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StorageService.java b/src/java/org/apache/cassandra/service/StorageService.java
index feaeac8..3fd3781 100644
--- a/src/java/org/apache/cassandra/service/StorageService.java
+++ b/src/java/org/apache/cassandra/service/StorageService.java
@@ -2765,6 +2765,7 @@ public class StorageService extends NotificationBroadcasterSupport implements IE
                     }
                 }
 
+                boolean successful = true;
                 for (RepairFuture future : futures)
                 {
                     try
@@ -2776,19 +2777,21 @@ public class StorageService extends NotificationBroadcasterSupport implements IE
                     }
                     catch (ExecutionException e)
                     {
+                        successful = false;
                         message = String.format("Repair session %s for range %s failed with error %s", future.session.getId(), future.session.getRange().toString(), e.getCause().getMessage());
                         logger.error(message, e);
                         sendNotification("repair", message, new int[]{cmd, ActiveRepairService.Status.SESSION_FAILED.ordinal()});
                     }
                     catch (Exception e)
                     {
+                        successful = false;
                         message = String.format("Repair session %s for range %s failed with error %s", future.session.getId(), future.session.getRange().toString(), e.getMessage());
                         logger.error(message, e);
                         sendNotification("repair", message, new int[]{cmd, ActiveRepairService.Status.SESSION_FAILED.ordinal()});
                     }
                 }
                 if (!fullRepair)
-                    ActiveRepairService.instance.finishParentSession(parentSession, allNeighbors);
+                    ActiveRepairService.instance.finishParentSession(parentSession, allNeighbors, successful);
                 sendNotification("repair", String.format("Repair command #%d finished", cmd), new int[]{cmd, ActiveRepairService.Status.FINISHED.ordinal()});
             }
         }, null);