cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From yu...@apache.org
Subject [5/8] git commit: Skip repair on system_trace and keyspaces with RF=1; patch by yukim reviewed by Sylvain Lebresne for CASSANDRA-4956
Date Thu, 15 Nov 2012 17:01:18 GMT
Skip repair on system_trace and keyspaces with RF=1; patch by yukim reviewed by Sylvain Lebresne
for CASSANDRA-4956


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

Branch: refs/heads/trunk
Commit: 309666b4dddd7e0292d8dfc5661901d9cb9fc549
Parents: c4cca2d
Author: Yuki Morishita <yukim@apache.org>
Authored: Thu Nov 15 10:59:48 2012 -0600
Committer: Yuki Morishita <yukim@apache.org>
Committed: Thu Nov 15 10:59:48 2012 -0600

----------------------------------------------------------------------
 CHANGES.txt                                        |    1 +
 .../cassandra/service/AntiEntropyService.java      |    7 ++-
 .../apache/cassandra/service/StorageService.java   |   69 ++++++---------
 3 files changed, 33 insertions(+), 44 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/309666b4/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index fd6ab95..c499919 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -13,6 +13,7 @@
  * Optimize mostRecentTomstone check in CC.collectAllData (CASSANDRA-4883)
  * Change stream session ID to UUID to avoid collision from same node (CASSANDRA-4813)
  * Use Stats.db when bulk loading if present (CASSANDRA-4957)
+ * Skip repair on system_trace and keyspaces with RF=1 (CASSANDRA-4956)
 Merged from 1.1:
  * reset getRangeSlice filter after finishing a row for get_paged_slice
    (CASSANDRA-4919)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/309666b4/src/java/org/apache/cassandra/service/AntiEntropyService.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/AntiEntropyService.java b/src/java/org/apache/cassandra/service/AntiEntropyService.java
index a7fa157..9f97f95 100644
--- a/src/java/org/apache/cassandra/service/AntiEntropyService.java
+++ b/src/java/org/apache/cassandra/service/AntiEntropyService.java
@@ -115,10 +115,15 @@ public class AntiEntropyService
 
     /**
      * Requests repairs for the given table and column families, and blocks until all repairs
have been completed.
+     *
+     * @return Future for asynchronous call or null if there is no need to repair
      */
     public RepairFuture submitRepairSession(Range<Token> range, String tablename, boolean
isSequential, boolean isLocal, String... cfnames)
     {
-        RepairFuture futureTask = new RepairSession(range, tablename, isSequential, isLocal,
cfnames).getFuture();
+        RepairSession session = new RepairSession(range, tablename, isSequential, isLocal,
cfnames);
+        if (session.endpoints.isEmpty())
+            return null;
+        RepairFuture futureTask = session.getFuture();
         executor.execute(futureTask);
         return futureTask;
     }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/309666b4/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 0e6fd30..0206f40 100644
