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]
