Repository: cassandra
Updated Branches:
  refs/heads/trunk 231a93706 -> 338b3e643


Add column definition kind to dropped columns in schema

Patch by Stefania Alborghetti; reviewed by Aleksey Yeschenko for CASSANDRA-12705


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

Branch: refs/heads/trunk
Commit: 338b3e6438de321275122e09670c7567ea0c9820
Parents: 231a937
Author: Stefania Alborghetti <[email protected]>
Authored: Fri Sep 23 17:25:13 2016 +0800
Committer: Stefania Alborghetti <[email protected]>
Committed: Wed Oct 12 09:28:46 2016 +0800

----------------------------------------------------------------------
 CHANGES.txt                                           |  1 +
 src/java/org/apache/cassandra/config/CFMetaData.java  | 14 +++++++++++---
 .../org/apache/cassandra/config/ColumnDefinition.java |  5 ++++-
 .../apache/cassandra/schema/LegacySchemaMigrator.java |  2 +-
 .../org/apache/cassandra/schema/SchemaKeyspace.java   | 11 +++++++++--
 5 files changed, 26 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/338b3e64/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 7f5b7cb..69f7e42 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 4.0
+ * Add column definition kind to dropped columns in schema (CASSANDRA-12705)
  * Add (automate) Nodetool Documentation (CASSANDRA-12672)
  * Update bundled cqlsh python driver to 3.7.0 (CASSANDRA-12736)
  * Reject invalid replication settings when creating or altering a keyspace 
(CASSANDRA-12681)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/338b3e64/src/java/org/apache/cassandra/config/CFMetaData.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/config/CFMetaData.java 
b/src/java/org/apache/cassandra/config/CFMetaData.java
index 76a3ead..a60700c 100644
--- a/src/java/org/apache/cassandra/config/CFMetaData.java
+++ b/src/java/org/apache/cassandra/config/CFMetaData.java
@@ -712,7 +712,7 @@ public final class CFMetaData
         // it means that it's a dropped column from before 3.0, and in that 
case using
         // BytesType is fine for what we'll be using it for, even if that's a 
hack.
         AbstractType<?> type = dropped.type == null ? BytesType.instance : 
dropped.type;
-        return isStatic
+        return isStatic || dropped.kind == ColumnDefinition.Kind.STATIC
                ? ColumnDefinition.staticDef(this, name, type)
                : ColumnDefinition.regularDef(this, name, type);
     }
@@ -994,7 +994,7 @@ public final class CFMetaData
      */
     public void recordColumnDrop(ColumnDefinition def, long timeMicros)
     {
-        droppedColumns.put(def.name.bytes, new 
DroppedColumn(def.name.toString(), def.type, timeMicros));
+        droppedColumns.put(def.name.bytes, new DroppedColumn(def, timeMicros));
     }
 
     public void renameColumn(ColumnIdentifier from, ColumnIdentifier to) 
throws InvalidRequestException
@@ -1379,11 +1379,19 @@ public final class CFMetaData
         // drop timestamp, in microseconds, yet with millisecond granularity
         public final long droppedTime;
 
-        public DroppedColumn(String name, AbstractType<?> type, long 
droppedTime)
+        public final ColumnDefinition.Kind kind;
+
+        public DroppedColumn(ColumnDefinition def, long droppedTime)
+        {
+            this(def.name.toString(), def.type, droppedTime, def.kind);
+        }
+
+        public DroppedColumn(String name, AbstractType<?> type, long 
droppedTime, ColumnDefinition.Kind kind)
         {
             this.name = name;
             this.type = type;
             this.droppedTime = droppedTime;
+            this.kind = kind;
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/cassandra/blob/338b3e64/src/java/org/apache/cassandra/config/ColumnDefinition.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/config/ColumnDefinition.java 
b/src/java/org/apache/cassandra/config/ColumnDefinition.java
index 6044ee9..9e6d9ec 100644
--- a/src/java/org/apache/cassandra/config/ColumnDefinition.java
+++ b/src/java/org/apache/cassandra/config/ColumnDefinition.java
@@ -48,7 +48,7 @@ public class ColumnDefinition extends ColumnSpecification 
implements Selectable,
         ASC, DESC, NONE
     }
 
