You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by yu...@apache.org on 2014/05/12 19:39:07 UTC

[1/3] git commit: Fix repair hang when given CF does not exist

Repository: cassandra
Updated Branches:
  refs/heads/cassandra-2.1 7b398c52d -> 359de196f
  refs/heads/trunk c807b42d7 -> 74c49b65e


Fix repair hang when given CF does not exist

patch by yukim; reviewed by krummas for CASSANDRA-7189


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

Branch: refs/heads/cassandra-2.1
Commit: 359de196f1d7a8f9193d0e977b57ce5d846b9f01
Parents: 7b398c5
Author: Yuki Morishita <yu...@apache.org>
Authored: Mon May 12 12:36:35 2014 -0500
Committer: Yuki Morishita <yu...@apache.org>
Committed: Mon May 12 12:36:35 2014 -0500

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../cassandra/service/StorageService.java       | 46 ++++++--------------
 2 files changed, 14 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/359de196/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index e307843..58c6277 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -8,6 +8,7 @@
  * Cleanup and optimize collation and slice iterators (CASSANDRA-7107)
  * Upgrade NBHM lib (CASSANDRA-7128)
  * Optimize netty server (CASSANDRA-6861)
+ * Fix repair hang when given CF does not exist (CASSANDRA-7189)
 Merged from 2.0:
  * Correctly delete scheduled range xfers (CASSANDRA-7143)
  * Make batchlog replica selection rack-aware (CASSANDRA-6551)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/359de196/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 f1e853a..68257bb 100644
--- a/src/java/org/apache/cassandra/service/StorageService.java
+++ b/src/java/org/apache/cassandra/service/StorageService.java
@@ -2444,6 +2444,7 @@ public class StorageService extends NotificationBroadcasterSupport implements IE
      * @param autoAddIndexes Automatically add secondary indexes if a CF has them
      * @param keyspaceName keyspace
      * @param cfNames CFs
+     * @throws java.lang.IllegalArgumentException when given CF name does not exist
      */
     public Iterable<ColumnFamilyStore> getValidColumnFamilies(boolean allowIndexes, boolean autoAddIndexes, String keyspaceName, String... cfNames) throws IOException
     {
@@ -2490,12 +2491,6 @@ public class StorageService extends NotificationBroadcasterSupport implements IE
             }
 
             ColumnFamilyStore cfStore = keyspace.getColumnFamilyStore(baseCfName);
-            if (cfStore == null)
-            {
-                // this means there was a cf passed in that is not recognized in the keyspace. report it and continue.
-                logger.warn(String.format("Invalid column family specified: %s. Proceeding with others.", baseCfName));
-                continue;
-            }
             if (idxName != null)
             {
                 Collection< SecondaryIndex > indexes = cfStore.indexManager.getIndexesByNames(new HashSet<>(Arrays.asList(cfName)));
@@ -2673,14 +2668,22 @@ public class StorageService extends NotificationBroadcasterSupport implements IE
                     catch (IllegalArgumentException e)
                     {
                         logger.error("Repair failed:", e);
-                        sendNotification("repair", message, new int[]{cmd, ActiveRepairService.Status.FINISHED.ordinal()});
+                        sendNotification("repair", e.getMessage(), new int[]{cmd, ActiveRepairService.Status.FINISHED.ordinal()});
                         return;
                     }
                 }
 
+                // Validate columnfamilies
                 List<ColumnFamilyStore> columnFamilyStores = new ArrayList<>();
-                for (ColumnFamilyStore cfs : getValidColumnFamilies(false, false, keyspace, columnFamilies))
-                    columnFamilyStores.add(cfs);
+                try
+                {
+                    Iterables.addAll(columnFamilyStores, getValidColumnFamilies(false, false, keyspace, columnFamilies));
+                }
+                catch (IllegalArgumentException e)
+                {
+                    sendNotification("repair", e.getMessage(), new int[]{cmd, ActiveRepairService.Status.FINISHED.ordinal()});
+                    return;
+                }
 
                 UUID parentSession = null;
                 if (!fullRepair)
