This is an automated email from the ASF dual-hosted git repository. samt pushed a commit to branch cep-21-tcm in repository https://gitbox.apache.org/repos/asf/cassandra.git
commit 6af8a5a397dd91f9bf3b14c82aaf6d3e354e796d Author: Marcus Eriksson <[email protected]> AuthorDate: Mon Apr 3 15:41:42 2023 +0200 [CEP-21] Avoid NPE when getting dc/rack for not yet registered endpoints patch by Marcus Eriksson; reviewed by Alex Petrov and Sam Tunnicliffe for CASSANDRA-18461 --- .../apache/cassandra/locator/AlibabaCloudSnitch.java | 6 ++++++ .../apache/cassandra/locator/CloudstackSnitch.java | 7 ++++++- src/java/org/apache/cassandra/locator/Ec2Snitch.java | 6 ++++++ .../apache/cassandra/locator/GoogleCloudSnitch.java | 6 ++++++ .../locator/GossipingPropertyFileSnitch.java | 19 ++++--------------- 5 files changed, 28 insertions(+), 16 deletions(-) diff --git a/src/java/org/apache/cassandra/locator/AlibabaCloudSnitch.java b/src/java/org/apache/cassandra/locator/AlibabaCloudSnitch.java index 45d7fcd857..574a1d4974 100644 --- a/src/java/org/apache/cassandra/locator/AlibabaCloudSnitch.java +++ b/src/java/org/apache/cassandra/locator/AlibabaCloudSnitch.java @@ -45,6 +45,8 @@ public class AlibabaCloudSnitch extends AbstractNetworkTopologySnitch { protected static final Logger logger = LoggerFactory.getLogger(AlibabaCloudSnitch.class); protected static final String ZONE_NAME_QUERY_URL = "http://100.100.100.200/latest/meta-data/zone-id"; + private static final String DEFAULT_DC = "UNKNOWN-DC"; + private static final String DEFAULT_RACK = "UNKNOWN-RACK"; protected String ecsZone; protected String ecsRegion; @@ -110,6 +112,8 @@ public class AlibabaCloudSnitch extends AbstractNetworkTopologySnitch ClusterMetadata metadata = ClusterMetadata.current(); NodeId nodeId = metadata.directory.peerId(endpoint); + if (nodeId == null) + return DEFAULT_RACK; return metadata.directory.location(nodeId).rack; } @@ -120,6 +124,8 @@ public class AlibabaCloudSnitch extends AbstractNetworkTopologySnitch return ecsRegion; ClusterMetadata metadata = ClusterMetadata.current(); NodeId nodeId = metadata.directory.peerId(endpoint); + if (nodeId == null) + return DEFAULT_DC; return metadata.directory.location(nodeId).datacenter; } diff --git a/src/java/org/apache/cassandra/locator/CloudstackSnitch.java b/src/java/org/apache/cassandra/locator/CloudstackSnitch.java index a4535d6374..8475fc64d8 100644 --- a/src/java/org/apache/cassandra/locator/CloudstackSnitch.java +++ b/src/java/org/apache/cassandra/locator/CloudstackSnitch.java @@ -52,7 +52,8 @@ public class CloudstackSnitch extends AbstractNetworkTopologySnitch { protected static final Logger logger = LoggerFactory.getLogger(CloudstackSnitch.class); protected static final String ZONE_NAME_QUERY_URI = "/latest/meta-data/availability-zone"; - + private static final String DEFAULT_DC = "UNKNOWN-DC"; + private static final String DEFAULT_RACK = "UNKNOWN-RACK"; private static final String[] LEASE_FILES = { "file:///var/lib/dhcp/dhclient.eth0.leases", @@ -83,6 +84,8 @@ public class CloudstackSnitch extends AbstractNetworkTopologySnitch ClusterMetadata metadata = ClusterMetadata.current(); NodeId nodeId = metadata.directory.peerId(endpoint); + if (nodeId == null) + return DEFAULT_RACK; return metadata.directory.location(nodeId).rack; } @@ -93,6 +96,8 @@ public class CloudstackSnitch extends AbstractNetworkTopologySnitch ClusterMetadata metadata = ClusterMetadata.current(); NodeId nodeId = metadata.directory.peerId(endpoint); + if (nodeId == null) + return DEFAULT_DC; return metadata.directory.location(nodeId).datacenter; } diff --git a/src/java/org/apache/cassandra/locator/Ec2Snitch.java b/src/java/org/apache/cassandra/locator/Ec2Snitch.java index 09134959eb..f9275affda 100644 --- a/src/java/org/apache/cassandra/locator/Ec2Snitch.java +++ b/src/java/org/apache/cassandra/locator/Ec2Snitch.java @@ -49,6 +49,8 @@ public class Ec2Snitch extends AbstractNetworkTopologySnitch private static final String EC2_NAMING_STANDARD = "standard"; private static final String ZONE_NAME_QUERY_URL = "http://169.254.169.254/latest/meta-data/placement/availability-zone"; + private static final String DEFAULT_DC = "UNKNOWN-DC"; + private static final String DEFAULT_RACK = "UNKNOWN-RACK"; final String ec2region; private final String ec2zone; @@ -130,6 +132,8 @@ public class Ec2Snitch extends AbstractNetworkTopologySnitch ClusterMetadata metadata = ClusterMetadata.current(); NodeId nodeId = metadata.directory.peerId(endpoint); + if (nodeId == null) + return DEFAULT_RACK; return metadata.directory.location(nodeId).rack; } @@ -140,6 +144,8 @@ public class Ec2Snitch extends AbstractNetworkTopologySnitch ClusterMetadata metadata = ClusterMetadata.current(); NodeId nodeId = metadata.directory.peerId(endpoint); + if (nodeId == null) + return DEFAULT_DC; return metadata.directory.location(nodeId).datacenter; } diff --git a/src/java/org/apache/cassandra/locator/GoogleCloudSnitch.java b/src/java/org/apache/cassandra/locator/GoogleCloudSnitch.java index d2ff6ee4e4..aa247936e4 100644 --- a/src/java/org/apache/cassandra/locator/GoogleCloudSnitch.java +++ b/src/java/org/apache/cassandra/locator/GoogleCloudSnitch.java @@ -41,6 +41,8 @@ public class GoogleCloudSnitch extends AbstractNetworkTopologySnitch { protected static final Logger logger = LoggerFactory.getLogger(GoogleCloudSnitch.class); protected static final String ZONE_NAME_QUERY_URL = "http://metadata.google.internal/computeMetadata/v1/instance/zone"; + private static final String DEFAULT_DC = "UNKNOWN-DC"; + private static final String DEFAULT_RACK = "UNKNOWN-RACK"; protected String gceZone; protected String gceRegion; @@ -95,6 +97,8 @@ public class GoogleCloudSnitch extends AbstractNetworkTopologySnitch ClusterMetadata metadata = ClusterMetadata.current(); NodeId nodeId = metadata.directory.peerId(endpoint); + if (nodeId == null) + return DEFAULT_RACK; return metadata.directory.location(nodeId).rack; } @@ -105,6 +109,8 @@ public class GoogleCloudSnitch extends AbstractNetworkTopologySnitch ClusterMetadata metadata = ClusterMetadata.current(); NodeId nodeId = metadata.directory.peerId(endpoint); + if (nodeId == null) + return DEFAULT_DC; return metadata.directory.location(nodeId).rack; } } diff --git a/src/java/org/apache/cassandra/locator/GossipingPropertyFileSnitch.java b/src/java/org/apache/cassandra/locator/GossipingPropertyFileSnitch.java index f320f7f03c..3516550c05 100644 --- a/src/java/org/apache/cassandra/locator/GossipingPropertyFileSnitch.java +++ b/src/java/org/apache/cassandra/locator/GossipingPropertyFileSnitch.java @@ -19,7 +19,6 @@ package org.apache.cassandra.locator; import java.util.concurrent.atomic.AtomicReference; -import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -37,14 +36,10 @@ public class GossipingPropertyFileSnitch extends AbstractNetworkTopologySnitch// { private static final Logger logger = LoggerFactory.getLogger(GossipingPropertyFileSnitch.class); - private PropertyFileSnitch psnitch; - private final String myDC; private final String myRack; private final boolean preferLocal; private final AtomicReference<ReconnectableSnitchHelper> snitchHelperReference; - - private Map<InetAddressAndPort, Map<String, String>> savedEndpoints; private static final String DEFAULT_DC = "UNKNOWN_DC"; private static final String DEFAULT_RACK = "UNKNOWN_RACK"; @@ -56,16 +51,6 @@ public class GossipingPropertyFileSnitch extends AbstractNetworkTopologySnitch// myRack = properties.get("rack", DEFAULT_RACK).trim(); preferLocal = Boolean.parseBoolean(properties.get("prefer_local", "false")); snitchHelperReference = new AtomicReference<>(); - - try - { - psnitch = new PropertyFileSnitch(); - logger.info("Loaded {} for compatibility", PropertyFileSnitch.SNITCH_PROPERTIES_FILENAME); - } - catch (ConfigurationException e) - { - logger.info("Unable to load {}; compatibility mode disabled", PropertyFileSnitch.SNITCH_PROPERTIES_FILENAME); - } } private static SnitchProperties loadConfiguration() throws ConfigurationException @@ -90,6 +75,8 @@ public class GossipingPropertyFileSnitch extends AbstractNetworkTopologySnitch// ClusterMetadata metadata = ClusterMetadata.current(); NodeId nodeId = metadata.directory.peerId(endpoint); + if (nodeId == null) + return DEFAULT_DC; return metadata.directory.location(nodeId).rack; } @@ -106,6 +93,8 @@ public class GossipingPropertyFileSnitch extends AbstractNetworkTopologySnitch// ClusterMetadata metadata = ClusterMetadata.current(); NodeId nodeId = metadata.directory.peerId(endpoint); + if (nodeId == null) + return DEFAULT_RACK; return metadata.directory.location(nodeId).rack; } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
