Skip to content

Commit e1e39b0

Browse files
krummasbeobal
andcommitted
Refactor the way we check if a transformation is allowed to be committed during upgrades
Patch by marcuse and Sam Tunnicliffe; reviewed by Sam Tunnicliffe for CASSANDRA-21043 Co-authored-by: Sam Tunnicliffe <[email protected]>
1 parent 4ed54ec commit e1e39b0

File tree

54 files changed

+724
-264
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+724
-264
lines changed

CHANGES.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
5.1
22
* Improve isGossipOnlyMember and location lookup performance (CASSANDRA-21039)
3+
* Refactor the way we check if a transformation is allowed to be committed during upgrades (CASSANDRA-21043)
34
* Improve debug around paused and disabled compaction (CASSANDRA-20131,CASSANDRA-19728)
45
* DiskUsageBroadcaster does not update usageInfo on node replacement (CASSANDRA-21033)
56
* Reject PrepareJoin if tokens are already assigned (CASSANDRA-21006)

src/java/org/apache/cassandra/config/CassandraRelevantProperties.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -579,8 +579,6 @@ public enum CassandraRelevantProperties
579579
// transactional cluster metadata relevant properties
580580
// TODO: not a fan of being forced to prefix these to satisfy the alphabetic ordering constraint
581581
// but it makes sense to group logically related properties together
582-
583-
TCM_ALLOW_TRANSFORMATIONS_DURING_UPGRADES("cassandra.allow_transformations_during_upgrades", "false"),
584582
/**
585583
* for testing purposes disable the automatic CMS reconfiguration after a bootstrap/replace/move operation
586584
*/

src/java/org/apache/cassandra/cql3/statements/schema/AlterKeyspaceStatement.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import org.apache.cassandra.service.ClientState;
4646
import org.apache.cassandra.tcm.ClusterMetadata;
4747
import org.apache.cassandra.tcm.membership.NodeId;
48+
import org.apache.cassandra.tcm.serialization.Version;
4849
import org.apache.cassandra.transport.Event.SchemaChange;
4950
import org.apache.cassandra.transport.Event.SchemaChange.Change;
5051
import org.apache.cassandra.utils.FBUtilities;
@@ -69,6 +70,12 @@ public AlterKeyspaceStatement(String keyspaceName, KeyspaceAttributes attrs, boo
6970
this.ifExists = ifExists;
7071
}
7172

