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]

Reply via email to