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 c61da0c4a3334944c6dcbfc031e77515369d7a44
Author: Sam Tunnicliffe <[email protected]>
AuthorDate: Fri Mar 3 19:02:57 2023 +0000

    [CEP-21] Update snitches to use Directory
    
    Minimal changes to IEndpointSnitch implementations to have them pull
    location info from Directory.
    
    Co-authored-by: Marcus Eriksson <[email protected]>
    Co-authored-by: Alex Petrov <[email protected]>
    Co-authored-by: Sam Tunnicliffe <[email protected]>
---
 .../cassandra/locator/AlibabaCloudSnitch.java      | 40 ++++++----------------
 .../apache/cassandra/locator/CloudstackSnitch.java | 40 ++++++----------------
 .../org/apache/cassandra/locator/Ec2Snitch.java    | 37 ++++++--------------
 .../cassandra/locator/GoogleCloudSnitch.java       | 39 ++++++---------------
 .../locator/GossipingPropertyFileSnitch.java       | 40 +++++-----------------
 5 files changed, 51 insertions(+), 145 deletions(-)

diff --git a/src/java/org/apache/cassandra/locator/AlibabaCloudSnitch.java 
b/src/java/org/apache/cassandra/locator/AlibabaCloudSnitch.java
index 729e1b3763..45d7fcd857 100644
--- a/src/java/org/apache/cassandra/locator/AlibabaCloudSnitch.java
+++ b/src/java/org/apache/cassandra/locator/AlibabaCloudSnitch.java
@@ -25,13 +25,11 @@ import java.net.MalformedURLException;
 import java.net.SocketTimeoutException;
 import java.net.URL;
 import java.nio.charset.StandardCharsets;
-import java.util.Map;
-import org.apache.cassandra.db.SystemKeyspace;
+
 import org.apache.cassandra.exceptions.ConfigurationException;
-import org.apache.cassandra.gms.ApplicationState;
-import org.apache.cassandra.gms.EndpointState;
-import org.apache.cassandra.gms.Gossiper;
 import org.apache.cassandra.io.util.FileUtils;
+import org.apache.cassandra.tcm.ClusterMetadata;
+import org.apache.cassandra.tcm.membership.NodeId;
 import org.apache.cassandra.utils.FBUtilities;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -47,9 +45,6 @@ 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";
-    private Map<InetAddressAndPort, Map<String, String>> savedEndpoints; 
     protected String ecsZone;
     protected String ecsRegion;
     
@@ -112,17 +107,10 @@ public class AlibabaCloudSnitch extends 
AbstractNetworkTopologySnitch
     {
         if (endpoint.equals(FBUtilities.getBroadcastAddressAndPort()))
             return ecsZone;
-        EndpointState state = 
Gossiper.instance.getEndpointStateForEndpoint(endpoint);
-        if (state == null || state.getApplicationState(ApplicationState.RACK) 
== null)
-        {
-            if (savedEndpoints == null)
-                savedEndpoints = SystemKeyspace.loadDcRackInfo();
-            if (savedEndpoints.containsKey(endpoint))
-                return savedEndpoints.get(endpoint).get("rack");
-            return DEFAULT_RACK;
-        }
-        return state.getApplicationState(ApplicationState.RACK).value;
-    
+
+        ClusterMetadata metadata = ClusterMetadata.current();
+        NodeId nodeId = metadata.directory.peerId(endpoint);
+        return metadata.directory.location(nodeId).rack;
     }
 
     @Override
