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 bab2da84 CASSSIDECAR-399: Adding storage_port to instance
configuration and metadata (#312)
bab2da84 is described below
commit bab2da8431296a3fe147397683b071d0dd7eafa0
Author: N V Harikrishna <[email protected]>
AuthorDate: Wed Feb 11 05:43:27 2026 +0530
CASSSIDECAR-399: Adding storage_port to instance configuration and metadata
(#312)
Patch by N V Harikrishna; reviewed by Francisco Guerrero, Yifan Cai for
CASSSIDECAR-399
---
CHANGES.txt | 1 +
conf/sidecar.yaml | 5 +++
examples/sidecar-ccm/conf/sidecar-ccm.yaml | 16 +++++++
.../testing/SharedClusterIntegrationTestBase.java | 2 +
...kenZeroElectorateMembershipIntegrationTest.java | 2 +
.../ProcessLifecycleProviderIntegrationTest.java | 1 +
.../sidecar/cluster/instance/InstanceMetadata.java | 5 +++
.../cluster/instance/InstanceMetadataImpl.java | 30 +++++++++++++
.../sidecar/config/InstanceConfiguration.java | 5 +++
.../config/yaml/InstanceConfigurationImpl.java | 18 ++++++++
.../sidecar/modules/ConfigurationModule.java | 1 +
.../testing/CassandraSidecarTestContext.java | 2 +
.../org/apache/cassandra/sidecar/TestModule.java | 1 +
.../sidecar/cluster/InstancesMetadataImplTest.java | 1 +
.../cluster/instance/InstanceMetadataImplTest.java | 50 ++++++++++++++++++++++
.../sidecar/config/SidecarConfigurationTest.java | 40 +++++++++++++++++
.../livemigration/InstanceFetcherTestModule.java | 1 +
.../LiveMigrationApiEnableDisableHandlerTest.java | 1 +
.../LiveMigrationFileStreamHandlerTest.java | 1 +
.../LiveMigrationListInstanceFilesHandlerTest.java | 1 +
.../LiveMigrationMapSidecarConfigImplTest.java | 1 +
.../lifecycle/ProcessLifecycleProviderTest.java | 1 +
.../lifecycle/ProcessRuntimeConfigurationTest.java | 1 +
.../LiveMigrationFileDownloaderTest.java | 1 +
.../cassandra/sidecar/snapshots/SnapshotUtils.java | 2 +
.../sidecar/utils/InstanceMetadataFetcherTest.java | 1 +
26 files changed, 191 insertions(+)
diff --git a/CHANGES.txt b/CHANGES.txt
index 9db7f235..0a423300 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,6 @@
0.3.0
-----
+ * Adding storage_port to instance configuration and metadata (CASSSIDECAR-399)
* Sidecar endpoint to support on-demand repair operation (CASSSIDECAR-268)
* Database access during auth flow is blocking event-loop thread
(CASSSIDECAR-369)
* Add default process-based lifecycle provider (CASSSIDECAR-340)
diff --git a/conf/sidecar.yaml b/conf/sidecar.yaml
index 1d6746fc..1ca7b0f2 100644
--- a/conf/sidecar.yaml
+++ b/conf/sidecar.yaml
@@ -24,6 +24,11 @@ cassandra_instances:
host: localhost1
port: 9042
+ # The storage port used for inter-node communication between Cassandra
nodes in a cluster.
+ # This port is used for internal gossip protocol, data replication, and
repair operations.
+ # Default: 7000
+ #storage_port: 7000
+
# The instance's storage directory as defined per the cassandra.storagedir
property
# which defaults to the $CASSANDRA_HOME/data directory, but can be
configured to any
# directory. By default, storage directory is the parent directory of data
dirs,
diff --git a/examples/sidecar-ccm/conf/sidecar-ccm.yaml
b/examples/sidecar-ccm/conf/sidecar-ccm.yaml
index 16f45096..25741836 100644
--- a/examples/sidecar-ccm/conf/sidecar-ccm.yaml
+++ b/examples/sidecar-ccm/conf/sidecar-ccm.yaml
@@ -23,6 +23,12 @@ cassandra_instances:
- id: 1
host: localhost1
port: 9042
+
+ # The storage port used for inter-node communication between Cassandra
nodes in a cluster.
+ # This port is used for internal gossip protocol, data replication, and
repair operations.
+ # Default: 7000
+ #storage_port: 7000
+
# The instance's storage directory as defined per the cassandra.storagedir
property
# which defaults to the $CASSANDRA_HOME/data directory, but can be
configured to any
# directory. By default, storage directory is the parent directory of data
dirs,
@@ -70,6 +76,11 @@ cassandra_instances:
host: localhost2
port: 9042
+ # The storage port used for inter-node communication between Cassandra
nodes in a cluster.
+ # This port is used for internal gossip protocol, data replication, and
repair operations.
+ # Default: 7000
+ #storage_port: 7000
+
# The instance's storage directory as defined per the cassandra.storagedir
property
# which defaults to the $CASSANDRA_HOME/data directory, but can be
configured to any
# directory. By default, storage directory is the parent directory of data
dirs,
@@ -117,6 +128,11 @@ cassandra_instances:
host: localhost3
port: 9042
+ # The storage port used for inter-node communication between Cassandra
nodes in a cluster.
+ # This port is used for internal gossip protocol, data replication, and
repair operations.
+ # Default: 7000
+ #storage_port: 7000
+
# The instance's storage directory as defined per the cassandra.storagedir
property
# which defaults to the $CASSANDRA_HOME/data directory, but can be
configured to any
# directory. By default, storage directory is the parent directory of data
dirs,
diff --git
a/integration-framework/src/main/java/org/apache/cassandra/sidecar/testing/SharedClusterIntegrationTestBase.java
b/integration-framework/src/main/java/org/apache/cassandra/sidecar/testing/SharedClusterIntegrationTestBase.java
index 900fd513..2f20ed7e 100644
---
a/integration-framework/src/main/java/org/apache/cassandra/sidecar/testing/SharedClusterIntegrationTestBase.java
+++
b/integration-framework/src/main/java/org/apache/cassandra/sidecar/testing/SharedClusterIntegrationTestBase.java
@@ -893,6 +893,7 @@ public abstract class SharedClusterIntegrationTestBase
hostName = ipAddress;
}
int port = tryGetIntConfig(config, "native_transport_port", 9042);
+ int storagePort = tryGetIntConfig(config, "storage_port", 7000);
String[] dataDirectories = (String[])
config.get("data_file_directories");
String stagingDir = stagingDir(dataDirectories);
@@ -917,6 +918,7 @@ public abstract class SharedClusterIntegrationTestBase
.id(config.num())
.host(hostName)
.port(port)
+ .storagePort(storagePort)
.dataDirs(List.of(dataDirectories))
.cdcDir(config.getString("cdc_raw_directory"))
.commitlogDir(config.getString("commitlog_directory"))
diff --git
a/integration-tests/src/integrationTest/org/apache/cassandra/sidecar/coordination/MostReplicatedKeyspaceTokenZeroElectorateMembershipIntegrationTest.java
b/integration-tests/src/integrationTest/org/apache/cassandra/sidecar/coordination/MostReplicatedKeyspaceTokenZeroElectorateMembershipIntegrationTest.java
index 34e6de98..d25d2bd7 100644
---
a/integration-tests/src/integrationTest/org/apache/cassandra/sidecar/coordination/MostReplicatedKeyspaceTokenZeroElectorateMembershipIntegrationTest.java
+++
b/integration-tests/src/integrationTest/org/apache/cassandra/sidecar/coordination/MostReplicatedKeyspaceTokenZeroElectorateMembershipIntegrationTest.java
@@ -208,6 +208,7 @@ class
MostReplicatedKeyspaceTokenZeroElectorateMembershipIntegrationTest
MetricRegistry instanceSpecificRegistry =
metricRegistryProvider.getOrCreate(config.num());
String hostName = JMXUtil.getJmxHost(config);
int nativeTransportPort = tryGetIntConfig(config,
"native_transport_port", 9042);
+ int storagePort = tryGetIntConfig(config, "storage_port", 7000);
String[] dataDirectories = (String[])
config.get("data_file_directories");
JmxClient jmxClient = JmxClient.builder()
@@ -238,6 +239,7 @@ class
MostReplicatedKeyspaceTokenZeroElectorateMembershipIntegrationTest
.id(config.num())
.host(config.broadcastAddress().getAddress().getHostAddress())
.port(nativeTransportPort)
+ .storagePort(storagePort)
.dataDirs(Arrays.asList(dataDirectories))
.cdcDir(config.getString("cdc_raw_directory"))
.commitlogDir(config.getString("commitlog_directory"))
diff --git
a/integration-tests/src/integrationTest/org/apache/cassandra/sidecar/lifecycle/ProcessLifecycleProviderIntegrationTest.java
b/integration-tests/src/integrationTest/org/apache/cassandra/sidecar/lifecycle/ProcessLifecycleProviderIntegrationTest.java
index f93eef98..d5209ea3 100644
---
a/integration-tests/src/integrationTest/org/apache/cassandra/sidecar/lifecycle/ProcessLifecycleProviderIntegrationTest.java
+++
b/integration-tests/src/integrationTest/org/apache/cassandra/sidecar/lifecycle/ProcessLifecycleProviderIntegrationTest.java
@@ -226,6 +226,7 @@ class ProcessLifecycleProviderIntegrationTest
{
return InstanceMetadataImpl.builder()
.id(TEST_NODE_ID)
+ .storagePort(7000)
.metricRegistry(METRIC_REGISTRY)
.storageDir("/tmp/storage_dir")
.build();
diff --git
a/server/src/main/java/org/apache/cassandra/sidecar/cluster/instance/InstanceMetadata.java
b/server/src/main/java/org/apache/cassandra/sidecar/cluster/instance/InstanceMetadata.java
index 0118575d..589f5f1d 100644
---
a/server/src/main/java/org/apache/cassandra/sidecar/cluster/instance/InstanceMetadata.java
+++
b/server/src/main/java/org/apache/cassandra/sidecar/cluster/instance/InstanceMetadata.java
@@ -64,6 +64,11 @@ public interface InstanceMetadata
*/
int port();
+ /**
+ * @return the storage port number used for inter-node communication of
the Cassandra instance
+ */
+ int storagePort();
+
/**
* @return a list of data directories of cassandra instance
*/
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 6d6410db..b33c5d5d 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
@@ -56,6 +56,7 @@ public class InstanceMetadataImpl implements InstanceMetadata
private final int id;
private final String host;
private final int port;
+ private final int storagePort;
private final List<String> dataDirs;
private final String stagingDir;
@Nullable
@@ -80,6 +81,7 @@ public class InstanceMetadataImpl implements InstanceMetadata
dnsResolver = builder.dnsResolver;
ipAddress = builder.ipAddress;
port = builder.port;
+ storagePort = builder.storagePort;
delegate = builder.delegate;
metrics = builder.metrics;
@@ -131,6 +133,15 @@ public class InstanceMetadataImpl implements
InstanceMetadata
return port;
}
+ /**
+ * @return the storage port configured for Cassandra instance (default:
7000)
+ */
+ @Override
+ public int storagePort()
+ {
+ return storagePort;
+ }
+
@Override
@NotNull
public List<String> dataDirs()
@@ -224,6 +235,7 @@ public class InstanceMetadataImpl implements
InstanceMetadata
"id=" + id +
", host='" + host + '\'' +
", port=" + port +
+ ", storagePort=" + storagePort +
'}';
}
@@ -237,6 +249,7 @@ public class InstanceMetadataImpl implements
InstanceMetadata
protected String host;
protected String ipAddress;
protected int port;
+ protected int storagePort;
protected String storageDir;
protected List<String> dataDirs;
protected String stagingDir;
@@ -260,6 +273,7 @@ public class InstanceMetadataImpl implements
InstanceMetadata
host = instanceMetadata.host;
ipAddress = instanceMetadata.ipAddress;
port = instanceMetadata.port;
+ storagePort = instanceMetadata.storagePort;
dataDirs = new ArrayList<>(instanceMetadata.dataDirs);
stagingDir = instanceMetadata.stagingDir;
cdcDir = instanceMetadata.cdcDir;
@@ -327,6 +341,17 @@ public class InstanceMetadataImpl implements
InstanceMetadata
return update(b -> b.port = port);
}
+ /**
+ * Sets the {@code storagePort} and returns a reference to this
Builder enabling method chaining.
+ *
+ * @param storagePort the {@code storagePort} to set
+ * @return a reference to this Builder
+ */
+ public Builder storagePort(int storagePort)
+ {
+ return update(b -> b.storagePort = storagePort);
+ }
+
/**
* Sets the {@code storageDir} and returns a reference to this Builder
enabling method chaining.
*
@@ -471,6 +496,11 @@ public class InstanceMetadataImpl implements
InstanceMetadata
metrics = new InstanceMetricsImpl(metricRegistry);
+ if (storagePort < 1 || storagePort > 65535)
+ {
+ throw new IllegalArgumentException("storage_port must be
between 1 and 65535, but got: " + storagePort);
+ }
+
return new InstanceMetadataImpl(this);
}
diff --git
a/server/src/main/java/org/apache/cassandra/sidecar/config/InstanceConfiguration.java
b/server/src/main/java/org/apache/cassandra/sidecar/config/InstanceConfiguration.java
index f91b2714..2e534d22 100644
---
a/server/src/main/java/org/apache/cassandra/sidecar/config/InstanceConfiguration.java
+++
b/server/src/main/java/org/apache/cassandra/sidecar/config/InstanceConfiguration.java
@@ -41,6 +41,11 @@ public interface InstanceConfiguration
*/
int port();
+ /**
+ * @return the storage port number used for inter-node communication of
the Cassandra instance
+ */
+ int storagePort();
+
/**
* @return storage directory of Cassandra instance
*/
diff --git
a/server/src/main/java/org/apache/cassandra/sidecar/config/yaml/InstanceConfigurationImpl.java
b/server/src/main/java/org/apache/cassandra/sidecar/config/yaml/InstanceConfigurationImpl.java
index b952ca24..4ce45e41 100644
---
a/server/src/main/java/org/apache/cassandra/sidecar/config/yaml/InstanceConfigurationImpl.java
+++
b/server/src/main/java/org/apache/cassandra/sidecar/config/yaml/InstanceConfigurationImpl.java
@@ -33,9 +33,15 @@ import org.jetbrains.annotations.Nullable;
*/
public class InstanceConfigurationImpl implements InstanceConfiguration
{
+ /**
+ * Default storage port for Cassandra inter-node communication.
+ */
+ public static final int DEFAULT_STORAGE_PORT = 7000;
+
protected final int id;
protected final String host;
protected final int port;
+ protected final int storagePort;
protected final String storageDir;
protected final List<String> dataDirs;
protected final String stagingDir;
@@ -55,6 +61,7 @@ public class InstanceConfigurationImpl implements
InstanceConfiguration
public InstanceConfigurationImpl(@JsonProperty("id") int id,
@NotNull @JsonProperty("host") String
host,
@JsonProperty("port") int port,
+ @Nullable @JsonProperty("storage_port")
Integer storagePort,
@Nullable @JsonProperty("storage_dir")
String storageDir,
@Nullable @JsonProperty("data_dirs")
List<String> dataDirs,
@NotNull @JsonProperty("staging_dir")
String stagingDir,
@@ -73,6 +80,7 @@ public class InstanceConfigurationImpl implements
InstanceConfiguration
this.id = id;
this.host = host;
this.port = port;
+ this.storagePort = storagePort != null ? storagePort :
DEFAULT_STORAGE_PORT;
this.storageDir = storageDir;
this.dataDirs = dataDirs != null ?
Collections.unmodifiableList(dataDirs) : null;
this.stagingDir = stagingDir;
@@ -119,6 +127,16 @@ public class InstanceConfigurationImpl implements
InstanceConfiguration
return port;
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @JsonProperty("storage_port")
+ public int storagePort()
+ {
+ return storagePort;
+ }
+
@Override
@JsonProperty("storage_dir")
public String storageDir()
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 d91107b5..785104b6 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
@@ -244,6 +244,7 @@ public class ConfigurationModule extends AbstractModule
.id(cassandraInstance.id())
.host(host, dnsResolver)
.port(port)
+
.storagePort(cassandraInstance.storagePort())
.storageDir(cassandraInstance.storageDir())
.dataDirs(cassandraInstance.dataDirs())
.stagingDir(cassandraInstance.stagingDir())
diff --git
a/server/src/test/integration/org/apache/cassandra/sidecar/testing/CassandraSidecarTestContext.java
b/server/src/test/integration/org/apache/cassandra/sidecar/testing/CassandraSidecarTestContext.java
index f502e801..0cd96403 100644
---
a/server/src/test/integration/org/apache/cassandra/sidecar/testing/CassandraSidecarTestContext.java
+++
b/server/src/test/integration/org/apache/cassandra/sidecar/testing/CassandraSidecarTestContext.java
@@ -264,6 +264,7 @@ public class CassandraSidecarTestContext implements
AutoCloseable
IInstanceConfig config = configs.get(i);
String hostName = JMXUtil.getJmxHost(config);
int nativeTransportPort = tryGetIntConfig(config,
"native_transport_port", 9042);
+ int storagePort = tryGetIntConfig(config, "storage_port", 7000);
// The in-jvm dtest framework sometimes returns a cluster before
all the jmx infrastructure is initialized.
// In these cases, we want to wait longer than the default
retry/delay settings to connect.
JmxClient jmxClient = JmxClient.builder()
@@ -297,6 +298,7 @@ public class CassandraSidecarTestContext implements
AutoCloseable
.id(i + 1)
.host(config.broadcastAddress().getAddress().getHostAddress())
.port(nativeTransportPort)
+ .storagePort(storagePort)
.dataDirs(Arrays.asList(dataDirectories))
.cdcDir(config.getString("cdc_raw_directory"))
.commitlogDir(config.getString("commitlog_directory"))
diff --git a/server/src/test/java/org/apache/cassandra/sidecar/TestModule.java
b/server/src/test/java/org/apache/cassandra/sidecar/TestModule.java
index 5644f67f..9fdf5c15 100644
--- a/server/src/test/java/org/apache/cassandra/sidecar/TestModule.java
+++ b/server/src/test/java/org/apache/cassandra/sidecar/TestModule.java
@@ -223,6 +223,7 @@ public class TestModule extends AbstractModule
.id(id)
.host(host)
.port(6475)
+ .storagePort(6476)
.stagingDir(stagingDir)
.storageDir(storageDir)
.dataDirs(List.of(dataDir))
diff --git
a/server/src/test/java/org/apache/cassandra/sidecar/cluster/InstancesMetadataImplTest.java
b/server/src/test/java/org/apache/cassandra/sidecar/cluster/InstancesMetadataImplTest.java
index 16832286..46fd414c 100644
---
a/server/src/test/java/org/apache/cassandra/sidecar/cluster/InstancesMetadataImplTest.java
+++
b/server/src/test/java/org/apache/cassandra/sidecar/cluster/InstancesMetadataImplTest.java
@@ -154,6 +154,7 @@ class InstancesMetadataImplTest
.id(id)
.host(hostNameOrIp, localhostResolver)
.port(9042)
+ .storagePort(7000)
.storageDir(root)
.metricRegistry(METRIC_REGISTRY)
.build();
diff --git
a/server/src/test/java/org/apache/cassandra/sidecar/cluster/instance/InstanceMetadataImplTest.java
b/server/src/test/java/org/apache/cassandra/sidecar/cluster/instance/InstanceMetadataImplTest.java
index 4e0a9ee7..32c0ffa7 100644
---
a/server/src/test/java/org/apache/cassandra/sidecar/cluster/instance/InstanceMetadataImplTest.java
+++
b/server/src/test/java/org/apache/cassandra/sidecar/cluster/instance/InstanceMetadataImplTest.java
@@ -27,6 +27,8 @@ import java.util.List;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
import com.codahale.metrics.MetricRegistry;
import org.apache.cassandra.sidecar.common.server.dns.DnsResolver;
@@ -41,6 +43,7 @@ class InstanceMetadataImplTest
private static final int ID = 123;
private static final String HOST = "localhost";
private static final int PORT = 12345;
+ private static final int STORAGE_PORT = 17986;
private static final String DATA_DIR_1 = "test/data/data1";
private static final String DATA_DIR_2 = "test/data/data2";
private static final String CDC_DIR = "cdc_dir";
@@ -64,6 +67,7 @@ class InstanceMetadataImplTest
assertThat(metadata.id()).isEqualTo(ID);
assertThat(metadata.host()).isEqualTo(HOST);
assertThat(metadata.port()).isEqualTo(PORT);
+ assertThat(metadata.storagePort()).isEqualTo(STORAGE_PORT);
assertThat(metadata.dataDirs()).contains(rootDir + "/" + DATA_DIR_1,
rootDir + "/" + DATA_DIR_2);
assertThat(metadata.cdcDir()).isEqualTo(rootDir + "/" + CDC_DIR);
assertThat(metadata.stagingDir()).isEqualTo(rootDir + "/" +
STAGING_DIR);
@@ -99,6 +103,7 @@ class InstanceMetadataImplTest
.id(ID)
.host(HOST)
.port(PORT)
+
.storagePort(STORAGE_PORT)
.metricRegistry(METRIC_REGISTRY)
.dataDirs(Collections.singletonList(rootDir + "/" + DATA_DIR_1))
.storageDir(rootDir)
@@ -121,6 +126,7 @@ class InstanceMetadataImplTest
.id(ID)
.host(HOST)
.port(PORT)
+ .storagePort(STORAGE_PORT)
.metricRegistry(METRIC_REGISTRY)
.build())
.withMessageContaining("dataDirs are required when storageDir is not
configured");
@@ -134,6 +140,7 @@ class InstanceMetadataImplTest
.id(ID)
.host(HOST)
.port(PORT)
+ .storagePort(STORAGE_PORT)
.metricRegistry(METRIC_REGISTRY)
.dataDirs(Collections.emptyList())
.build())
@@ -147,6 +154,7 @@ class InstanceMetadataImplTest
.id(ID)
.host(HOST)
.port(PORT)
+
.storagePort(STORAGE_PORT)
.metricRegistry(METRIC_REGISTRY)
.dataDirs(Collections.singletonList("/tmp/data"))
.build())
@@ -160,6 +168,7 @@ class InstanceMetadataImplTest
.id(ID)
.host(HOST)
.port(PORT)
+
.storagePort(STORAGE_PORT)
.metricRegistry(METRIC_REGISTRY)
.dataDirs(Collections.singletonList("/tmp/data"))
.commitlogDir("/tmp/commitlog")
@@ -174,6 +183,7 @@ class InstanceMetadataImplTest
.id(ID)
.host(HOST)
.port(PORT)
+
.storagePort(STORAGE_PORT)
.metricRegistry(METRIC_REGISTRY)
.dataDirs(Collections.singletonList("/tmp/data"))
.commitlogDir("/tmp/commitlog")
@@ -190,7 +200,9 @@ class InstanceMetadataImplTest
.id(ID)
.host(HOST)
.port(PORT)
+
.storagePort(STORAGE_PORT)
.metricRegistry(METRIC_REGISTRY)
+
.storagePort(STORAGE_PORT)
.storageDir(rootDir)
.build();
assertThat(metadata.dataDirs()).containsExactly(rootDir + "/data");
@@ -200,6 +212,38 @@ class InstanceMetadataImplTest
assertThat(metadata.savedCachesDir()).isEqualTo(rootDir +
"/saved_caches");
}
+ @ParameterizedTest(name = "{index} => valid storagePort={0}")
+ @ValueSource(ints = { 1, 65535, 7005})
+ void testCustomStoragePort(int storagePort)
+ {
+ String rootDir = tempDir.toString();
+ InstanceMetadata metadata = InstanceMetadataImpl.builder()
+ .id(ID)
+ .host(HOST)
+ .port(PORT)
+
.storagePort(storagePort)
+
.metricRegistry(METRIC_REGISTRY)
+ .storageDir(rootDir)
+ .build();
+ assertThat(metadata.storagePort()).isEqualTo(storagePort);
+ }
+
+ @ParameterizedTest(name = "{index} => invalid storagePort={0}")
+ @ValueSource(ints = { 0, -1, 65536 })
+ void testInvalidStoragePort(int storagePort)
+ {
+ String rootDir = tempDir.toString();
+ assertThatThrownBy(() -> InstanceMetadataImpl.builder()
+ .id(ID)
+ .host(HOST)
+ .port(PORT)
+ .storagePort(storagePort)
+
.metricRegistry(METRIC_REGISTRY)
+ .storageDir(rootDir)
+ .build())
+ .isInstanceOf(IllegalArgumentException.class);
+ }
+
@Test
void testCustomDirectories()
{
@@ -208,6 +252,7 @@ class InstanceMetadataImplTest
.id(ID)
.host(HOST)
.port(PORT)
+
.storagePort(STORAGE_PORT)
.metricRegistry(METRIC_REGISTRY)
.storageDir(rootDir)
.cdcDir(rootDir +
"/customcdcdir")
@@ -222,6 +267,7 @@ class InstanceMetadataImplTest
.id(ID)
.host(HOST)
.port(PORT)
+ .storagePort(STORAGE_PORT)
.metricRegistry(METRIC_REGISTRY)
.storageDir(rootDir)
.hintsDir(rootDir + "/customhints")
@@ -236,6 +282,7 @@ class InstanceMetadataImplTest
.id(ID)
.host(HOST)
.port(PORT)
+ .storagePort(STORAGE_PORT)
.metricRegistry(METRIC_REGISTRY)
.storageDir(rootDir)
.commitlogDir(rootDir +
"/customcommitlog")
@@ -250,6 +297,7 @@ class InstanceMetadataImplTest
.id(ID)
.host(HOST)
.port(PORT)
+ .storagePort(STORAGE_PORT)
.metricRegistry(METRIC_REGISTRY)
.storageDir(rootDir)
.savedCachesDir(rootDir +
"/customsaved")
@@ -264,6 +312,7 @@ class InstanceMetadataImplTest
.id(ID)
.host(HOST)
.port(PORT)
+ .storagePort(STORAGE_PORT)
.metricRegistry(METRIC_REGISTRY)
.storageDir(rootDir)
.dataDirs(Arrays.asList("/tmp/data/dir_1", "/tmp/data/dir_3"))
@@ -311,6 +360,7 @@ class InstanceMetadataImplTest
.id(ID)
.host(HOST)
.port(PORT)
+ .storagePort(STORAGE_PORT)
.dataDirs(dataDirs)
.cdcDir(rootDir + "/" + CDC_DIR)
.stagingDir(rootDir + "/" + STAGING_DIR)
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 b11f582c..e33463d9 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
@@ -39,6 +39,7 @@ import
org.apache.cassandra.sidecar.exceptions.ConfigurationException;
import org.assertj.core.api.Condition;
import static
org.apache.cassandra.sidecar.common.ResourceUtils.writeResourceToPath;
+import static
org.apache.cassandra.sidecar.config.yaml.InstanceConfigurationImpl.DEFAULT_STORAGE_PORT;
import static
org.apache.cassandra.sidecar.config.yaml.MetricsFilteringConfigurationImpl.EQUALS_TYPE;
import static
org.apache.cassandra.sidecar.config.yaml.MetricsFilteringConfigurationImpl.REGEX_TYPE;
import static
org.apache.cassandra.sidecar.config.yaml.VertxMetricsConfigurationImpl.DEFAULT_JMX_DOMAIN_NAME;
@@ -588,6 +589,45 @@ class SidecarConfigurationTest
assertThat(repairConfig.repairPollInterval()).isEqualTo(MillisecondBoundConfiguration.parse("500ms"));
}
+ @Test
+ void testConfigWithStoragePort() throws IOException
+ {
+ // Test with explicit storage_port
+ String yamlWithStoragePort = "cassandra_instances:\n" +
+ " - id: 1\n" +
+ " host: localhost1\n" +
+ " port: 9042\n" +
+ " storage_port: 7001\n" +
+ " storage_dir: /var/lib/cassandra\n" +
+ " staging_dir:
/var/lib/cassandra/staging\n" +
+ " jmx_host: 127.0.0.1\n" +
+ " jmx_port: 7199\n" +
+ " jmx_ssl_enabled: false";
+ SidecarConfigurationImpl configWithStoragePort =
SidecarConfigurationImpl.fromYamlString(yamlWithStoragePort);
+
assertThat(configWithStoragePort.cassandraInstances()).isNotNull().hasSize(1);
+ InstanceConfiguration instance1 =
configWithStoragePort.cassandraInstances().get(0);
+ assertThat(instance1.storagePort()).isEqualTo(7001);
+ }
+
+ @Test
+ void testConfigWithoutStoragePort() throws IOException
+ {
+ // Test without storage_port (should return null)
+ String yamlWithoutStoragePort = "cassandra_instances:\n" +
+ " - id: 2\n" +
+ " host: localhost2\n" +
+ " port: 9042\n" +
+ " storage_dir:
/var/lib/cassandra\n" +
+ " staging_dir:
/var/lib/cassandra/staging\n" +
+ " jmx_host: 127.0.0.1\n" +
+ " jmx_port: 7199\n" +
+ " jmx_ssl_enabled: false";
+ SidecarConfigurationImpl configWithoutStoragePort =
SidecarConfigurationImpl.fromYamlString(yamlWithoutStoragePort);
+
assertThat(configWithoutStoragePort.cassandraInstances()).isNotNull().hasSize(1);
+ InstanceConfiguration instance2 =
configWithoutStoragePort.cassandraInstances().get(0);
+ assertThat(instance2.storagePort()).isEqualTo(DEFAULT_STORAGE_PORT);
+ }
+
void validateSingleInstanceSidecarConfiguration(SidecarConfiguration
config)
{
assertThat(config.cassandraInstances()).isNotNull().hasSize(1);
diff --git
a/server/src/test/java/org/apache/cassandra/sidecar/handlers/livemigration/InstanceFetcherTestModule.java
b/server/src/test/java/org/apache/cassandra/sidecar/handlers/livemigration/InstanceFetcherTestModule.java
index 98ee4bd2..915bfc03 100644
---
a/server/src/test/java/org/apache/cassandra/sidecar/handlers/livemigration/InstanceFetcherTestModule.java
+++
b/server/src/test/java/org/apache/cassandra/sidecar/handlers/livemigration/InstanceFetcherTestModule.java
@@ -76,6 +76,7 @@ class InstanceFetcherTestModule extends AbstractModule
return InstanceMetadataImpl.builder()
.id(id)
.host(host)
+ .storagePort(7000)
.storageDir(storageDir.toString())
.stagingDir(storageDir.resolve("staging").toString())
.metricRegistry(new MetricRegistry())
diff --git
a/server/src/test/java/org/apache/cassandra/sidecar/handlers/livemigration/LiveMigrationApiEnableDisableHandlerTest.java
b/server/src/test/java/org/apache/cassandra/sidecar/handlers/livemigration/LiveMigrationApiEnableDisableHandlerTest.java
index c76c8bfc..1c2f4ad0 100644
---
a/server/src/test/java/org/apache/cassandra/sidecar/handlers/livemigration/LiveMigrationApiEnableDisableHandlerTest.java
+++
b/server/src/test/java/org/apache/cassandra/sidecar/handlers/livemigration/LiveMigrationApiEnableDisableHandlerTest.java
@@ -70,6 +70,7 @@ class LiveMigrationApiEnableDisableHandlerTest
.id(id)
.host(host)
.port(9042)
+ .storagePort(7000)
.dataDirs(List.of(rootDir + "/data0",
rootDir + "/data1"))
.hintsDir(rootDir + "/hints")
.commitlogDir(rootDir + "/commitlog")
diff --git
a/server/src/test/java/org/apache/cassandra/sidecar/handlers/livemigration/LiveMigrationFileStreamHandlerTest.java
b/server/src/test/java/org/apache/cassandra/sidecar/handlers/livemigration/LiveMigrationFileStreamHandlerTest.java
index df9f0011..8213e454 100644
---
a/server/src/test/java/org/apache/cassandra/sidecar/handlers/livemigration/LiveMigrationFileStreamHandlerTest.java
+++
b/server/src/test/java/org/apache/cassandra/sidecar/handlers/livemigration/LiveMigrationFileStreamHandlerTest.java
@@ -127,6 +127,7 @@ class LiveMigrationFileStreamHandlerTest
.id(instanceId)
.host(instanceIp)
.port(9042)
+ .storagePort(7000)
.dataDirs(dataDirs)
.hintsDir(root + "/hints")
.commitlogDir(root + "/commitlog")
diff --git
a/server/src/test/java/org/apache/cassandra/sidecar/handlers/livemigration/LiveMigrationListInstanceFilesHandlerTest.java
b/server/src/test/java/org/apache/cassandra/sidecar/handlers/livemigration/LiveMigrationListInstanceFilesHandlerTest.java
index 7b681a04..b0337aa1 100644
---
a/server/src/test/java/org/apache/cassandra/sidecar/handlers/livemigration/LiveMigrationListInstanceFilesHandlerTest.java
+++
b/server/src/test/java/org/apache/cassandra/sidecar/handlers/livemigration/LiveMigrationListInstanceFilesHandlerTest.java
@@ -152,6 +152,7 @@ class LiveMigrationListInstanceFilesHandlerTest
.id(instanceId)
.host(instanceIp)
.port(9042)
+ .storagePort(7000)
.dataDirs(dataDirs)
.hintsDir(root + "/hints")
.commitlogDir(root + "/commitlog")
diff --git
a/server/src/test/java/org/apache/cassandra/sidecar/handlers/livemigration/LiveMigrationMapSidecarConfigImplTest.java
b/server/src/test/java/org/apache/cassandra/sidecar/handlers/livemigration/LiveMigrationMapSidecarConfigImplTest.java
index 7396cc3e..12bf6a10 100644
---
a/server/src/test/java/org/apache/cassandra/sidecar/handlers/livemigration/LiveMigrationMapSidecarConfigImplTest.java
+++
b/server/src/test/java/org/apache/cassandra/sidecar/handlers/livemigration/LiveMigrationMapSidecarConfigImplTest.java
@@ -116,6 +116,7 @@ class LiveMigrationMapSidecarConfigImplTest
InstanceMetadata instanceMetadata(String host, int id)
{
return InstanceMetadataImpl.builder().host(host).id(id).port(9042)
+ .storagePort(7000)
.storageDir(tempDirPath.toAbsolutePath() +
"/" + host)
.metricRegistry(new
MetricRegistry()).build();
}
diff --git
a/server/src/test/java/org/apache/cassandra/sidecar/lifecycle/ProcessLifecycleProviderTest.java
b/server/src/test/java/org/apache/cassandra/sidecar/lifecycle/ProcessLifecycleProviderTest.java
index 555e094f..eb111a9b 100644
---
a/server/src/test/java/org/apache/cassandra/sidecar/lifecycle/ProcessLifecycleProviderTest.java
+++
b/server/src/test/java/org/apache/cassandra/sidecar/lifecycle/ProcessLifecycleProviderTest.java
@@ -712,6 +712,7 @@ public class ProcessLifecycleProviderTest
{
return InstanceMetadataImpl.builder()
.id(instanceId)
+ .storagePort(7000)
.metricRegistry(METRIC_REGISTRY)
.storageDir("/custom/storage/dir")
.lifecycleOptions(lifecycleOptions)
diff --git
a/server/src/test/java/org/apache/cassandra/sidecar/lifecycle/ProcessRuntimeConfigurationTest.java
b/server/src/test/java/org/apache/cassandra/sidecar/lifecycle/ProcessRuntimeConfigurationTest.java
index cfd4943f..14eb6b4b 100644
---
a/server/src/test/java/org/apache/cassandra/sidecar/lifecycle/ProcessRuntimeConfigurationTest.java
+++
b/server/src/test/java/org/apache/cassandra/sidecar/lifecycle/ProcessRuntimeConfigurationTest.java
@@ -336,6 +336,7 @@ class ProcessRuntimeConfigurationTest
{
return InstanceMetadataImpl.builder()
.id(1)
+ .storagePort(7000)
.metricRegistry(METRIC_REGISTRY)
.storageDir("/tmp/storage_dir")
.build();
diff --git
a/server/src/test/java/org/apache/cassandra/sidecar/livemigration/LiveMigrationFileDownloaderTest.java
b/server/src/test/java/org/apache/cassandra/sidecar/livemigration/LiveMigrationFileDownloaderTest.java
index dcfd2826..194683db 100644
---
a/server/src/test/java/org/apache/cassandra/sidecar/livemigration/LiveMigrationFileDownloaderTest.java
+++
b/server/src/test/java/org/apache/cassandra/sidecar/livemigration/LiveMigrationFileDownloaderTest.java
@@ -1366,6 +1366,7 @@ class LiveMigrationFileDownloaderTest
.storageDir(storageDir)
.metricRegistry(new MetricRegistry())
.id(1)
+
.storagePort(7000)
.build())
.liveMigrationConfiguration(liveMigrationConfig)
.source(SOURCE)
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 2044c020..ab956a1b 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
@@ -129,6 +129,7 @@ public class SnapshotUtils
.id(1)
.host("localhost")
.port(9043)
+ .storagePort(7000)
.storageDir(rootPath)
.dataDirs(Collections.singletonList(rootPath + "/d1"))
.stagingDir(stagingDir)
@@ -139,6 +140,7 @@ public class SnapshotUtils
.id(2)
.host("localhost2")
.port(9043)
+
.storagePort(7000)
.storageDir(rootPath)
.dataDirs(Collections.singletonList(rootPath + "/d2"))
.stagingDir(stagingDir)
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 20e8508e..fb9bfe88 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
@@ -75,6 +75,7 @@ class InstanceMetadataFetcherTest
.id(id)
.host(host,
DnsResolvers.DEFAULT)
.port(9042)
+
.storagePort(7000)
.storageDir(tempDir.toString())
.metricRegistry(new MetricRegistry());
if (isAvailable)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]