--- a/src/java/org/apache/cassandra/service/StorageService.java
+++ b/src/java/org/apache/cassandra/service/StorageService.java
@@ -2223,10 +2223,29 @@ public class StorageService implements IEndpointStateChangeSubscriber,
StorageSe
      */
     public void forceTableRepair(final String tableName, boolean isSequential, boolean  isLocal,
final String... columnFamilies) throws IOException
     {
-        if (Table.SYSTEM_KS.equals(tableName))
+        forceTableRepairRange(tableName, getLocalRanges(tableName), isSequential, isLocal,
columnFamilies);
+    }
+
+    public void forceTableRepairPrimaryRange(final String tableName, boolean isSequential,
boolean  isLocal, final String... columnFamilies) throws IOException
+    {
+        forceTableRepairRange(tableName, getLocalPrimaryRanges(), isSequential, isLocal,
columnFamilies);
+    }
+
+    public void forceTableRepairRange(String beginToken, String endToken, final String tableName,
boolean isSequential, boolean  isLocal, final String... columnFamilies) throws IOException
+    {
+        Token parsedBeginToken = getPartitioner().getTokenFactory().fromString(beginToken);
+        Token parsedEndToken = getPartitioner().getTokenFactory().fromString(endToken);
+
+        logger.info("starting user-requested repair of range ({}, {}] for keyspace {} and
column families {}",
+                    parsedBeginToken, parsedEndToken, tableName, columnFamilies);
+        forceTableRepairRange(tableName, Collections.singleton(new Range<Token>(parsedBeginToken,
parsedEndToken)), isSequential, isLocal, columnFamilies);
+    }
+
+    public void forceTableRepairRange(final String tableName, final Collection<Range<Token>>
ranges, boolean isSequential, boolean  isLocal, final String... columnFamilies) throws IOException
+    {
+        if (Table.SYSTEM_KS.equals(tableName) || Tracing.TRACE_KS.equals(tableName))
             return;
 
-        Collection<Range<Token>> ranges = getLocalRanges(tableName);
         int cmd = nextRepairCommand.incrementAndGet();
         logger.info("Starting repair command #{}, repairing {} ranges.", cmd, ranges.size());
 
@@ -2247,6 +2266,11 @@ public class StorageService implements IEndpointStateChangeSubscriber,
StorageSe
                 logger.error("Interrupted while waiting for the differencing of repair session
" + future.session + " to be done. Repair may be imprecise.", e);
             }
         }
+        if (futures.isEmpty())
+        {
+            logger.info("Nothing to repair on {} for command #{}", tableName, cmd);
+            return;
+        }
 
         boolean failedSession = false;
 
@@ -2270,47 +2294,6 @@ public class StorageService implements IEndpointStateChangeSubscriber,
StorageSe
             logger.info("Repair command #{} completed successfully", cmd);
     }
 
-    public void forceTableRepairPrimaryRange(final String tableName, boolean isSequential,
boolean  isLocal, final String... columnFamilies) throws IOException
-    {
-        if (Table.SYSTEM_KS.equals(tableName))
-            return;
-
-        List<AntiEntropyService.RepairFuture> futures = new ArrayList<AntiEntropyService.RepairFuture>();
-        for (Range<Token> range : getLocalPrimaryRanges())
-        {
-            RepairFuture future = forceTableRepair(range, tableName, isSequential, isLocal,
columnFamilies);
-            if (future != null)
-                futures.add(future);
-        }
-        if (futures.isEmpty())
-            return;
-        for (AntiEntropyService.RepairFuture future : futures)
-            FBUtilities.waitOnFuture(future);
-    }
-
-    public void forceTableRepairRange(String beginToken, String endToken, final String tableName,
boolean isSequential, boolean  isLocal, final String... columnFamilies) throws IOException
-    {
-        if (Table.SYSTEM_KS.equals(tableName))
-            return;
-
-        Token parsedBeginToken = getPartitioner().getTokenFactory().fromString(beginToken);
-        Token parsedEndToken = getPartitioner().getTokenFactory().fromString(endToken);
-
-        logger.info("starting user-requested repair of range ({}, {}] for keyspace {} and
column families {}",
-                     new Object[] {parsedBeginToken, parsedEndToken, tableName, columnFamilies});
-        AntiEntropyService.RepairFuture future = forceTableRepair(new Range<Token>(parsedBeginToken,
parsedEndToken), tableName, isSequential, isLocal, columnFamilies);
-        if (future == null)
-            return;
-        try
-        {
-            future.get();
-        }
-        catch (Exception e)
-        {
-            logger.error("Repair session " + future.session.getName() + " failed.", e);
-        }
-    }
-
     public AntiEntropyService.RepairFuture forceTableRepair(final Range<Token> range,
final String tableName, boolean isSequential, boolean  isLocal, final String... columnFamilies)
throws IOException
     {
         ArrayList<String> names = new ArrayList<String>();


Mime
View raw message