-    /*
+    /**
      * The type of CQL3 column this definition represents.
      * There is 4 main type of CQL3 columns: those parts of the partition key,
      * those parts of the clustering columns and amongst the others, regular 
and
@@ -56,6 +56,9 @@ public class ColumnDefinition extends ColumnSpecification 
implements Selectable,
      *
      * Note that thrift only knows about definitions of type REGULAR (and
      * the ones whose position == NO_POSITION (-1)).
+     *
+     * IMPORTANT: this enum is serialized as toString() and deserialized by 
calling
+     * Kind.valueOf(), so do not override toString() or rename existing values.
      */
     public enum Kind
     {

http://git-wip-us.apache.org/repos/asf/cassandra/blob/338b3e64/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 19844a3..d0fc151 100644
--- a/src/java/org/apache/cassandra/schema/LegacySchemaMigrator.java
+++ b/src/java/org/apache/cassandra/schema/LegacySchemaMigrator.java
@@ -648,7 +648,7 @@ public final class LegacySchemaMigrator
                                  ? collections.get(nameBytes)
                                  : BytesType.instance;
 
-            cfm.getDroppedColumns().put(nameBytes, new 
CFMetaData.DroppedColumn(name, type, time));
+            cfm.getDroppedColumns().put(nameBytes, new 
CFMetaData.DroppedColumn(name, type, time, ColumnDefinition.Kind.REGULAR));
         }
     }
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/338b3e64/src/java/org/apache/cassandra/schema/SchemaKeyspace.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/schema/SchemaKeyspace.java 
b/src/java/org/apache/cassandra/schema/SchemaKeyspace.java
index f1ee3c1..f02e3e7 100644
--- a/src/java/org/apache/cassandra/schema/SchemaKeyspace.java
+++ b/src/java/org/apache/cassandra/schema/SchemaKeyspace.java
@@ -141,6 +141,7 @@ public final class SchemaKeyspace
                 + "column_name text,"
                 + "dropped_time timestamp,"
                 + "type text,"
+                + "kind text,"
                 + "PRIMARY KEY ((keyspace_name), table_name, column_name))");
 
     private static final CFMetaData Triggers =
@@ -664,7 +665,8 @@ public final class SchemaKeyspace
         builder.update(DroppedColumns)
                .row(table.cfName, column.name)
                .add("dropped_time", new 
Date(TimeUnit.MICROSECONDS.toMillis(column.droppedTime)))
-               .add("type", 
expandUserTypes(column.type).asCQL3Type().toString());
+               .add("type", 
expandUserTypes(column.type).asCQL3Type().toString())
+               .add("kind", column.kind.toString().toLowerCase());
     }
 
     private static void addTriggerToSchemaMutation(CFMetaData table, 
TriggerMetadata trigger, Mutation.SimpleBuilder builder)
@@ -1068,7 +1070,12 @@ public final class SchemaKeyspace
          */
         AbstractType<?> type = parse(keyspace, row.getString("type"), 
org.apache.cassandra.schema.Types.none());
         long droppedTime = 
TimeUnit.MILLISECONDS.toMicros(row.getLong("dropped_time"));
-        return new CFMetaData.DroppedColumn(name, type, droppedTime);
+        ColumnDefinition.Kind kind = row.has("kind")
+                                     ? 
ColumnDefinition.Kind.valueOf(row.getString("kind").toUpperCase())
+                                     : ColumnDefinition.Kind.REGULAR;
+        assert kind == ColumnDefinition.Kind.REGULAR || kind == 
ColumnDefinition.Kind.STATIC
+            : "Unexpected dropped column kind: " + kind.toString();
+        return new CFMetaData.DroppedColumn(name, type, droppedTime, kind);
     }
 
     private static Indexes fetchIndexes(String keyspace, String table)

Reply via email to