mirror of https://github.com/apache/cassandra
Merge branch '12952-3.11' into 12952-trunk
This commit is contained in:
commit
0a9e9db99c
|
|
@ -107,6 +107,7 @@
|
|||
* Duplicate the buffer before passing it to analyser in SASI operation (CASSANDRA-13512)
|
||||
* Properly evict pstmts from prepared statements cache (CASSANDRA-13641)
|
||||
Merged from 3.0:
|
||||
* Fix ALTER TABLE statement to atomically propagate changes to the table and its MVs (CASSANDRA-12952)
|
||||
* Fixed ambiguous output of nodetool tablestats command (CASSANDRA-13722)
|
||||
* Fix Digest mismatch Exception if hints file has UnknownColumnFamily (CASSANDRA-13696)
|
||||
* Purge tombstones created by expired cells (CASSANDRA-13643)
|
||||
|
|
|
|||
|
|
@ -304,11 +304,7 @@ public class AlterTableStatement extends SchemaAlteringStatement
|
|||
break;
|
||||
}
|
||||
|
||||
// FIXME: Should really be a single announce for the table and views.
|
||||
MigrationManager.announceTableUpdate(builder.build(), isLocalOnly);
|
||||
for (ViewMetadata viewUpdate : viewUpdates)
|
||||
MigrationManager.announceViewUpdate(viewUpdate, isLocalOnly);
|
||||
|
||||
MigrationManager.announceTableUpdate(builder.build(), viewUpdates, isLocalOnly);
|
||||
return new Event.SchemaChange(Event.SchemaChange.Change.UPDATED, Event.SchemaChange.Target.TABLE, keyspace(), columnFamily());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -278,6 +278,11 @@ public class MigrationManager
|
|||
}
|
||||
|
||||
public static void announceTableUpdate(TableMetadata updated, boolean announceLocally) throws ConfigurationException
|
||||
{
|
||||
announceTableUpdate(updated, null, announceLocally);
|
||||
}
|
||||
|
||||
public static void announceTableUpdate(TableMetadata updated, Collection<ViewMetadata> views, boolean announceLocally) throws ConfigurationException
|
||||
{
|
||||
updated.validate();
|
||||
|
||||
|
|
@ -288,23 +293,38 @@ public class MigrationManager
|
|||
|
||||
current.validateCompatibility(updated);
|
||||
|
||||
long timestamp = FBUtilities.timestampMicros();
|
||||
|
||||
logger.info("Update table '{}/{}' From {} To {}", current.keyspace, current.name, current, updated);
|
||||
announce(SchemaKeyspace.makeUpdateTableMutation(ksm, current, updated, FBUtilities.timestampMicros()), announceLocally);
|
||||
Mutation.SimpleBuilder builder = SchemaKeyspace.makeUpdateTableMutation(ksm, current, updated, timestamp);
|
||||
|
||||
if (views != null)
|
||||
views.forEach(view -> addViewUpdateToMutationBuilder(view, builder));
|
||||
|
||||
announce(builder, announceLocally);
|
||||
}
|
||||
|
||||
public static void announceViewUpdate(ViewMetadata view, boolean announceLocally) throws ConfigurationException
|
||||
{
|
||||
KeyspaceMetadata ksm = Schema.instance.getKeyspaceMetadata(view.keyspace);
|
||||
long timestamp = FBUtilities.timestampMicros();
|
||||
Mutation.SimpleBuilder builder = SchemaKeyspace.makeCreateKeyspaceMutation(ksm.name, ksm.params, timestamp);
|
||||
addViewUpdateToMutationBuilder(view, builder);
|
||||
announce(builder, announceLocally);
|
||||
}
|
||||
|
||||
private static void addViewUpdateToMutationBuilder(ViewMetadata view, Mutation.SimpleBuilder builder)
|
||||
{
|
||||
view.metadata.validate();
|
||||
|
||||
ViewMetadata oldView = Schema.instance.getView(view.keyspace, view.name);
|
||||
if (oldView == null)
|
||||
throw new ConfigurationException(String.format("Cannot update non existing materialized view '%s' in keyspace '%s'.", view.name, view.keyspace));
|
||||
KeyspaceMetadata ksm = Schema.instance.getKeyspaceMetadata(view.keyspace);
|
||||
|
||||
oldView.metadata.validateCompatibility(view.metadata);
|
||||
|
||||
logger.info("Update view '{}/{}' From {} To {}", view.keyspace, view.name, oldView, view);
|
||||
announce(SchemaKeyspace.makeUpdateViewMutation(ksm, oldView, view, FBUtilities.timestampMicros()), announceLocally);
|
||||
SchemaKeyspace.makeUpdateViewMutation(builder, oldView, view);
|
||||
}
|
||||
|
||||
public static void announceTypeUpdate(UserType updatedType, boolean announceLocally)
|
||||
|
|
|
|||
|
|
@ -744,13 +744,10 @@ public final class SchemaKeyspace
|
|||
return builder;
|
||||
}
|
||||
|
||||
static Mutation.SimpleBuilder makeUpdateViewMutation(KeyspaceMetadata keyspace,
|
||||
public static Mutation.SimpleBuilder makeUpdateViewMutation(Mutation.SimpleBuilder builder,
|
||||
ViewMetadata oldView,
|
||||
ViewMetadata newView,
|
||||
long timestamp)
|
||||
ViewMetadata newView)
|
||||
{
|
||||
Mutation.SimpleBuilder builder = makeCreateKeyspaceMutation(keyspace.name, keyspace.params, timestamp);
|
||||
|
||||
addViewToSchemaMutation(newView, false, builder);
|
||||
|
||||
MapDifference<ByteBuffer, ColumnMetadata> columnDiff = Maps.difference(oldView.metadata.columns,
|
||||
|
|
|
|||
Loading…
Reference in New Issue