@@ -2699,7 +2702,7 @@ public class StorageService extends NotificationBroadcasterSupport implements IE
                 List<RepairFuture> futures = new ArrayList<>(ranges.size());
                 for (Range<Token> range : ranges)
                 {
-                    RepairFuture future = forceKeyspaceRepair(parentSession, range, keyspace, isSequential, rangeToNeighbors.get(range), columnFamilies);
+                    RepairFuture future = ActiveRepairService.instance.submitRepairSession(parentSession, range, keyspace, isSequential, rangeToNeighbors.get(range), columnFamilies);
                     if (future == null)
                         continue;
                     futures.add(future);
@@ -2745,29 +2748,6 @@ public class StorageService extends NotificationBroadcasterSupport implements IE
         }, null);
     }
 
-
-    public RepairFuture forceKeyspaceRepair(UUID parentRepairSession,
-                                            Range<Token> range,
-                                            String keyspaceName,
-                                            boolean isSequential,
-                                            Set<InetAddress> endpoints,
-                                            String ... columnFamilies) throws IOException
-    {
-        ArrayList<String> names = new ArrayList<>();
-        for (ColumnFamilyStore cfStore : getValidColumnFamilies(false, false, keyspaceName, columnFamilies))
-        {
-            names.add(cfStore.name);
-        }
-
-        if (names.isEmpty())
-        {
-            logger.info("No column family to repair for keyspace {}", keyspaceName);
-            return null;
-        }
-
-        return ActiveRepairService.instance.submitRepairSession(parentRepairSession, range, keyspaceName, isSequential, endpoints, names.toArray(new String[names.size()]));
-    }
-
     public void forceTerminateAllRepairSessions() {
         ActiveRepairService.instance.terminateSessions();
     }


[3/3] git commit: Merge branch 'cassandra-2.1' into trunk

Posted by yu...@apache.org.
Merge branch 'cassandra-2.1' into trunk


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

Branch: refs/heads/trunk
Commit: 74c49b65e362831c5e1382dd124df9bf855bd0cf
Parents: c807b42 359de19
Author: Yuki Morishita <yu...@apache.org>
Authored: Mon May 12 12:37:08 2014 -0500
Committer: Yuki Morishita <yu...@apache.org>
Committed: Mon May 12 12:37:08 2014 -0500

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../cassandra/service/StorageService.java       | 46 ++++++--------------
 2 files changed, 14 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/74c49b65/CHANGES.txt
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/74c49b65/src/java/org/apache/cassandra/service/StorageService.java
----------------------------------------------------------------------


[2/3] git commit: Fix repair hang when given CF does not exist

Posted by yu...@apache.org.
Fix repair hang when given CF does not exist

patch by yukim; reviewed by krummas for CASSANDRA-7189


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

Branch: refs/heads/trunk
Commit: 359de196f1d7a8f9193d0e977b57ce5d846b9f01
Parents: 7b398c5
Author: Yuki Morishita <yu...@apache.org>
Authored: Mon May 12 12:36:35 2014 -0500
Committer: Yuki Morishita <yu...@apache.org>
Committed: Mon May 12 12:36:35 2014 -0500

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../cassandra/service/StorageService.java       | 46 ++++++--------------
 2 files changed, 14 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/359de196/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index e307843..58c6277 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -8,6 +8,7 @@
  * Cleanup and optimize collation and slice iterators (CASSANDRA-7107)
  * Upgrade NBHM lib (CASSANDRA-7128)
  * Optimize netty server (CASSANDRA-6861)
+ * Fix repair hang when given CF does not exist (CASSANDRA-7189)
 Merged from 2.0:
  * Correctly delete scheduled range xfers (CASSANDRA-7143)
  * Make batchlog replica selection rack-aware (CASSANDRA-6551)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/359de196/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 f1e853a..68257bb 100644
--- a/src/java/org/apache/cassandra/service/StorageService.java
+++ b/src/java/org/apache/cassandra/service/StorageService.java
@@ -2444,6 +2444,7 @@ public class StorageService extends NotificationBroadcasterSupport implements IE
      * @param autoAddIndexes Automatically add secondary indexes if a CF has them
      * @param keyspaceName keyspace
      * @param cfNames CFs
