This is an automated email from the ASF dual-hosted git repository.

frankgh pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra-sidecar.git


The following commit(s) were added to refs/heads/trunk by this push:
     new e6ec27f3 CASSSIDECAR-263: Support a flag & implementation for only 
forward DNS resolution (#227)
e6ec27f3 is described below

commit e6ec27f38687f3a617aac01d93be90537f49ec25
Author: Andrew Johnson <[email protected]>
AuthorDate: Thu Jun 19 21:10:21 2025 +0100

    CASSSIDECAR-263: Support a flag & implementation for only forward DNS 
resolution (#227)
    
    Patch by Andrew Johnson; reviewed by Francisco Guerrero, Yifan Cai, Stefan 
Miklosovic for CASSSIDECAR-263
---
 CHANGES.txt                                        |  1 +
 conf/sidecar.yaml                                  |  4 ++
 .../sidecar/testing/LocalhostResolver.java         |  3 +-
 .../testing/ResolveToIpDnsResolverTest.java        | 47 +++++++++++++
 .../sidecar/common/server/dns/DnsResolver.java     | 16 -----
 .../sidecar/common/server/dns/DnsResolvers.java    | 79 ++++++++++++++++++++++
 .../cluster/instance/InstanceMetadataImpl.java     |  5 +-
 .../sidecar/config/ServiceConfiguration.java       |  8 +++
 .../config/yaml/ServiceConfigurationImpl.java      | 15 ++++
 .../config/yaml/SidecarConfigurationImpl.java      |  5 ++
 .../sidecar/modules/ConfigurationModule.java       |  9 ++-
 .../cassandra/sidecar/modules/UtilitiesModule.java |  5 +-
 ...kenZeroElectorateMembershipIntegrationTest.java |  6 +-
 .../sidecar/testing/IntegrationTestBase.java       |  4 +-
 .../sidecar/config/SidecarConfigurationTest.java   | 30 ++++++++
 .../cassandra/sidecar/snapshots/SnapshotUtils.java |  4 +-
 .../tasks/CdcRawDirectorySpaceCleanerTest.java     |  4 +-
 .../sidecar/utils/InstanceMetadataFetcherTest.java |  8 +--
 18 files changed, 216 insertions(+), 37 deletions(-)

diff --git a/CHANGES.txt b/CHANGES.txt
index 118d75ff..044b81a4 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,6 @@
 0.2.0
 -----
+ * Support a flag & implementation for only forward DNS resolution 
(CASSSIDECAR-263)
  * Make table stats permission table resource scoped (CASSSIDECAR-262)
  * Stage restore slices when in import phase already (CASSSIDECAR-258)
  * Allow getting intended role in Sidecar requests (CASSSIDECAR-257)
diff --git a/conf/sidecar.yaml b/conf/sidecar.yaml
index 3079a681..5008cbdc 100644
--- a/conf/sidecar.yaml
+++ b/conf/sidecar.yaml
@@ -75,6 +75,10 @@ sidecar:
   tcp_keep_alive: false
   accept_backlog: 1024
   server_verticle_instances: 1
+  # DnsResolver to use 
(org.apache.cassandra.sidecar.common.server.dns.DnsResolver). Currently 
supported
+  # values are 'default' and 'resolve_to_ip'. Default will resolve hostnames 
to addresses and addresses to
+  # hostnames whereas resolve_to_ip will only resolve hostnames to addresses.
+  dns_resolver: default
   throttle:
     stream_requests_per_sec: 5000
     timeout: 10s
diff --git 
a/integration-framework/src/main/java/org/apache/cassandra/sidecar/testing/LocalhostResolver.java
 
b/integration-framework/src/main/java/org/apache/cassandra/sidecar/testing/LocalhostResolver.java
index 3c813057..141c6f8a 100644
--- 
a/integration-framework/src/main/java/org/apache/cassandra/sidecar/testing/LocalhostResolver.java
+++ 
b/integration-framework/src/main/java/org/apache/cassandra/sidecar/testing/LocalhostResolver.java
@@ -26,6 +26,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.cassandra.sidecar.common.server.dns.DnsResolver;
+import org.apache.cassandra.sidecar.common.server.dns.DnsResolvers;
 
 
 /**
@@ -43,7 +44,7 @@ public class LocalhostResolver implements DnsResolver
 
     public LocalhostResolver()
     {
-        this(DnsResolver.DEFAULT);
+        this(DnsResolvers.DEFAULT);
     }
 
     LocalhostResolver(DnsResolver delegate)
diff --git 
a/integration-framework/src/test/java/org/apache/cassandra/sidecar/testing/ResolveToIpDnsResolverTest.java
 
b/integration-framework/src/test/java/org/apache/cassandra/sidecar/testing/ResolveToIpDnsResolverTest.java
new file mode 100644
index 00000000..66727439
--- /dev/null
+++ 
b/integration-framework/src/test/java/org/apache/cassandra/sidecar/testing/ResolveToIpDnsResolverTest.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.cassandra.sidecar.testing;
+
+import java.net.UnknownHostException;
+
+import org.junit.jupiter.api.Test;
+
+import org.apache.cassandra.sidecar.common.server.dns.DnsResolver;
+import org.apache.cassandra.sidecar.common.server.dns.DnsResolvers;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+class ResolveToIpDnsResolverTest
+{
+    @Test
+    void testResolve() throws UnknownHostException
+    {
+        DnsResolver resolver = DnsResolvers.RESOLVE_TO_IP;
+        assertThat(resolver.resolve("localhost")).isEqualTo("127.0.0.1");
+        assertThat(resolver.resolve("localhost2")).isEqualTo("127.0.0.2");
+    }
+
+    @Test
+    void testReverseResolve() throws UnknownHostException
+    {
+        DnsResolver resolver = DnsResolvers.RESOLVE_TO_IP;
+        
assertThat(resolver.reverseResolve("127.0.0.1")).isEqualTo("127.0.0.1");
+        
assertThat(resolver.reverseResolve("127.0.0.2")).isEqualTo("127.0.0.2");
+    }
+}
diff --git 
a/server-common/src/main/java/org/apache/cassandra/sidecar/common/server/dns/DnsResolver.java
 
b/server-common/src/main/java/org/apache/cassandra/sidecar/common/server/dns/DnsResolver.java
index 8d9ba144..df3897c2 100644
--- 
a/server-common/src/main/java/org/apache/cassandra/sidecar/common/server/dns/DnsResolver.java
+++ 
b/server-common/src/main/java/org/apache/cassandra/sidecar/common/server/dns/DnsResolver.java
@@ -18,7 +18,6 @@
 
 package org.apache.cassandra.sidecar.common.server.dns;
 
-import java.net.InetAddress;
 import java.net.UnknownHostException;
 
 /**
@@ -26,21 +25,6 @@ import java.net.UnknownHostException;
  */
 public interface DnsResolver
 {
-    DnsResolver DEFAULT = new DnsResolver()
-    {
-        @Override
-        public String resolve(String hostname) throws UnknownHostException
-        {
-            return InetAddress.getByName(hostname).getHostAddress();
-        }
-
-        @Override
-        public String reverseResolve(String address) throws 
UnknownHostException
-        {
-            return InetAddress.getByName(address).getHostName();
-        }
-    };
-
     /**
      * Resolves the IP address of the hostname
      *
diff --git 
a/server-common/src/main/java/org/apache/cassandra/sidecar/common/server/dns/DnsResolvers.java
 
b/server-common/src/main/java/org/apache/cassandra/sidecar/common/server/dns/DnsResolvers.java
new file mode 100644
index 00000000..5277780b
--- /dev/null
+++ 
b/server-common/src/main/java/org/apache/cassandra/sidecar/common/server/dns/DnsResolvers.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.cassandra.sidecar.common.server.dns;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Determines which DnsResolver to use. Currently supported implementations are
+ * default and resolve_to_ip. The former will resolve hostname to address and
+ * address to hostname whereas the latter will only resolve hostname to 
address.
+ */
+public enum DnsResolvers implements DnsResolver
+{
+    /**
+     * Default implementation of the {@link DnsResolver} that uses the JDK's
+     * underlying DNS resolution mechanism
+     */
+    @JsonProperty("default")
+    DEFAULT
+    {
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public String reverseResolve(String address) throws 
UnknownHostException
+        {
+            return InetAddress.getByName(address).getHostName();
+        }
+    },
+
+    /**
+     * Implementation of the {@link DnsResolver} interface that always resolves
+     * and reverse resolves to an IP address
+     */
+    @JsonProperty("resolve_to_ip")
+    RESOLVE_TO_IP
+    {
+        /**
+         * Returns the hostAddress for the provided address
+         *
+         * @param address IP address
+         * @return IP address
+         * @throws UnknownHostException when the host is not known
+         */
+        @Override
+        public String reverseResolve(String address) throws 
UnknownHostException
+        {
+            return InetAddress.getByName(address).getHostAddress();
+        }
+    };
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String resolve(String hostname) throws UnknownHostException
+    {
+           return InetAddress.getByName(hostname).getHostAddress();
+    }
+}
diff --git 
a/server/src/main/java/org/apache/cassandra/sidecar/cluster/instance/InstanceMetadataImpl.java
 
b/server/src/main/java/org/apache/cassandra/sidecar/cluster/instance/InstanceMetadataImpl.java
index 729bc8d4..b7e66f31 100644
--- 
a/server/src/main/java/org/apache/cassandra/sidecar/cluster/instance/InstanceMetadataImpl.java
+++ 
b/server/src/main/java/org/apache/cassandra/sidecar/cluster/instance/InstanceMetadataImpl.java
@@ -30,6 +30,7 @@ import com.codahale.metrics.MetricRegistry;
 import org.apache.cassandra.sidecar.cluster.CassandraAdapterDelegate;
 import org.apache.cassandra.sidecar.common.DataObjectBuilder;
 import org.apache.cassandra.sidecar.common.server.dns.DnsResolver;
+import org.apache.cassandra.sidecar.common.server.dns.DnsResolvers;
 import org.apache.cassandra.sidecar.common.utils.Preconditions;
 import org.apache.cassandra.sidecar.exceptions.CassandraUnavailableException;
 import org.apache.cassandra.sidecar.exceptions.ConfigurationException;
@@ -263,7 +264,7 @@ public class InstanceMetadataImpl implements 
InstanceMetadata
         }
 
         /**
-         * Sets the {@code host} and the {@code ipAddress} resolved by {@link 
DnsResolver#DEFAULT}
+         * Sets the {@code host} and the {@code ipAddress} resolved by {@link 
DnsResolvers#DEFAULT}
          * and returns a reference to this Builder enabling method chaining.
          *
          * @param host the {@code host} to set
@@ -271,7 +272,7 @@ public class InstanceMetadataImpl implements 
InstanceMetadata
          */
         public Builder host(String host)
         {
-            return host(host, DnsResolver.DEFAULT);
+            return host(host, DnsResolvers.DEFAULT);
         }
 
         /**
diff --git 
a/server/src/main/java/org/apache/cassandra/sidecar/config/ServiceConfiguration.java
 
b/server/src/main/java/org/apache/cassandra/sidecar/config/ServiceConfiguration.java
index cdf62f95..99e306e8 100644
--- 
a/server/src/main/java/org/apache/cassandra/sidecar/config/ServiceConfiguration.java
+++ 
b/server/src/main/java/org/apache/cassandra/sidecar/config/ServiceConfiguration.java
@@ -26,6 +26,7 @@ import java.util.UUID;
 
 import io.vertx.core.net.SocketAddress;
 import io.vertx.core.net.impl.SocketAddressImpl;
+import org.apache.cassandra.sidecar.common.server.dns.DnsResolver;
 import 
org.apache.cassandra.sidecar.common.server.utils.MillisecondBoundConfiguration;
 import 
org.apache.cassandra.sidecar.common.server.utils.MinuteBoundConfiguration;
 
@@ -179,4 +180,11 @@ public interface ServiceConfiguration
      * @return the configuration relevant to the coordination functionality of 
Sidecar
      */
     CoordinationConfiguration coordinationConfiguration();
+
+    /**
+     * @return Sidecar's DNS Resolver to use. Default will be to provide 
forward and reverse DNS resolution which
+     * provides both the hostname and address. The alternative, resolve_to_ip, 
only provides forward resolution meaning
+     * the IP address will be returned for both hostname and address.
+     */
+    DnsResolver dnsResolver();
 }
diff --git 
a/server/src/main/java/org/apache/cassandra/sidecar/config/yaml/ServiceConfigurationImpl.java
 
b/server/src/main/java/org/apache/cassandra/sidecar/config/yaml/ServiceConfigurationImpl.java
index 3b48afc4..a924d100 100644
--- 
a/server/src/main/java/org/apache/cassandra/sidecar/config/yaml/ServiceConfigurationImpl.java
+++ 
b/server/src/main/java/org/apache/cassandra/sidecar/config/yaml/ServiceConfigurationImpl.java
@@ -28,6 +28,8 @@ import org.slf4j.LoggerFactory;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import org.apache.cassandra.sidecar.common.DataObjectBuilder;
+import org.apache.cassandra.sidecar.common.server.dns.DnsResolver;
+import org.apache.cassandra.sidecar.common.server.dns.DnsResolvers;
 import 
org.apache.cassandra.sidecar.common.server.utils.MillisecondBoundConfiguration;
 import 
org.apache.cassandra.sidecar.common.server.utils.MinuteBoundConfiguration;
 import org.apache.cassandra.sidecar.config.CdcConfiguration;
@@ -81,6 +83,7 @@ public class ServiceConfigurationImpl implements 
ServiceConfiguration
     private static final String SCHEMA = "schema";
     private static final String CDC = "cdc";
     private static final String COORDINATION = "coordination";
+    public static final String DNS_RESOLVER_PROPERTY = "dns_resolver";
     protected static final Map<String, WorkerPoolConfiguration> 
DEFAULT_WORKER_POOLS_CONFIGURATION
     = Collections.unmodifiableMap(new HashMap<String, 
WorkerPoolConfiguration>()
     {{
@@ -149,6 +152,9 @@ public class ServiceConfigurationImpl implements 
ServiceConfiguration
     @JsonProperty(value = COORDINATION)
     protected final CoordinationConfiguration coordinationConfiguration;
 
+    @JsonProperty(value = DNS_RESOLVER_PROPERTY)
+    protected final DnsResolver dnsResolver;
+
     /**
      * Constructs a new {@link ServiceConfigurationImpl} with the default 
values
      */
@@ -184,6 +190,7 @@ public class ServiceConfigurationImpl implements 
ServiceConfiguration
         schemaKeyspaceConfiguration = builder.schemaKeyspaceConfiguration;
         cdcConfiguration = builder.cdcConfiguration;
         coordinationConfiguration = builder.coordinationConfiguration;
+        dnsResolver = builder.dnsResolver;
     }
 
     /**
@@ -449,6 +456,13 @@ public class ServiceConfigurationImpl implements 
ServiceConfiguration
         return coordinationConfiguration;
     }
 
+    @Override
+    @JsonProperty(value = DNS_RESOLVER_PROPERTY)
+    public DnsResolver dnsResolver()
+    {
+        return dnsResolver;
+    }
+
     public static Builder builder()
     {
         return new Builder();
@@ -480,6 +494,7 @@ public class ServiceConfigurationImpl implements 
ServiceConfiguration
         protected SchemaKeyspaceConfiguration schemaKeyspaceConfiguration = 
new SchemaKeyspaceConfigurationImpl();
         protected CdcConfiguration cdcConfiguration = new 
CdcConfigurationImpl();
         protected CoordinationConfiguration coordinationConfiguration = new 
CoordinationConfigurationImpl();
+        protected DnsResolver dnsResolver = DnsResolvers.DEFAULT;
 
         private Builder()
         {
diff --git 
a/server/src/main/java/org/apache/cassandra/sidecar/config/yaml/SidecarConfigurationImpl.java
 
b/server/src/main/java/org/apache/cassandra/sidecar/config/yaml/SidecarConfigurationImpl.java
index fcc36778..0d8b630c 100644
--- 
a/server/src/main/java/org/apache/cassandra/sidecar/config/yaml/SidecarConfigurationImpl.java
+++ 
b/server/src/main/java/org/apache/cassandra/sidecar/config/yaml/SidecarConfigurationImpl.java
@@ -38,6 +38,8 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.module.SimpleModule;
 import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
 import org.apache.cassandra.sidecar.common.DataObjectBuilder;
+import org.apache.cassandra.sidecar.common.server.dns.DnsResolver;
+import org.apache.cassandra.sidecar.common.server.dns.DnsResolvers;
 import 
org.apache.cassandra.sidecar.common.server.utils.MillisecondBoundConfiguration;
 import org.apache.cassandra.sidecar.config.AccessControlConfiguration;
 import 
org.apache.cassandra.sidecar.config.CassandraInputValidationConfiguration;
@@ -384,6 +386,9 @@ public class SidecarConfigurationImpl implements 
SidecarConfiguration
                      module.addAbstractTypeMapping(configurationInterface, 
clazz);
                  });
 
+        // Manually add type mapping for DnsResolver
+        module.addAbstractTypeMapping(DnsResolver.class, DnsResolvers.class);
+
         Set<Class> unimplemented = Sets.difference(declared, implemented);
         if (!unimplemented.isEmpty())
         {
diff --git 
a/server/src/main/java/org/apache/cassandra/sidecar/modules/ConfigurationModule.java
 
b/server/src/main/java/org/apache/cassandra/sidecar/modules/ConfigurationModule.java
index c0718669..4d7ed4d9 100644
--- 
a/server/src/main/java/org/apache/cassandra/sidecar/modules/ConfigurationModule.java
+++ 
b/server/src/main/java/org/apache/cassandra/sidecar/modules/ConfigurationModule.java
@@ -181,7 +181,8 @@ public class ConfigurationModule extends AbstractModule
                                                       jmxConfiguration,
                                                       cqlSessionProvider,
                                                       driverUtils,
-                                                      registryProvider);
+                                                      registryProvider,
+                                                      dnsResolver);
                      })
                      .collect(Collectors.toList());
 
@@ -199,6 +200,7 @@ public class ConfigurationModule extends AbstractModule
      * @param jmxConfiguration  the configuration for the JMX Client
      * @param session           the CQL Session provider
      * @param registryFactory   factory for creating cassandra instance 
specific registry
+     * @param dnsResolver       the dns resolver to use
      * @return the build instance metadata object
      */
     private static InstanceMetadata buildInstanceMetadata(Vertx vertx,
@@ -208,7 +210,8 @@ public class ConfigurationModule extends AbstractModule
                                                           JmxConfiguration 
jmxConfiguration,
                                                           CQLSessionProvider 
session,
                                                           DriverUtils 
driverUtils,
-                                                          
MetricRegistryFactory registryFactory)
+                                                          
MetricRegistryFactory registryFactory,
+                                                          DnsResolver 
dnsResolver)
     {
         // TODO: relocate the method to somewhere testable
         String host = cassandraInstance.host();
@@ -236,7 +239,7 @@ public class ConfigurationModule extends AbstractModule
                                                                          new 
InstanceHealthMetrics(instanceSpecificRegistry));
         return InstanceMetadataImpl.builder()
                                    .id(cassandraInstance.id())
-                                   .host(host)
+                                   .host(host, dnsResolver)
                                    .port(port)
                                    .storageDir(cassandraInstance.storageDir())
                                    .dataDirs(cassandraInstance.dataDirs())
diff --git 
a/server/src/main/java/org/apache/cassandra/sidecar/modules/UtilitiesModule.java
 
b/server/src/main/java/org/apache/cassandra/sidecar/modules/UtilitiesModule.java
index 5310b8fe..858bc5ba 100644
--- 
a/server/src/main/java/org/apache/cassandra/sidecar/modules/UtilitiesModule.java
+++ 
b/server/src/main/java/org/apache/cassandra/sidecar/modules/UtilitiesModule.java
@@ -25,6 +25,7 @@ import com.google.inject.name.Named;
 import org.apache.cassandra.sidecar.common.server.dns.DnsResolver;
 import org.apache.cassandra.sidecar.common.server.utils.DriverUtils;
 import org.apache.cassandra.sidecar.common.server.utils.SidecarVersionProvider;
+import org.apache.cassandra.sidecar.config.SidecarConfiguration;
 import org.apache.cassandra.sidecar.utils.DigestAlgorithmProvider;
 import org.apache.cassandra.sidecar.utils.JdkMd5DigestProvider;
 import org.apache.cassandra.sidecar.utils.TimeProvider;
@@ -51,9 +52,9 @@ public class UtilitiesModule extends AbstractModule
 
     @Provides
     @Singleton
-    DnsResolver dnsResolver()
+    DnsResolver dnsResolver(SidecarConfiguration configuration)
     {
-        return DnsResolver.DEFAULT;
+        return configuration.serviceConfiguration().dnsResolver();
     }
 
     /**
diff --git 
a/server/src/test/integration/org/apache/cassandra/sidecar/coordination/MostReplicatedKeyspaceTokenZeroElectorateMembershipIntegrationTest.java
 
b/server/src/test/integration/org/apache/cassandra/sidecar/coordination/MostReplicatedKeyspaceTokenZeroElectorateMembershipIntegrationTest.java
index 82759a45..4e33620d 100644
--- 
a/server/src/test/integration/org/apache/cassandra/sidecar/coordination/MostReplicatedKeyspaceTokenZeroElectorateMembershipIntegrationTest.java
+++ 
b/server/src/test/integration/org/apache/cassandra/sidecar/coordination/MostReplicatedKeyspaceTokenZeroElectorateMembershipIntegrationTest.java
@@ -51,7 +51,7 @@ import 
org.apache.cassandra.sidecar.cluster.instance.InstanceMetadata;
 import org.apache.cassandra.sidecar.cluster.instance.InstanceMetadataImpl;
 import org.apache.cassandra.sidecar.common.server.CQLSessionProvider;
 import org.apache.cassandra.sidecar.common.server.JmxClient;
-import org.apache.cassandra.sidecar.common.server.dns.DnsResolver;
+import org.apache.cassandra.sidecar.common.server.dns.DnsResolvers;
 import org.apache.cassandra.sidecar.common.server.utils.DriverUtils;
 import 
org.apache.cassandra.sidecar.common.server.utils.MillisecondBoundConfiguration;
 import org.apache.cassandra.sidecar.config.SchemaKeyspaceConfiguration;
@@ -79,7 +79,7 @@ class 
MostReplicatedKeyspaceTokenZeroElectorateMembershipIntegrationTest
     private static final SidecarConfigurationImpl CONFIG = new 
SidecarConfigurationImpl();
     Vertx vertx = Vertx.vertx();
     DriverUtils driverUtils = new DriverUtils();
-    CassandraVersionProvider cassandraVersionProvider = 
cassandraVersionProvider(DnsResolver.DEFAULT);
+    CassandraVersionProvider cassandraVersionProvider = 
cassandraVersionProvider(DnsResolvers.DEFAULT);
     MetricRegistryFactory metricRegistryProvider = new 
MetricRegistryFactory("cassandra_sidecar", List.of(), List.of());
 
     @ParameterizedTest(name = "{index} => version {0}")
@@ -244,7 +244,7 @@ class 
MostReplicatedKeyspaceTokenZeroElectorateMembershipIntegrationTest
                                                       .delegate(delegate)
                                                       
.metricRegistry(instanceSpecificRegistry)
                                                       .build());
-        return new InstancesMetadataImpl(metadata, DnsResolver.DEFAULT);
+        return new InstancesMetadataImpl(metadata, DnsResolvers.DEFAULT);
     }
 
     void initializeSchema(AbstractCluster<?> cluster)
diff --git 
a/server/src/test/integration/org/apache/cassandra/sidecar/testing/IntegrationTestBase.java
 
b/server/src/test/integration/org/apache/cassandra/sidecar/testing/IntegrationTestBase.java
index a0ab333a..48228759 100644
--- 
a/server/src/test/integration/org/apache/cassandra/sidecar/testing/IntegrationTestBase.java
+++ 
b/server/src/test/integration/org/apache/cassandra/sidecar/testing/IntegrationTestBase.java
@@ -64,7 +64,7 @@ import org.apache.cassandra.sidecar.cluster.InstancesMetadata;
 import org.apache.cassandra.sidecar.cluster.instance.InstanceMetadata;
 import org.apache.cassandra.sidecar.common.server.data.Name;
 import org.apache.cassandra.sidecar.common.server.data.QualifiedTableName;
-import org.apache.cassandra.sidecar.common.server.dns.DnsResolver;
+import org.apache.cassandra.sidecar.common.server.dns.DnsResolvers;
 import org.apache.cassandra.sidecar.config.SslConfiguration;
 import org.apache.cassandra.sidecar.config.yaml.KeyStoreConfigurationImpl;
 import org.apache.cassandra.sidecar.config.yaml.SslConfigurationImpl;
@@ -157,7 +157,7 @@ public abstract class IntegrationTestBase
         {
             sslConfig = sslConfigWithTruststore();
         }
-        sidecarTestContext = CassandraSidecarTestContext.from(vertx, 
cassandraTestContext, DnsResolver.DEFAULT,
+        sidecarTestContext = CassandraSidecarTestContext.from(vertx, 
cassandraTestContext, DnsResolvers.DEFAULT,
                                                               
getInstancesToManage(clusterSize), sslConfig);
         
integrationTestModule.setCassandraSidecarTestContext(sidecarTestContext);
 
diff --git 
a/server/src/test/java/org/apache/cassandra/sidecar/config/SidecarConfigurationTest.java
 
b/server/src/test/java/org/apache/cassandra/sidecar/config/SidecarConfigurationTest.java
index 294ac1bd..e089e4d9 100644
--- 
a/server/src/test/java/org/apache/cassandra/sidecar/config/SidecarConfigurationTest.java
+++ 
b/server/src/test/java/org/apache/cassandra/sidecar/config/SidecarConfigurationTest.java
@@ -30,6 +30,7 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.io.TempDir;
 
 import com.fasterxml.jackson.databind.JsonMappingException;
+import org.apache.cassandra.sidecar.common.server.dns.DnsResolver;
 import 
org.apache.cassandra.sidecar.common.server.utils.MillisecondBoundConfiguration;
 import 
org.apache.cassandra.sidecar.config.yaml.MetricsFilteringConfigurationImpl;
 import org.apache.cassandra.sidecar.config.yaml.SidecarConfigurationImpl;
@@ -472,6 +473,35 @@ class SidecarConfigurationTest
         
assertThat(clusterLeaseConfig.electorateMembershipStrategy()).isEqualTo("MostReplicatedKeyspaceTokenZeroElectorateMembership");
     }
 
+    @Test
+    void testDnsResolverDefault() throws Exception
+    {
+        Path yamlPath = yaml("config/sidecar_single_instance.yaml");
+        SidecarConfiguration config = 
SidecarConfigurationImpl.readYamlConfiguration(yamlPath);
+        ServiceConfiguration serviceConfiguration = 
config.serviceConfiguration();
+        assertThat(serviceConfiguration).isNotNull();
+
+        DnsResolver dnsResolver = serviceConfiguration.dnsResolver();
+        assertThat(dnsResolver).isNotNull();
+        assertThat(dnsResolver.resolve("localhost")).isEqualTo("127.0.0.1");
+        
assertThat(dnsResolver.reverseResolve("127.0.0.1")).isEqualTo("localhost");
+    }
+
+    @Test
+    void testDnsResolverResolveToIp() throws Exception
+    {
+        String yaml = "sidecar:\n" +
+                "  dns_resolver: resolve_to_ip";
+        SidecarConfiguration config = 
SidecarConfigurationImpl.fromYamlString(yaml);
+        ServiceConfiguration serviceConfiguration = 
config.serviceConfiguration();
+        assertThat(serviceConfiguration).isNotNull();
+
+        DnsResolver dnsResolver = serviceConfiguration.dnsResolver();
+        assertThat(dnsResolver).isNotNull();
+        assertThat(dnsResolver.resolve("localhost")).isEqualTo("127.0.0.1");
+        
assertThat(dnsResolver.reverseResolve("127.0.0.1")).isEqualTo("127.0.0.1");
+    }
+
     @Test
     void testSidecarLiveMigrationConfiguration() throws IOException
     {
diff --git 
a/server/src/test/java/org/apache/cassandra/sidecar/snapshots/SnapshotUtils.java
 
b/server/src/test/java/org/apache/cassandra/sidecar/snapshots/SnapshotUtils.java
index 9f6eb74b..2044c020 100644
--- 
a/server/src/test/java/org/apache/cassandra/sidecar/snapshots/SnapshotUtils.java
+++ 
b/server/src/test/java/org/apache/cassandra/sidecar/snapshots/SnapshotUtils.java
@@ -38,7 +38,7 @@ import 
org.apache.cassandra.sidecar.cluster.instance.InstanceMetadataImpl;
 import org.apache.cassandra.sidecar.common.MockCassandraFactory;
 import org.apache.cassandra.sidecar.common.server.CQLSessionProvider;
 import org.apache.cassandra.sidecar.common.server.JmxClient;
-import org.apache.cassandra.sidecar.common.server.dns.DnsResolver;
+import org.apache.cassandra.sidecar.common.server.dns.DnsResolvers;
 import org.apache.cassandra.sidecar.common.server.utils.DriverUtils;
 import org.apache.cassandra.sidecar.metrics.MetricFilter;
 import org.apache.cassandra.sidecar.metrics.MetricRegistryFactory;
@@ -146,7 +146,7 @@ public class SnapshotUtils
                                                               
.metricRegistry(METRIC_REGISTRY_PROVIDER.getOrCreate(2))
                                                               .build();
         List<InstanceMetadata> instanceMetas = Arrays.asList(localhost, 
localhost2);
-        return new InstancesMetadataImpl(instanceMetas, DnsResolver.DEFAULT);
+        return new InstancesMetadataImpl(instanceMetas, DnsResolvers.DEFAULT);
     }
 
     public static List<String[]> mockSnapshotDirectories()
diff --git 
a/server/src/test/java/org/apache/cassandra/sidecar/tasks/CdcRawDirectorySpaceCleanerTest.java
 
b/server/src/test/java/org/apache/cassandra/sidecar/tasks/CdcRawDirectorySpaceCleanerTest.java
index c26aebd7..905a2e85 100644
--- 
a/server/src/test/java/org/apache/cassandra/sidecar/tasks/CdcRawDirectorySpaceCleanerTest.java
+++ 
b/server/src/test/java/org/apache/cassandra/sidecar/tasks/CdcRawDirectorySpaceCleanerTest.java
@@ -36,7 +36,7 @@ import com.codahale.metrics.MetricRegistry;
 import org.apache.cassandra.sidecar.cluster.InstancesMetadata;
 import org.apache.cassandra.sidecar.cluster.InstancesMetadataImpl;
 import org.apache.cassandra.sidecar.cluster.instance.InstanceMetadata;
-import org.apache.cassandra.sidecar.common.server.dns.DnsResolver;
+import org.apache.cassandra.sidecar.common.server.dns.DnsResolvers;
 import org.apache.cassandra.sidecar.config.CdcConfiguration;
 import org.apache.cassandra.sidecar.config.ServiceConfiguration;
 import org.apache.cassandra.sidecar.config.yaml.CdcConfigurationImpl;
@@ -143,7 +143,7 @@ public class CdcRawDirectorySpaceCleanerTest
         writeCdcSegment(cdcDir, TEST_INTACT_SEGMENT_FILE_NAME, 
RandomUtils.nextInt(128, 256), false, false, true);
 
         
when(instanceMetadata.dataDirs()).thenReturn(List.of(cdcDir.getParent()));
-        return new InstancesMetadataImpl(instanceMetadata, 
DnsResolver.DEFAULT);
+        return new InstancesMetadataImpl(instanceMetadata, 
DnsResolvers.DEFAULT);
     }
 
     private static void writeCdcSegment(File cdcDir, String filename, int 
size, boolean complete) throws IOException
diff --git 
a/server/src/test/java/org/apache/cassandra/sidecar/utils/InstanceMetadataFetcherTest.java
 
b/server/src/test/java/org/apache/cassandra/sidecar/utils/InstanceMetadataFetcherTest.java
index fbc8704f..20e8508e 100644
--- 
a/server/src/test/java/org/apache/cassandra/sidecar/utils/InstanceMetadataFetcherTest.java
+++ 
b/server/src/test/java/org/apache/cassandra/sidecar/utils/InstanceMetadataFetcherTest.java
@@ -30,7 +30,7 @@ import 
org.apache.cassandra.sidecar.cluster.CassandraAdapterDelegate;
 import org.apache.cassandra.sidecar.cluster.InstancesMetadataImpl;
 import org.apache.cassandra.sidecar.cluster.instance.InstanceMetadata;
 import org.apache.cassandra.sidecar.cluster.instance.InstanceMetadataImpl;
-import org.apache.cassandra.sidecar.common.server.dns.DnsResolver;
+import org.apache.cassandra.sidecar.common.server.dns.DnsResolvers;
 import org.apache.cassandra.sidecar.exceptions.CassandraUnavailableException;
 
 import static org.assertj.core.api.Assertions.assertThat;
@@ -48,7 +48,7 @@ class InstanceMetadataFetcherTest
         List<InstanceMetadata> instances = Arrays.asList(instance(1, 
"127.0.0.1", false),
                                                          instance(2, 
"127.0.0.2", true),
                                                          instance(3, 
"127.0.0.3", true));
-        InstancesMetadataImpl instancesMetadata = new 
InstancesMetadataImpl(instances, DnsResolver.DEFAULT);
+        InstancesMetadataImpl instancesMetadata = new 
InstancesMetadataImpl(instances, DnsResolvers.DEFAULT);
         InstanceMetadataFetcher fetcher = new 
InstanceMetadataFetcher(instancesMetadata);
         CassandraAdapterDelegate delegate = 
fetcher.callOnFirstAvailableInstance(InstanceMetadata::delegate);
         assertThat(delegate)
@@ -62,7 +62,7 @@ class InstanceMetadataFetcherTest
     {
         List<InstanceMetadata> instances = Arrays.asList(instance(1, 
"127.0.0.1", false),
                                                          instance(2, 
"127.0.0.2", false));
-        InstancesMetadataImpl instancesMetadata = new 
InstancesMetadataImpl(instances, DnsResolver.DEFAULT);
+        InstancesMetadataImpl instancesMetadata = new 
InstancesMetadataImpl(instances, DnsResolvers.DEFAULT);
         InstanceMetadataFetcher fetcher = new 
InstanceMetadataFetcher(instancesMetadata);
         assertThatThrownBy(() -> 
fetcher.callOnFirstAvailableInstance(InstanceMetadata::delegate))
         .isExactlyInstanceOf(CassandraUnavailableException.class)
@@ -73,7 +73,7 @@ class InstanceMetadataFetcherTest
     {
         InstanceMetadataImpl.Builder builder = InstanceMetadataImpl.builder()
                                                                    .id(id)
-                                                                   .host(host, 
DnsResolver.DEFAULT)
+                                                                   .host(host, 
DnsResolvers.DEFAULT)
                                                                    .port(9042)
                                                                    
.storageDir(tempDir.toString())
                                                                    
.metricRegistry(new MetricRegistry());


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


Reply via email to