@@ -130,17 +118,9 @@ public class AlibabaCloudSnitch extends 
AbstractNetworkTopologySnitch
     {
         if (endpoint.equals(FBUtilities.getBroadcastAddressAndPort()))
             return ecsRegion;
-        EndpointState state = 
Gossiper.instance.getEndpointStateForEndpoint(endpoint);
-        if (state == null || state.getApplicationState(ApplicationState.DC) == 
null)
-        {
-            if (savedEndpoints == null)
-                savedEndpoints = SystemKeyspace.loadDcRackInfo();
-            if (savedEndpoints.containsKey(endpoint))
-                return savedEndpoints.get(endpoint).get("data_center");
-            return DEFAULT_DC;
-        }
-        return state.getApplicationState(ApplicationState.DC).value;
-    
+        ClusterMetadata metadata = ClusterMetadata.current();
+        NodeId nodeId = metadata.directory.peerId(endpoint);
+        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 d8579534fb..a4535d6374 100644
--- a/src/java/org/apache/cassandra/locator/CloudstackSnitch.java
+++ b/src/java/org/apache/cassandra/locator/CloudstackSnitch.java
@@ -25,7 +25,6 @@ import java.net.HttpURLConnection;
 import java.net.URL;
 import java.net.URI;
 import java.nio.charset.StandardCharsets;
-import java.util.Map;
 import java.util.regex.Pattern;
 import java.util.regex.Matcher;
 
@@ -33,12 +32,11 @@ import org.apache.cassandra.io.util.File;
 import org.apache.cassandra.io.util.FileReader;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.apache.cassandra.db.SystemKeyspace;
+
 import org.apache.cassandra.exceptions.ConfigurationException;
-import org.apache.cassandra.gms.ApplicationState;
-import org.apache.cassandra.gms.EndpointState;
-import org.apache.cassandra.gms.Gossiper;
 import org.apache.cassandra.io.util.FileUtils;
+import org.apache.cassandra.tcm.ClusterMetadata;
+import org.apache.cassandra.tcm.membership.NodeId;
 import org.apache.cassandra.utils.FBUtilities;
 import org.apache.cassandra.utils.JVMStabilityInspector;
 
@@ -55,10 +53,6 @@ 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 Map<InetAddressAndPort, Map<String, String>> savedEndpoints;
-
-    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",
@@ -86,32 +80,20 @@ public class CloudstackSnitch extends 
AbstractNetworkTopologySnitch
     {
         if (endpoint.equals(FBUtilities.getBroadcastAddressAndPort()))
             return csZoneRack;
-        EndpointState state = 
Gossiper.instance.getEndpointStateForEndpoint(endpoint);
-        if (state == null || state.getApplicationState(ApplicationState.RACK) 
== null)
-        {
-            if (savedEndpoints == null)
-                savedEndpoints = SystemKeyspace.loadDcRackInfo();
-            if (savedEndpoints.containsKey(endpoint))
-                return savedEndpoints.get(endpoint).get("rack");
-            return DEFAULT_RACK;
-        }
-        return state.getApplicationState(ApplicationState.RACK).value;
+
+        ClusterMetadata metadata = ClusterMetadata.current();
+        NodeId nodeId = metadata.directory.peerId(endpoint);
+        return metadata.directory.location(nodeId).rack;
     }
 
     public String getDatacenter(InetAddressAndPort endpoint)
     {
         if (endpoint.equals(FBUtilities.getBroadcastAddressAndPort()))
             return csZoneDc;
-        EndpointState state = 
Gossiper.instance.getEndpointStateForEndpoint(endpoint);
-        if (state == null || state.getApplicationState(ApplicationState.DC) == 
null)
-        {
-            if (savedEndpoints == null)
-                savedEndpoints = SystemKeyspace.loadDcRackInfo();
-            if (savedEndpoints.containsKey(endpoint))
-                return savedEndpoints.get(endpoint).get("data_center");
-            return DEFAULT_DC;
-        }
-        return state.getApplicationState(ApplicationState.DC).value;
+
+        ClusterMetadata metadata = ClusterMetadata.current();
+        NodeId nodeId = metadata.directory.peerId(endpoint);
+        return metadata.directory.location(nodeId).datacenter;
     }
 
     String csQueryMetadata(String url) throws ConfigurationException, 
IOException
diff --git a/src/java/org/apache/cassandra/locator/Ec2Snitch.java 
b/src/java/org/apache/cassandra/locator/Ec2Snitch.java
index 5e51408669..09134959eb 100644
--- a/src/java/org/apache/cassandra/locator/Ec2Snitch.java
+++ b/src/java/org/apache/cassandra/locator/Ec2Snitch.java
@@ -29,12 +29,11 @@ import java.util.Set;
 import com.google.common.annotations.VisibleForTesting;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.apache.cassandra.db.SystemKeyspace;
+
 import org.apache.cassandra.exceptions.ConfigurationException;
-import org.apache.cassandra.gms.ApplicationState;
-import org.apache.cassandra.gms.EndpointState;
-import org.apache.cassandra.gms.Gossiper;
 import org.apache.cassandra.io.util.FileUtils;
+import org.apache.cassandra.tcm.ClusterMetadata;
+import org.apache.cassandra.tcm.membership.NodeId;
 import org.apache.cassandra.utils.FBUtilities;
 
 /**
@@ -50,8 +49,6 @@ 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,32 +127,20 @@ public class Ec2Snitch extends 
AbstractNetworkTopologySnitch
     {
         if (endpoint.equals(FBUtilities.getBroadcastAddressAndPort()))
             return ec2zone;
-        EndpointState state = 
Gossiper.instance.getEndpointStateForEndpoint(endpoint);
-        if (state == null || state.getApplicationState(ApplicationState.RACK) 
== null)
-        {
-            if (savedEndpoints == null)
-                savedEndpoints = SystemKeyspace.loadDcRackInfo();
-            if (savedEndpoints.containsKey(endpoint))
-                return savedEndpoints.get(endpoint).get("rack");
-            return DEFAULT_RACK;
-        }
-        return state.getApplicationState(ApplicationState.RACK).value;
+
+        ClusterMetadata metadata = ClusterMetadata.current();
+        NodeId nodeId = metadata.directory.peerId(endpoint);
+        return metadata.directory.location(nodeId).rack;
     }
 
     public String getDatacenter(InetAddressAndPort endpoint)
     {
         if (endpoint.equals(FBUtilities.getBroadcastAddressAndPort()))
             return ec2region;
-        EndpointState state = 
Gossiper.instance.getEndpointStateForEndpoint(endpoint);
-        if (state == null || state.getApplicationState(ApplicationState.DC) == 
null)
-        {
-            if (savedEndpoints == null)
-                savedEndpoints = SystemKeyspace.loadDcRackInfo();
-            if (savedEndpoints.containsKey(endpoint))
-                return savedEndpoints.get(endpoint).get("data_center");
-            return DEFAULT_DC;
-        }
-        return state.getApplicationState(ApplicationState.DC).value;
+
+        ClusterMetadata metadata = ClusterMetadata.current();
+        NodeId nodeId = metadata.directory.peerId(endpoint);
+        return metadata.directory.location(nodeId).datacenter;
     }
 
     @Override
diff --git a/src/java/org/apache/cassandra/locator/GoogleCloudSnitch.java 
b/src/java/org/apache/cassandra/locator/GoogleCloudSnitch.java
index 1e1c500791..d2ff6ee4e4 100644
--- a/src/java/org/apache/cassandra/locator/GoogleCloudSnitch.java
+++ b/src/java/org/apache/cassandra/locator/GoogleCloudSnitch.java
@@ -23,16 +23,14 @@ import java.io.IOException;
 import java.net.HttpURLConnection;
 import java.net.URL;
 import java.nio.charset.StandardCharsets;
-import java.util.Map;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.apache.cassandra.db.SystemKeyspace;
+
 import org.apache.cassandra.exceptions.ConfigurationException;
-import org.apache.cassandra.gms.ApplicationState;
-import org.apache.cassandra.gms.EndpointState;
-import org.apache.cassandra.gms.Gossiper;
 import org.apache.cassandra.io.util.FileUtils;
+import org.apache.cassandra.tcm.ClusterMetadata;
+import org.apache.cassandra.tcm.membership.NodeId;
 import org.apache.cassandra.utils.FBUtilities;
 
 /**
@@ -43,9 +41,6 @@ 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";
-    private Map<InetAddressAndPort, Map<String, String>> savedEndpoints;
     protected String gceZone;
     protected String gceRegion;
 
@@ -97,31 +92,19 @@ public class GoogleCloudSnitch extends 
AbstractNetworkTopologySnitch
     {
         if (endpoint.equals(FBUtilities.getBroadcastAddressAndPort()))
             return gceZone;
-        EndpointState state = 
Gossiper.instance.getEndpointStateForEndpoint(endpoint);
-        if (state == null || state.getApplicationState(ApplicationState.RACK) 
== null)
-        {
-            if (savedEndpoints == null)
-                savedEndpoints = SystemKeyspace.loadDcRackInfo();
-            if (savedEndpoints.containsKey(endpoint))
-                return savedEndpoints.get(endpoint).get("rack");
-            return DEFAULT_RACK;
-        }
-        return state.getApplicationState(ApplicationState.RACK).value;
+
+        ClusterMetadata metadata = ClusterMetadata.current();
+        NodeId nodeId = metadata.directory.peerId(endpoint);
+        return metadata.directory.location(nodeId).rack;
     }
 
     public String getDatacenter(InetAddressAndPort endpoint)
     {
         if (endpoint.equals(FBUtilities.getBroadcastAddressAndPort()))
             return gceRegion;
-        EndpointState state = 
Gossiper.instance.getEndpointStateForEndpoint(endpoint);
-        if (state == null || state.getApplicationState(ApplicationState.DC) == 
null)
-        {
-            if (savedEndpoints == null)
-                savedEndpoints = SystemKeyspace.loadDcRackInfo();
-            if (savedEndpoints.containsKey(endpoint))
-                return savedEndpoints.get(endpoint).get("data_center");
-            return DEFAULT_DC;
-        }
-        return state.getApplicationState(ApplicationState.DC).value;
+
+        ClusterMetadata metadata = ClusterMetadata.current();
+        NodeId nodeId = metadata.directory.peerId(endpoint);
+        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 5aa7791e63..f320f7f03c 100644
--- a/src/java/org/apache/cassandra/locator/GossipingPropertyFileSnitch.java
+++ b/src/java/org/apache/cassandra/locator/GossipingPropertyFileSnitch.java
@@ -24,12 +24,12 @@ import java.util.Map;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.cassandra.db.SystemKeyspace;
 import org.apache.cassandra.exceptions.ConfigurationException;
 import org.apache.cassandra.gms.ApplicationState;
-import org.apache.cassandra.gms.EndpointState;
 import org.apache.cassandra.gms.Gossiper;
 import org.apache.cassandra.service.StorageService;
+import org.apache.cassandra.tcm.ClusterMetadata;
+import org.apache.cassandra.tcm.membership.NodeId;
 import org.apache.cassandra.utils.FBUtilities;
 
 
@@ -88,21 +88,9 @@ public class GossipingPropertyFileSnitch extends 
AbstractNetworkTopologySnitch//
         if (endpoint.equals(FBUtilities.getBroadcastAddressAndPort()))
             return myDC;
 
-        EndpointState epState = 
Gossiper.instance.getEndpointStateForEndpoint(endpoint);
-        if (epState == null || 
epState.getApplicationState(ApplicationState.DC) == null)
-        {
-            if (psnitch == null)
-            {
-                if (savedEndpoints == null)
-                    savedEndpoints = SystemKeyspace.loadDcRackInfo();
-                if (savedEndpoints.containsKey(endpoint))
-                    return savedEndpoints.get(endpoint).get("data_center");
-                return DEFAULT_DC;
-            }
-            else
-                return psnitch.getDatacenter(endpoint);
-        }
-        return epState.getApplicationState(ApplicationState.DC).value;
+        ClusterMetadata metadata = ClusterMetadata.current();
+        NodeId nodeId = metadata.directory.peerId(endpoint);
+        return metadata.directory.location(nodeId).rack;
     }
 
     /**
@@ -116,21 +104,9 @@ public class GossipingPropertyFileSnitch extends 
AbstractNetworkTopologySnitch//
         if (endpoint.equals(FBUtilities.getBroadcastAddressAndPort()))
             return myRack;
 
-        EndpointState epState = 
Gossiper.instance.getEndpointStateForEndpoint(endpoint);
-        if (epState == null || 
epState.getApplicationState(ApplicationState.RACK) == null)
-        {
-            if (psnitch == null)
-            {
-                if (savedEndpoints == null)
-                    savedEndpoints = SystemKeyspace.loadDcRackInfo();
-                if (savedEndpoints.containsKey(endpoint))
-                    return savedEndpoints.get(endpoint).get("rack");
-                return DEFAULT_RACK;
-            }
-            else
-                return psnitch.getRack(endpoint);
-        }
-        return epState.getApplicationState(ApplicationState.RACK).value;
+        ClusterMetadata metadata = ClusterMetadata.current();
+        NodeId nodeId = metadata.directory.peerId(endpoint);
+        return metadata.directory.location(nodeId).rack;
     }
 
     public void gossiperStarting()


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to