[
https://issues.apache.org/jira/browse/CASSANDRA-18999?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17782778#comment-17782778
]
Paulo Motta edited comment on CASSANDRA-18999 at 11/3/23 9:47 PM:
------------------------------------------------------------------
Nice catch, thanks for the report!
Based on the [usages of this
function|https://github.com/search?q=repo%3Aapache%2Fcassandra%20hasMajorVersion3Nodes&type=code)]
it looks like this could cause 2 minor side-effects during minor 4.x upgrades:
a) [omit
insertion|https://github.com/apache/cassandra/blob/e5d235dd4d385a324a3599c178118a2f32ec85d6/src/java/org/apache/cassandra/tracing/TraceKeyspace.java#L128]
of trace columns {{source_port}} and {{cordinator_port}}
b) [omit
insertion|https://github.com/apache/cassandra/blob/e5d235dd4d385a324a3599c178118a2f32ec85d6/src/java/org/apache/cassandra/schema/SystemDistributedKeyspace.java#L233]
of system_distributed.repair_history columns {{coordinator_port}} and
{{participants_v2}}
This looks like low severity but still important to fix to prevent these
defects during minor upgrades.
was (Author: paulo):
Nice catch, thanks for the report!
Based on the [usages of this
function|https://github.com/search?q=repo%3Aapache%2Fcassandra%20hasMajorVersion3Nodes&type=code)]
it looks like this issue could cause 2 side-effects during minor 4.x upgrades:
a) [omit
insertion|https://github.com/apache/cassandra/blob/e5d235dd4d385a324a3599c178118a2f32ec85d6/src/java/org/apache/cassandra/tracing/TraceKeyspace.java#L128]
of trace columns {{source_port}} and {{cordinator_port}}
b) [omit
insertion|https://github.com/apache/cassandra/blob/e5d235dd4d385a324a3599c178118a2f32ec85d6/src/java/org/apache/cassandra/schema/SystemDistributedKeyspace.java#L233]
of system_distributed.repair_history columns {{coordinator_port}} and
{{participants_v2}}
This looks like low severity but still important to fix to prevent these
defects during minor upgrades.
> 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
> Priority: Low
> Labels: lhf
>
> 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: [email protected]
For additional commands, e-mail: [email protected]