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]


Reply via email to