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]