Repository: cassandra Updated Branches: refs/heads/cassandra-2.2 afa456386 -> 505a03c77 refs/heads/cassandra-3.0 4f3a6feb2 -> 1816520d6 refs/heads/cassandra-3.11 2edd6fd2e -> 27c53b526 refs/heads/trunk b871decba -> d414c1cd8
MigrationManager attempts to pull schema from different major version nodes Patch by Ariel Weisberg; Reviewed by Dinesh Joshi for CASSANDRA-14928 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/505a03c7 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/505a03c7 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/505a03c7 Branch: refs/heads/cassandra-2.2 Commit: 505a03c77764351e1b649e8c7d73d0421e7bcc13 Parents: afa4563 Author: Ariel Weisberg <aweisb...@apple.com> Authored: Mon Dec 10 15:50:19 2018 -0500 Committer: Ariel Weisberg <aweisb...@apple.com> Committed: Thu Dec 13 12:27:26 2018 -0500 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../apache/cassandra/service/MigrationManager.java | 11 +++++++++-- src/java/org/apache/cassandra/utils/FBUtilities.java | 14 +++++++++++++- 3 files changed, 23 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/505a03c7/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index b989f3c..58309fa 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.2.14 + * MigrationManager attempts to pull schema from different major version nodes (CASSANDRA-14928) * Don't skip entire sstables when reading backwards with mixed clustering column order (CASSANDRA-14910) * Cannot perform slice reads in reverse direction against tables with clustering columns http://git-wip-us.apache.org/repos/asf/cassandra/blob/505a03c7/src/java/org/apache/cassandra/service/MigrationManager.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/service/MigrationManager.java b/src/java/org/apache/cassandra/service/MigrationManager.java index 4cb5ed7..d025196 100644 --- a/src/java/org/apache/cassandra/service/MigrationManager.java +++ b/src/java/org/apache/cassandra/service/MigrationManager.java @@ -82,15 +82,22 @@ public class MigrationManager VersionedValue value = state.getApplicationState(ApplicationState.SCHEMA); if (!endpoint.equals(FBUtilities.getBroadcastAddress()) && value != null) - maybeScheduleSchemaPull(UUID.fromString(value.value), endpoint); + maybeScheduleSchemaPull(UUID.fromString(value.value), endpoint, state.getApplicationState(ApplicationState.RELEASE_VERSION).value); } /** * If versions differ this node sends request with local migration list to the endpoint * and expecting to receive a list of migrations to apply locally. */ - private static void maybeScheduleSchemaPull(final UUID theirVersion, final InetAddress endpoint) + private static void maybeScheduleSchemaPull(final UUID theirVersion, final InetAddress endpoint, String releaseVersion) { + String ourMajorVersion = FBUtilities.getReleaseVersionMajor(); + if (!releaseVersion.startsWith(ourMajorVersion)) + { + logger.debug("Not pulling schema because release version in Gossip is not major version {}, it is {}", ourMajorVersion, releaseVersion); + return; + } + if ((Schema.instance.getVersion() != null && Schema.instance.getVersion().equals(theirVersion)) || !shouldPullSchemaFrom(endpoint)) { logger.debug("Not pulling schema because versions match or shouldPullSchemaFrom returned false"); http://git-wip-us.apache.org/repos/asf/cassandra/blob/505a03c7/src/java/org/apache/cassandra/utils/FBUtilities.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/utils/FBUtilities.java b/src/java/org/apache/cassandra/utils/FBUtilities.java index 23a2c2e..8492fed 100644 --- a/src/java/org/apache/cassandra/utils/FBUtilities.java +++ b/src/java/org/apache/cassandra/utils/FBUtilities.java @@ -66,6 +66,8 @@ public class FBUtilities private static final ObjectMapper jsonMapper = new ObjectMapper(new JsonFactory()); + public static final String UNKNOWN_RELEASE_VERSION = "Unknown"; + public static final BigInteger TWO = new BigInteger("2"); private static final String DEFAULT_TRIGGER_DIR = "triggers"; @@ -343,7 +345,7 @@ public class FBUtilities { if (in == null) { - return System.getProperty("cassandra.releaseVersion", "Unknown"); + return System.getProperty("cassandra.releaseVersion", UNKNOWN_RELEASE_VERSION); } Properties props = new Properties(); props.load(in); @@ -357,6 +359,16 @@ public class FBUtilities } } + public static String getReleaseVersionMajor() + { + String releaseVersion = FBUtilities.getReleaseVersionString(); + if (FBUtilities.UNKNOWN_RELEASE_VERSION.equals(releaseVersion)) + { + throw new AssertionError("Release version is unknown"); + } + return releaseVersion.substring(0, releaseVersion.indexOf('.')); + } + public static long timestampMicros() { // we use microsecond resolution for compatibility with other client libraries, even though --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org