73+
@Override
74+
public boolean compatibleWith(ClusterMetadata metadata)
75+
{
76+
return metadata.directory.commonSerializationVersion.isAtLeast(Version.V0);
77+
}
78+
7279
public Keyspaces apply(ClusterMetadata metadata)
7380
{
7481
attrs.validate();

src/java/org/apache/cassandra/cql3/statements/schema/AlterTableStatement.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import com.google.common.base.Splitter;
3333
import com.google.common.base.Strings;
3434
import com.google.common.collect.ImmutableSet;
35+
import org.apache.cassandra.tcm.serialization.Version;
3536
import org.slf4j.Logger;
3637
import org.slf4j.LoggerFactory;
3738

@@ -176,6 +177,12 @@ public KeyspaceMetadata apply(Epoch epoch, KeyspaceMetadata keyspace, TableMetad
176177
{
177178
throw ire("Altering column types is no longer supported");
178179
}
180+
181+
@Override
182+
public boolean compatibleWith(ClusterMetadata metadata)
183+
{
184+
return metadata.directory.commonSerializationVersion.isAtLeast(Version.V0);
185+
}
179186
}
180187

181188
/**
@@ -211,6 +218,12 @@ public void validate(ClientState state)
211218
ColumnMask.ensureEnabled();
212219
}
213220

221+
@Override
222+
public boolean compatibleWith(ClusterMetadata metadata)
223+
{
224+
return metadata.directory.commonSerializationVersion.isAtLeast(Version.V0);
225+
}
226+
214227
@Override
215228
public KeyspaceMetadata apply(Epoch epoch, KeyspaceMetadata keyspace, TableMetadata table, ClusterMetadata metadata)
216229
{
@@ -301,6 +314,12 @@ public void validate(ClientState state)
301314
newColumns.forEach(c -> c.type.validate(state, "Column " + c.name));
302315
}
303316

317+
@Override
318+
public boolean compatibleWith(ClusterMetadata metadata)
319+
{
320+
return metadata.directory.commonSerializationVersion.isAtLeast(Version.V0);
321+
}
322+
304323
public KeyspaceMetadata apply(Epoch epoch, KeyspaceMetadata keyspace, TableMetadata table, ClusterMetadata metadata)
305324
{
306325
Guardrails.alterTableEnabled.ensureEnabled("ALTER TABLE changing columns", state);
@@ -461,6 +480,12 @@ public KeyspaceMetadata apply(Epoch epoch, KeyspaceMetadata keyspace, TableMetad
461480
return keyspace.withSwapped(keyspace.tables.withSwapped(builder.build()));
462481
}
463482

483+
@Override
484+
public boolean compatibleWith(ClusterMetadata metadata)
485+
{
486+
return metadata.directory.commonSerializationVersion.isAtLeast(Version.V0);
487+
}
488+
464489
private void dropColumn(KeyspaceMetadata keyspace, TableMetadata table, ColumnIdentifier column, boolean ifExists, TableMetadata.Builder builder)
465490
{
466491
ColumnMetadata currentColumn = table.getColumn(column);
@@ -522,6 +547,12 @@ private RenameColumns(String keyspaceName, String tableName, Map<ColumnIdentifie
522547
this.ifColumnsExists = ifColumnsExists;
523548
}
524549

550+
@Override
551+
public boolean compatibleWith(ClusterMetadata metadata)
552+
{
553+
return metadata.directory.commonSerializationVersion.isAtLeast(Version.V0);
554+
}
555+
525556
public KeyspaceMetadata apply(Epoch epoch, KeyspaceMetadata keyspace, TableMetadata table, ClusterMetadata metadata)
526557
{
527558
Guardrails.alterTableEnabled.ensureEnabled("ALTER TABLE changing columns", state);
@@ -640,6 +671,11 @@ private TableParams validateAndUpdateTransactionalMigration(boolean isCounter, T
640671
return next.unbuild().transactionalMigrationFrom(newMigrateFrom).build();
641672
}
642673

674+
@Override
675+
public boolean compatibleWith(ClusterMetadata metadata)
676+
{
677+
return metadata.directory.commonSerializationVersion.isAtLeast(Version.V0);
678+
}
643679

644680
public KeyspaceMetadata apply(Epoch epoch, KeyspaceMetadata keyspace, TableMetadata table, ClusterMetadata metadata)
645681
{
@@ -687,6 +723,12 @@ private DropCompactStorage(String keyspaceName, String tableName, boolean ifTabl
687723
super(keyspaceName, tableName, ifTableExists);
688724
}
689725

726+
@Override
727+
public boolean compatibleWith(ClusterMetadata metadata)
728+
{
729+
return metadata.directory.commonSerializationVersion.isAtLeast(Version.V0);
730+
}
731+
690732
public KeyspaceMetadata apply(Epoch epoch, KeyspaceMetadata keyspace, TableMetadata table, ClusterMetadata metadata)
691733
{
692734
if (!DatabaseDescriptor.enableDropCompactStorage())
@@ -816,6 +858,12 @@ public KeyspaceMetadata apply(Epoch epoch, KeyspaceMetadata keyspace, TableMetad
816858
}
817859
return keyspace;
818860
}
861+
862+
@Override
863+
public boolean compatibleWith(ClusterMetadata metadata)
864+
{
865+
return metadata.directory.commonSerializationVersion.isAtLeast(Version.V5);
866+
}
819867
}
820868

821869
public static final class Raw extends CQLStatement.Raw

src/java/org/apache/cassandra/cql3/statements/schema/AlterTypeStatement.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.apache.cassandra.schema.TableMetadata;
3636
import org.apache.cassandra.service.ClientState;
3737
import org.apache.cassandra.tcm.ClusterMetadata;
38+
import org.apache.cassandra.tcm.serialization.Version;
3839
import org.apache.cassandra.transport.Event.SchemaChange;
3940
import org.apache.cassandra.transport.Event.SchemaChange.Change;
4041
import org.apache.cassandra.transport.Event.SchemaChange.Target;
@@ -128,6 +129,12 @@ public void validate(ClientState state)
128129
this.state = state;
129130
}
130131

132+
@Override
133+
public boolean compatibleWith(ClusterMetadata metadata)
134+
{
135+
return metadata.directory.commonSerializationVersion.isAtLeast(Version.V0);
136+
}
137+
131138
UserType apply(KeyspaceMetadata keyspace, UserType userType)
132139
{
133140
if (type.isCounter())
@@ -186,6 +193,12 @@ private RenameFields(String keyspaceName, String typeName, Map<FieldIdentifier,
186193
this.renamedFields = renamedFields;
187194
}
188195

196+
@Override
197+
public boolean compatibleWith(ClusterMetadata metadata)
198+
{
199+
return metadata.directory.commonSerializationVersion.isAtLeast(Version.V0);
200+
}
201+
189202
UserType apply(KeyspaceMetadata keyspace, UserType userType)
190203
{
191204
List<String> dependentAggregates =
@@ -233,6 +246,12 @@ private AlterField(String keyspaceName, String typeName, boolean ifExists)
233246
super(keyspaceName, typeName, ifExists);
234247
}
235248

249+
@Override
250+
public boolean compatibleWith(ClusterMetadata metadata)
251+
{
252+
return metadata.directory.commonSerializationVersion.isAtLeast(Version.V0);
253+
}
254+
236255
UserType apply(KeyspaceMetadata keyspace, UserType userType)
237256
{
238257
throw ire("Altering field types is no longer supported");

src/java/org/apache/cassandra/cql3/statements/schema/AlterViewStatement.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.apache.cassandra.schema.Keyspaces.KeyspacesDiff;
2828
import org.apache.cassandra.service.ClientState;
2929
import org.apache.cassandra.tcm.ClusterMetadata;
30+
import org.apache.cassandra.tcm.serialization.Version;
3031
import org.apache.cassandra.transport.Event.SchemaChange;
3132
import org.apache.cassandra.transport.Event.SchemaChange.Change;
3233
import org.apache.cassandra.transport.Event.SchemaChange.Target;
@@ -55,6 +56,12 @@ public void validate(ClientState state)
5556
this.state = state;
5657
}
5758

59+
@Override
60+
public boolean compatibleWith(ClusterMetadata metadata)
61+
{
62+
return metadata.directory.commonSerializationVersion.isAtLeast(Version.V0);
63+
}
64+
5865
@Override
5966
public Keyspaces apply(ClusterMetadata metadata)
6067
{

src/java/org/apache/cassandra/cql3/statements/schema/CommentOnColumnStatement.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.apache.cassandra.schema.TableMetadata;
3131
import org.apache.cassandra.service.ClientState;
3232
import org.apache.cassandra.tcm.ClusterMetadata;
33+
import org.apache.cassandra.tcm.serialization.Version;
3334
import org.apache.cassandra.transport.Event.SchemaChange;
3435
import org.apache.cassandra.transport.Event.SchemaChange.Change;
3536
import org.apache.cassandra.transport.Event.SchemaChange.Target;
@@ -63,6 +64,13 @@ public CommentOnColumnStatement(String keyspaceName, String tableName, ColumnIde
6364
this.columnName = columnName;
6465
}
6566

67+
@Override
68+
public boolean compatibleWith(ClusterMetadata metadata)
69+
{
70+
return metadata.directory.commonSerializationVersion.isAtLeast(Version.V8);
71+
}
72+
73+
6674
@Override
6775
public Keyspaces apply(ClusterMetadata metadata)
6876
{

src/java/org/apache/cassandra/cql3/statements/schema/CommentOnKeyspaceStatement.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.apache.cassandra.schema.Keyspaces.KeyspacesDiff;
2828
import org.apache.cassandra.service.ClientState;
2929
import org.apache.cassandra.tcm.ClusterMetadata;
30+
import org.apache.cassandra.tcm.serialization.Version;
3031
import org.apache.cassandra.transport.Event.SchemaChange;
3132
import org.apache.cassandra.transport.Event.SchemaChange.Change;
3233

@@ -54,6 +55,12 @@ public CommentOnKeyspaceStatement(String keyspaceName, String comment)
5455
super(keyspaceName, comment, DescriptionType.COMMENT);
5556
}
5657

58+
@Override
59+
public boolean compatibleWith(ClusterMetadata metadata)
60+
{
61+
return metadata.directory.commonSerializationVersion.isAtLeast(Version.V8);
62+
}
63+
5764
@Override
5865
public Keyspaces apply(ClusterMetadata metadata)
5966
{

src/java/org/apache/cassandra/cql3/statements/schema/CommentOnTableStatement.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.apache.cassandra.schema.TableParams;
3030
import org.apache.cassandra.service.ClientState;
3131
import org.apache.cassandra.tcm.ClusterMetadata;
32+
import org.apache.cassandra.tcm.serialization.Version;
3233
import org.apache.cassandra.transport.Event.SchemaChange;
3334
import org.apache.cassandra.transport.Event.SchemaChange.Change;
3435
import org.apache.cassandra.transport.Event.SchemaChange.Target;
@@ -60,6 +61,12 @@ public CommentOnTableStatement(String keyspaceName, String tableName, String com
6061
this.tableName = tableName;
6162
}
6263

64+
@Override
65+
public boolean compatibleWith(ClusterMetadata metadata)
66+
{
67+
return metadata.directory.commonSerializationVersion.isAtLeast(Version.V8);
68+
}
69+
6370
@Override
6471
public Keyspaces apply(ClusterMetadata metadata)
6572
{

src/java/org/apache/cassandra/cql3/statements/schema/CommentOnUserTypeFieldStatement.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.apache.cassandra.schema.Keyspaces.KeyspacesDiff;
3030
import org.apache.cassandra.service.ClientState;
3131
import org.apache.cassandra.tcm.ClusterMetadata;
32+
import org.apache.cassandra.tcm.serialization.Version;
3233
import org.apache.cassandra.transport.Event.SchemaChange;
3334
import org.apache.cassandra.transport.Event.SchemaChange.Change;
3435
import org.apache.cassandra.transport.Event.SchemaChange.Target;
@@ -61,6 +62,12 @@ public CommentOnUserTypeFieldStatement(String keyspaceName, String typeName, Fie
6162
this.fieldName = fieldName;
6263
}
6364

65+
@Override
66+
public boolean compatibleWith(ClusterMetadata metadata)
67+
{
68+
return metadata.directory.commonSerializationVersion.isAtLeast(Version.V8);
69+
}
70+
6471
@Override
6572
public Keyspaces apply(ClusterMetadata metadata)
6673
{

0 commit comments

Comments
 (0)