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)
