[ https://issues.apache.org/jira/browse/CASSANDRA-18999?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17798298#comment-17798298 ]
Paulo Motta commented on CASSANDRA-18999: ----------------------------------------- {quote}I think we should keep some version of hasMajorVersion3Nodes still around, something like this: {quote} Where will this method be ever used if we're removing {{Gossiper::hasMajorVersion3Nodes}} and all references to it? There is no place in the code that requires checking if there are unknown nodes in gossip, except inside [upgradeFromVersionSupplier|https://github.com/apache/cassandra/blob/cassandra-5.0/src/java/org/apache/cassandra/gms/Gossiper.java#L219], where the check will be kept. {quote}I just dont understand that when the original version was dealing with unknown versions and it could evaluate that method as returning true, then us removing the unknown check will change behavior in 5.0 as well. {quote} As far as I understand the objective of hasMajorVersion3Nodes methods is to *not* do things when a cluster node is identified to be in version 3.x. It was not possible to know if a node with unknown version was on 3.x or not, so hasMajorVersion3Nodes returned true if a node version was not known (since it could potentially be a 3.x nodes). On 5.x we no longer need to identify if a node is on version 3.x since direct upgrade from 3.x is not supported, so there is no reason to keep hasMajorVersion3Nodes or hasUnknownNodes around. > Gossiper::hasMajorVersion3Nodes returns true when a cluster is upgrading > patch version without Cassandra 3 nodes. > ----------------------------------------------------------------------------------------------------------------- > > Key: CASSANDRA-18999 > URL: https://issues.apache.org/jira/browse/CASSANDRA-18999 > Project: Cassandra > Issue Type: Bug > Components: Legacy/Distributed Metadata > Reporter: Isaac Reath > Assignee: Isaac Reath > Priority: Low > Labels: lhf > Fix For: 4.0.x, 4.1.x, 5.0.x > > Time Spent: 0.5h > Remaining Estimate: 0h > > When working on https://issues.apache.org/jira/browse/CASSANDRA-18968 we > found that {{Gossiper::hasMajorVersion3Nodes}} will return true when the > cluster is undergoing an upgrade from a patch version even if the cluster has > no Cassandra 3 nodes in it. > This can be reproduced by running this Gossiper test: > {code:java} > @Test > public void > testHasVersion3NodesShouldReturnFalseWhenNoVersion3NodesDetectedAndCassandra4UpgradeInProgress() > throws Exception > { > Gossiper.instance.start(0); > Gossiper.instance.expireUpgradeFromVersion(); > VersionedValue.VersionedValueFactory factory = new > VersionedValue.VersionedValueFactory(null); > EndpointState es = new EndpointState((HeartBeatState) null); > es.addApplicationState(ApplicationState.RELEASE_VERSION, > factory.releaseVersion(CURRENT_VERSION.toString())); > > Gossiper.instance.endpointStateMap.put(InetAddressAndPort.getByName("127.0.0.1"), > es); > > Gossiper.instance.liveEndpoints.add(InetAddressAndPort.getByName("127.0.0.1")); > es = new EndpointState((HeartBeatState) null); > String previousPatchVersion = String.valueOf(CURRENT_VERSION.major) + > '.' + (CURRENT_VERSION.minor) + '.' + (CURRENT_VERSION.patch - 1); > es.addApplicationState(ApplicationState.RELEASE_VERSION, > factory.releaseVersion(previousPatchVersion)); > > Gossiper.instance.endpointStateMap.put(InetAddressAndPort.getByName("127.0.0.2"), > es); > > Gossiper.instance.liveEndpoints.add(InetAddressAndPort.getByName("127.0.0.2")); > assertFalse(Gossiper.instance.hasMajorVersion3Nodes()); > } > {code} > This seems to be because of > [https://github.com/apache/cassandra/blob/cassandra-4.1/src/java/org/apache/cassandra/gms/Gossiper.java#L2360], > where an upgrade in progress is possible but we are not upgrading from a > lower family version (i.e from 4.1.1 to 4.1.2). > From the comment in this function, it seems instead of the existing check, we > would want to iterate over all known endpoints in gossip and return true if > any of them do not have a version (similar to > [https://github.com/apache/cassandra/blob/cassandra-4.1/src/java/org/apache/cassandra/gms/Gossiper.java#L227-L236) > > |https://github.com/apache/cassandra/blob/cassandra-4.1/src/java/org/apache/cassandra/gms/Gossiper.java#L227-L236).] -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org