This is an automated email from the ASF dual-hosted git repository. bereng pushed a commit to branch cassandra-3.11 in repository https://gitbox.apache.org/repos/asf/cassandra.git
The following commit(s) were added to refs/heads/cassandra-3.11 by this push: new 23b61a5 Prevent broken concurrent schema pulls 23b61a5 is described below commit 23b61a5fa1de17cc6b8a1d7c300053160bfc728a Author: Bereng <berenguerbl...@gmail.com> AuthorDate: Mon Aug 16 07:46:33 2021 +0200 Prevent broken concurrent schema pulls patch by Dimitar Dimitrov and Berenguer Blasi; reviewed by Brandon Williams, Berenguer Blasi for CASSANDRA-16856 Co-authored-by: Dimitar Dimitrov <dmtrndm...@gmail.com> Co-authored-by: Berenguer Blasi <berenguerbl...@gmail.com> --- src/java/org/apache/cassandra/schema/SchemaKeyspace.java | 2 +- .../org/apache/cassandra/service/MigrationCoordinator.java | 1 + src/java/org/apache/cassandra/service/MigrationManager.java | 1 + .../org/apache/cassandra/schema/SchemaKeyspaceTest.java | 13 +++++++++++++ 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/java/org/apache/cassandra/schema/SchemaKeyspace.java b/src/java/org/apache/cassandra/schema/SchemaKeyspace.java index b852072..68c0b07 100644 --- a/src/java/org/apache/cassandra/schema/SchemaKeyspace.java +++ b/src/java/org/apache/cassandra/schema/SchemaKeyspace.java @@ -380,7 +380,7 @@ public final class SchemaKeyspace return PartitionRangeReadCommand.allDataRead(cfs.metadata, FBUtilities.nowInSeconds()); } - public static Collection<Mutation> convertSchemaToMutations() + public static synchronized Collection<Mutation> convertSchemaToMutations() { Map<DecoratedKey, Mutation> mutationMap = new HashMap<>(); diff --git a/src/java/org/apache/cassandra/service/MigrationCoordinator.java b/src/java/org/apache/cassandra/service/MigrationCoordinator.java index 10c7551..ce5f269 100644 --- a/src/java/org/apache/cassandra/service/MigrationCoordinator.java +++ b/src/java/org/apache/cassandra/service/MigrationCoordinator.java @@ -481,6 +481,7 @@ public class MigrationCoordinator { try { + logger.debug("Pulled schema from endpoint {};", endpoint); mergeSchemaFrom(endpoint, mutations); } catch (Exception e) diff --git a/src/java/org/apache/cassandra/service/MigrationManager.java b/src/java/org/apache/cassandra/service/MigrationManager.java index 8d8a0bd..21daef2 100644 --- a/src/java/org/apache/cassandra/service/MigrationManager.java +++ b/src/java/org/apache/cassandra/service/MigrationManager.java @@ -431,6 +431,7 @@ public class MigrationManager private static void pushSchemaMutation(InetAddress endpoint, Collection<Mutation> schema) { + logger.debug("Pushing schema to endpoint {}", endpoint); MessageOut<Collection<Mutation>> msg = new MessageOut<>(MessagingService.Verb.DEFINITIONS_UPDATE, schema, MigrationsSerializer.instance); diff --git a/test/unit/org/apache/cassandra/schema/SchemaKeyspaceTest.java b/test/unit/org/apache/cassandra/schema/SchemaKeyspaceTest.java index f3ee85d..19f06e5 100644 --- a/test/unit/org/apache/cassandra/schema/SchemaKeyspaceTest.java +++ b/test/unit/org/apache/cassandra/schema/SchemaKeyspaceTest.java @@ -19,6 +19,8 @@ package org.apache.cassandra.schema; import java.io.IOException; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Collection; @@ -92,6 +94,17 @@ public class SchemaKeyspaceTest SchemaLoader.standardCFMD(KEYSPACE1, CF_STANDARD1)); } + /** See CASSANDRA-16856. Make sure schema pulls are synchronized to prevent concurrent schema pull/writes + * + * @throws Exception + */ + @Test + public void testSchemaPullSynchoricity() throws Exception + { + Method method = SchemaKeyspace.class.getDeclaredMethod("convertSchemaToMutations"); + assertTrue(Modifier.isSynchronized(method.getModifiers())); + } + @Test public void testThriftConversion() throws Exception { --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org