+     * @throws java.lang.IllegalArgumentException when given CF name does not exist
      */
     public Iterable<ColumnFamilyStore> getValidColumnFamilies(boolean allowIndexes, boolean autoAddIndexes, String keyspaceName, String... cfNames) throws IOException
     {
@@ -2490,12 +2491,6 @@ public class StorageService extends NotificationBroadcasterSupport implements IE
             }
 
             ColumnFamilyStore cfStore = keyspace.getColumnFamilyStore(baseCfName);
-            if (cfStore == null)
-            {
-                // this means there was a cf passed in that is not recognized in the keyspace. report it and continue.
-                logger.warn(String.format("Invalid column family specified: %s. Proceeding with others.", baseCfName));
-                continue;
-            }
             if (idxName != null)
             {
                 Collection< SecondaryIndex > indexes = cfStore.indexManager.getIndexesByNames(new HashSet<>(Arrays.asList(cfName)));
@@ -2673,14 +2668,22 @@ public class StorageService extends NotificationBroadcasterSupport implements IE
                     catch (IllegalArgumentException e)
                     {
                         logger.error("Repair failed:", e);
-                        sendNotification("repair", message, new int[]{cmd, ActiveRepairService.Status.FINISHED.ordinal()});
+                        sendNotification("repair", e.getMessage(), new int[]{cmd, ActiveRepairService.Status.FINISHED.ordinal()});
                         return;
                     }
                 }
 
+                // Validate columnfamilies
                 List<ColumnFamilyStore> columnFamilyStores = new ArrayList<>();
-                for (ColumnFamilyStore cfs : getValidColumnFamilies(false, false, keyspace, columnFamilies))
-                    columnFamilyStores.add(cfs);
+                try
+                {
+                    Iterables.addAll(columnFamilyStores, getValidColumnFamilies(false, false, keyspace, columnFamilies));
+                }
+                catch (IllegalArgumentException e)
+                {
+                    sendNotification("repair", e.getMessage(), new int[]{cmd, ActiveRepairService.Status.FINISHED.ordinal()});
+                    return;
+                }
 
                 UUID parentSession = null;
                 if (!fullRepair)
@@ -2699,7 +2702,7 @@ public class StorageService extends NotificationBroadcasterSupport implements IE
                 List<RepairFuture> futures = new ArrayList<>(ranges.size());
                 for (Range<Token> range : ranges)
                 {
-                    RepairFuture future = forceKeyspaceRepair(parentSession, range, keyspace, isSequential, rangeToNeighbors.get(range), columnFamilies);
+                    RepairFuture future = ActiveRepairService.instance.submitRepairSession(parentSession, range, keyspace, isSequential, rangeToNeighbors.get(range), columnFamilies);
                     if (future == null)
                         continue;
                     futures.add(future);
@@ -2745,29 +2748,6 @@ public class StorageService extends NotificationBroadcasterSupport implements IE
         }, null);
     }
 
-
-    public RepairFuture forceKeyspaceRepair(UUID parentRepairSession,
-                                            Range<Token> range,
-                                            String keyspaceName,
-                                            boolean isSequential,
-                                            Set<InetAddress> endpoints,
-                                            String ... columnFamilies) throws IOException
-    {
-        ArrayList<String> names = new ArrayList<>();
-        for (ColumnFamilyStore cfStore : getValidColumnFamilies(false, false, keyspaceName, columnFamilies))
-        {
-            names.add(cfStore.name);
-        }
-
-        if (names.isEmpty())
-        {
-            logger.info("No column family to repair for keyspace {}", keyspaceName);
-            return null;
-        }
-
-        return ActiveRepairService.instance.submitRepairSession(parentRepairSession, range, keyspaceName, isSequential, endpoints, names.toArray(new String[names.size()]));
-    }
-
     public void forceTerminateAllRepairSessions() {
         ActiveRepairService.instance.terminateSessions();
     }