Fix upgrading schema with super columns with non-text subcomparators

patch by Aleksey Yeschenko; reviewed by Jeremiah Jordan for
CASSANDRA-12023


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

Branch: refs/heads/trunk
Commit: b671522d008017bc46e48ffee4c43375d96c4f26
Parents: 0a0e97d
Author: Aleksey Yeschenko <[email protected]>
Authored: Mon Jun 20 16:06:56 2016 +0100
Committer: Aleksey Yeschenko <[email protected]>
Committed: Mon Jun 20 18:04:56 2016 +0100

----------------------------------------------------------------------
 CHANGES.txt                                              |  1 +
 src/java/org/apache/cassandra/db/CompactTables.java      | 11 +++++++----
 .../apache/cassandra/schema/LegacySchemaMigrator.java    |  6 ++++--
 3 files changed, 12 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/b671522d/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 7873742..cc682c4 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 3.0.8
+ * Fix upgrading schema with super columns with non-text subcomparators 
(CASSANDRA-12023)
  * Add TimeWindowCompactionStrategy (CASSANDRA-9666)
 Merged from 2.2:
  * Don't send erroneous NEW_NODE notifications on restart (CASSANDRA-11038)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b671522d/src/java/org/apache/cassandra/db/CompactTables.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/CompactTables.java 
b/src/java/org/apache/cassandra/db/CompactTables.java
index a72e7f2..a73b865 100644
--- a/src/java/org/apache/cassandra/db/CompactTables.java
+++ b/src/java/org/apache/cassandra/db/CompactTables.java
@@ -91,12 +91,15 @@ public abstract class CompactTables
         return columns.regulars.getSimple(0);
     }
 
-    public static AbstractType<?> 
columnDefinitionComparator(ColumnDefinition.Kind kind, boolean isSuper, 
AbstractType<?> rawComparator, AbstractType<?> rawSubComparator)
+    public static AbstractType<?> columnDefinitionComparator(String kind, 
boolean isSuper, AbstractType<?> rawComparator, AbstractType<?> 
rawSubComparator)
     {
+        if ("compact_value".equals(kind))
+            return UTF8Type.instance;
+
         if (isSuper)
-            return kind == ColumnDefinition.Kind.REGULAR ? rawSubComparator : 
UTF8Type.instance;
-        else
-            return kind == ColumnDefinition.Kind.STATIC ? rawComparator : 
UTF8Type.instance;
+            return "regular".equals(kind) ? rawSubComparator : 
UTF8Type.instance;
+
+        return "static".equals(kind) ? rawComparator : UTF8Type.instance;
     }
 
     public static boolean hasEmptyCompactValue(CFMetaData metadata)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b671522d/src/java/org/apache/cassandra/schema/LegacySchemaMigrator.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/schema/LegacySchemaMigrator.java 
b/src/java/org/apache/cassandra/schema/LegacySchemaMigrator.java
index 7411b93..924bd7a 100644
--- a/src/java/org/apache/cassandra/schema/LegacySchemaMigrator.java
+++ b/src/java/org/apache/cassandra/schema/LegacySchemaMigrator.java
@@ -662,7 +662,9 @@ public final class LegacySchemaMigrator
                                                               boolean 
isStaticCompactTable,
                                                               boolean 
needsUpgrade)
     {
-        ColumnDefinition.Kind kind = deserializeKind(row.getString("type"));
+        String rawKind = row.getString("type");
+
+        ColumnDefinition.Kind kind = deserializeKind(rawKind);
         if (needsUpgrade && isStaticCompactTable && kind == 
ColumnDefinition.Kind.REGULAR)
             kind = ColumnDefinition.Kind.STATIC;
 
@@ -678,7 +680,7 @@ public final class LegacySchemaMigrator
         // we need to use the comparator fromString method
         AbstractType<?> comparator = isCQLTable
                                      ? UTF8Type.instance
-                                     : 
CompactTables.columnDefinitionComparator(kind, isSuper, rawComparator, 
rawSubComparator);
+                                     : 
CompactTables.columnDefinitionComparator(rawKind, isSuper, rawComparator, 
rawSubComparator);
         ColumnIdentifier name = 
ColumnIdentifier.getInterned(comparator.fromString(row.getString("column_name")),
 comparator);
 
         AbstractType<?> validator = parseType(row.getString("validator"));

Reply via email to