You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Michael Semb Wever (Jira)" <ji...@apache.org> on 2020/06/16 17:08:00 UTC
[jira] [Updated] (CASSANDRA-15878) Ec2Snitch fails on upgrade in
legacy mode
[ https://issues.apache.org/jira/browse/CASSANDRA-15878?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Michael Semb Wever updated CASSANDRA-15878:
-------------------------------------------
Fix Version/s: 4.0-beta
> Ec2Snitch fails on upgrade in legacy mode
> -----------------------------------------
>
> Key: CASSANDRA-15878
> URL: https://issues.apache.org/jira/browse/CASSANDRA-15878
> Project: Cassandra
> Issue Type: Bug
> Reporter: Alexander Dejanovski
> Priority: Normal
> Fix For: 4.0-beta
>
>
> CASSANDRA-7839 changed the way the EC2 DC/Rack naming was handled in the Ec2Snitch to match AWS conventions.
> The "legacy" mode was introduced to allow upgrades from Cassandra 3.0/3.x and keep the same naming as before (while the "standard" mode uses the new naming convention).
> When performing an upgrade in the us-west-2 region, the second node failed to start with the following exception:
>
> {code:java}
> ERROR [main] 2020-06-16 09:14:42,218 Ec2Snitch.java:210 - This ec2-enabled snitch appears to be using the legacy naming scheme for regions, but existing nodes in cluster are using the opposite: region(s) = [us-west-2], availability zone(s) = [2a]. Please check the ec2_naming_scheme property in the cassandra-rackdc.properties configuration file for more details.
> ERROR [main] 2020-06-16 09:14:42,219 CassandraDaemon.java:789 - Exception encountered during startup
> java.lang.IllegalStateException: null
> at org.apache.cassandra.service.StorageService.validateEndpointSnitch(StorageService.java:573)
> at org.apache.cassandra.service.StorageService.checkForEndpointCollision(StorageService.java:530)
> at org.apache.cassandra.service.StorageService.prepareToJoin(StorageService.java:800)
> at org.apache.cassandra.service.StorageService.initServer(StorageService.java:659)
> at org.apache.cassandra.service.StorageService.initServer(StorageService.java:610)
> at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:373)
> at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:650)
> at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:767)
> {code}
>
> The exception leads back to [this piece of code|https://github.com/apache/cassandra/blob/cassandra-4.0-alpha4/src/java/org/apache/cassandra/locator/Ec2Snitch.java#L183-L185].
> After adding some logging, it turned out the DC name of the first upgraded node was considered invalid as a legacy one:
> {code:java}
> INFO [main] 2020-06-16 09:14:42,216 Ec2Snitch.java:183 - Detected DC us-west-2
> INFO [main] 2020-06-16 09:14:42,217 Ec2Snitch.java:185 - dcUsesLegacyFormat=false / usingLegacyNaming=true
> ERROR [main] 2020-06-16 09:14:42,217 Ec2Snitch.java:188 - Invalid DC name us-west-2
> {code}
>
> The problem is that the regex that's used to identify legacy dc names will match both old and new names :
> {code:java}
> boolean dcUsesLegacyFormat = !dc.matches("[a-z]+-[a-z].+-[\\d].*");
> {code}
> Knowing that some dc names didn't change between the two modes (us-west-2 for example), I don't see how we can use the dc names to detect if the legacy mode is being used by other nodes in the cluster.
>
> The rack names on the other hand are totally different in the legacy and standard modes and can be used to detect mismatching settings.
>
> My go to fix would be to drop the check on datacenters by removing the following lines: [https://github.com/apache/cassandra/blob/cassandra-4.0-alpha4/src/java/org/apache/cassandra/locator/Ec2Snitch.java#L172-L186]
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org