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

jeetkundoug pushed a commit to branch cassandra-4.0
in repository https://gitbox.apache.org/repos/asf/cassandra.git


The following commit(s) were added to refs/heads/cassandra-4.0 by this push:
     new aa0e2f1631 CASSANDRA-20884 - Move JMX classes to the in-jvm-dtest API 
project
aa0e2f1631 is described below

commit aa0e2f1631ae343e35334e5419b193a9a1cfa0a6
Author: Doug Rohrer <[email protected]>
AuthorDate: Wed Sep 3 17:01:33 2025 -0400

    CASSANDRA-20884 - Move JMX classes to the in-jvm-dtest API project
    
    patch by Doug Rohrer; reviewed by Francisco Guerrero and Bernardo Botella 
Corbi for CASSANDRA-20884
---
 CHANGES.txt                                        |  3 +
 build.xml                                          |  2 +-
 ide/nbproject/project.xml                          |  2 +-
 .../utils/RMIClientSocketFactoryImpl.java          | 82 --------------------
 .../distributed/impl/AbstractCluster.java          | 10 +--
 .../impl/CollectingRMIServerSocketFactoryImpl.java | 87 ----------------------
 .../cassandra/distributed/impl/Instance.java       |  3 -
 .../cassandra/distributed/impl/IsolatedJmx.java    |  4 +-
 8 files changed, 11 insertions(+), 182 deletions(-)

diff --git a/CHANGES.txt b/CHANGES.txt
index 57e633f2a4..ddbee6860e 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,3 +1,6 @@
+4.0.20
+ * Updated dtest-api to 0.0.18 and removed JMX-related classes that now live 
in the dtest-api (CASSANDRA-20884)
+
 4.0.19
  * Fixed incorrect error message constant for keyspace name length validation 
(CASSANDRA-20915)
  * update shaded cassandra-driver-core to 3.11.5 (CASSANDRA-20904)
diff --git a/build.xml b/build.xml
index 6f71ac762b..1682bc4ace 100644
--- a/build.xml
+++ b/build.xml
@@ -589,7 +589,7 @@
           <dependency groupId="com.google.code.java-allocation-instrumenter" 
artifactId="java-allocation-instrumenter" 
version="${allocation-instrumenter.version}" scope="test">
             <exclusion groupId="com.google.guava" artifactId="guava"/>
           </dependency>
-          <dependency groupId="org.apache.cassandra" artifactId="dtest-api" 
version="0.0.16" scope="test"/>
+          <dependency groupId="org.apache.cassandra" artifactId="dtest-api" 
version="0.0.18" scope="test"/>
           <dependency groupId="org.reflections" artifactId="reflections" 
version="0.10.2" scope="test"/>
           <dependency groupId="org.apache.hadoop" artifactId="hadoop-core" 
version="1.0.3" scope="provided">
             <exclusion groupId="org.mortbay.jetty" artifactId="servlet-api"/>
diff --git a/ide/nbproject/project.xml b/ide/nbproject/project.xml
index 552b9d46c3..09460aca11 100644
--- a/ide/nbproject/project.xml
+++ b/ide/nbproject/project.xml
@@ -7,7 +7,7 @@
             <properties>
                 <property name="project.dir">..</property>
                 <!-- the compile classpaths should be distinct per compilation 
unit… but it is kept simple and the build will catch errors -->
-                <property 
name="cassandra.classpath.jars">${project.dir}/build/lib/jars/HdrHistogram-2.1.12.jar:${project.dir}/build/lib/jars/ST4-4.0.8.jar:${project.dir}/build/lib/jars/airline-0.8.jar:${project.dir}/build/lib/jars/antlr-3.5.2.jar:${project.dir}/build/lib/jars/antlr-runtime-3.5.2.jar:${project.dir}/build/lib/jars/asm-7.1.jar:${project.dir}/build/lib/jars/byteman-4.0.6.jar:${project.dir}/build/lib/jars/byteman-bmunit-4.0.6.jar:${project.dir}/build/lib/jars/byteman-install
 [...]
+                <property 
name="cassandra.classpath.jars">${project.dir}/build/lib/jars/HdrHistogram-2.1.12.jar:${project.dir}/build/lib/jars/ST4-4.0.8.jar:${project.dir}/build/lib/jars/airline-0.8.jar:${project.dir}/build/lib/jars/antlr-3.5.2.jar:${project.dir}/build/lib/jars/antlr-runtime-3.5.2.jar:${project.dir}/build/lib/jars/asm-7.1.jar:${project.dir}/build/lib/jars/byteman-4.0.6.jar:${project.dir}/build/lib/jars/byteman-bmunit-4.0.6.jar:${project.dir}/build/lib/jars/byteman-install
 [...]
             </properties>
             <folders>
                 <source-folder>
diff --git 
a/src/java/org/apache/cassandra/utils/RMIClientSocketFactoryImpl.java 
b/src/java/org/apache/cassandra/utils/RMIClientSocketFactoryImpl.java
deleted file mode 100644
index 81e728eeb9..0000000000
--- a/src/java/org/apache/cassandra/utils/RMIClientSocketFactoryImpl.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * 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.utils;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.net.InetAddress;
-import java.net.Socket;
-import java.rmi.server.RMIClientSocketFactory;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-
-/**
- * This class is used to override the local address the JMX client calculates 
when trying to connect,
- * which can otherwise be influenced by the system property 
"java.rmi.server.hostname" in strange and
- * unpredictable ways.
- */
-public class RMIClientSocketFactoryImpl implements RMIClientSocketFactory, 
Serializable
-{
-    List<Socket> sockets = new ArrayList<>();
-    private final InetAddress localAddress;
-
-    public RMIClientSocketFactoryImpl(InetAddress localAddress)
-    {
-        this.localAddress = localAddress;
-    }
-
-    @Override
-    public Socket createSocket(String host, int port) throws IOException
-    {
-        Socket socket = new Socket(localAddress, port);
-        sockets.add(socket);
-        return socket;
-    }
-
-    public void close() throws IOException
-    {
-        for (Socket socket: sockets)
-        {
-            try
-            {
-                socket.close();
-            }
-            catch (IOException ignored)
-            {
-                // intentionally ignored
-            }
-        }
-    }
-
-    @Override
-    public boolean equals(Object o)
-    {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-        RMIClientSocketFactoryImpl that = (RMIClientSocketFactoryImpl) o;
-        return Objects.equals(localAddress, that.localAddress);
-    }
-
-    @Override
-    public int hashCode()
-    {
-        return Objects.hash(localAddress);
-    }
-}
diff --git 
a/test/distributed/org/apache/cassandra/distributed/impl/AbstractCluster.java 
b/test/distributed/org/apache/cassandra/distributed/impl/AbstractCluster.java
index 4d693ff856..4fe139e8e5 100644
--- 
a/test/distributed/org/apache/cassandra/distributed/impl/AbstractCluster.java
+++ 
b/test/distributed/org/apache/cassandra/distributed/impl/AbstractCluster.java
@@ -44,6 +44,7 @@ import java.util.stream.Stream;
 
 import javax.annotation.concurrent.GuardedBy;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.Sets;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -179,12 +180,6 @@ public abstract class AbstractCluster<I extends IInstance> 
implements ICluster<I
             super(factory);
         }
 
-        @SuppressWarnings("unchecked")
-        private B self()
-        {
-            return (B) this;
-        }
-
         public B withNodeProvisionStrategy(INodeProvisionStrategy.Strategy 
nodeProvisionStrategy)
         {
             this.nodeProvisionStrategy = nodeProvisionStrategy;
@@ -454,7 +449,8 @@ public abstract class AbstractCluster<I extends IInstance> 
implements ICluster<I
         return createInstanceConfig(size() + 1);
     }
 
-    private InstanceConfig createInstanceConfig(int nodeNum)
+    @VisibleForTesting
+    public InstanceConfig createInstanceConfig(int nodeNum)
     {
         INodeProvisionStrategy provisionStrategy = 
nodeProvisionStrategy.create(subnet, portMap);
         long token = tokenSupplier.token(nodeNum);
diff --git 
a/test/distributed/org/apache/cassandra/distributed/impl/CollectingRMIServerSocketFactoryImpl.java
 
b/test/distributed/org/apache/cassandra/distributed/impl/CollectingRMIServerSocketFactoryImpl.java
deleted file mode 100644
index 0f16286b4d..0000000000
--- 
a/test/distributed/org/apache/cassandra/distributed/impl/CollectingRMIServerSocketFactoryImpl.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * 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.distributed.impl;
-
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.ServerSocket;
-import java.net.SocketException;
-import java.rmi.server.RMIServerSocketFactory;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-
-import javax.net.ServerSocketFactory;
-
-/**
- * This class is used to keep track of RMI servers created during a cluster 
creation so we can
- * later close the sockets, which would otherwise be left with a thread 
running waiting for
- * connections that would never show up as the server was otherwise closed.
- */
-class CollectingRMIServerSocketFactoryImpl implements RMIServerSocketFactory
-{
-    private final InetAddress bindAddress;
-    List<ServerSocket> sockets = new ArrayList<>();
-
-    public CollectingRMIServerSocketFactoryImpl(InetAddress bindAddress)
-    {
-        this.bindAddress = bindAddress;
-    }
-
-    @Override
-    public ServerSocket createServerSocket(int pPort) throws IOException
-    {
-        ServerSocket result = 
ServerSocketFactory.getDefault().createServerSocket(pPort, 0, bindAddress);
-        try
-        {
-            result.setReuseAddress(true);
-        }
-        catch (SocketException e)
-        {
-            result.close();
-            throw e;
-        }
-        sockets.add(result);
-        return result;
-    }
-
-
-    public void close() throws IOException
-    {
-        for (ServerSocket socket : sockets)
-        {
-            socket.close();
-        }
-    }
-
-    @Override
-    public boolean equals(Object o)
-    {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-        CollectingRMIServerSocketFactoryImpl that = 
(CollectingRMIServerSocketFactoryImpl) o;
-        return Objects.equals(bindAddress, that.bindAddress);
-    }
-
-    @Override
-    public int hashCode()
-    {
-        return Objects.hash(bindAddress);
-    }
-}
diff --git 
a/test/distributed/org/apache/cassandra/distributed/impl/Instance.java 
b/test/distributed/org/apache/cassandra/distributed/impl/Instance.java
index a8c948c25d..caebaa0c26 100644
--- a/test/distributed/org/apache/cassandra/distributed/impl/Instance.java
+++ b/test/distributed/org/apache/cassandra/distributed/impl/Instance.java
@@ -135,7 +135,6 @@ import org.apache.cassandra.utils.FBUtilities;
 import org.apache.cassandra.utils.JMXServerUtils;
 import org.apache.cassandra.utils.JVMStabilityInspector;
 import org.apache.cassandra.utils.MBeanWrapper;
-import org.apache.cassandra.utils.RMIClientSocketFactoryImpl;
 import org.apache.cassandra.utils.Throwables;
 import org.apache.cassandra.utils.UUIDSerializer;
 import org.apache.cassandra.utils.concurrent.Ref;
@@ -163,8 +162,6 @@ public class Instance extends IsolatedExecutor implements 
IInvokableInstance
     private JMXServerUtils.JmxRegistry registry;
     private RMIJRMPServerImpl jmxRmiServer;
     private MBeanWrapper.InstanceMBeanWrapper wrapper;
-    private RMIClientSocketFactoryImpl clientSocketFactory;
-    private CollectingRMIServerSocketFactoryImpl serverSocketFactory;
     private IsolatedJmx isolatedJmx;
 
     // should never be invoked directly, so that it is instantiated on other 
class loader;
diff --git 
a/test/distributed/org/apache/cassandra/distributed/impl/IsolatedJmx.java 
b/test/distributed/org/apache/cassandra/distributed/impl/IsolatedJmx.java
index 2fd4ec9647..41a722a3d1 100644
--- a/test/distributed/org/apache/cassandra/distributed/impl/IsolatedJmx.java
+++ b/test/distributed/org/apache/cassandra/distributed/impl/IsolatedJmx.java
@@ -32,6 +32,9 @@ import javax.management.remote.rmi.RMIConnectorServer;
 import javax.management.remote.rmi.RMIJRMPServerImpl;
 
 import com.google.common.util.concurrent.Uninterruptibles;
+
+import 
org.apache.cassandra.distributed.shared.jmx.CollectingRMIServerSocketFactoryImpl;
+import org.apache.cassandra.distributed.shared.jmx.RMIClientSocketFactoryImpl;
 import org.slf4j.Logger;
 
 import org.apache.cassandra.distributed.api.IInstance;
@@ -39,7 +42,6 @@ import org.apache.cassandra.distributed.api.IInstanceConfig;
 import org.apache.cassandra.distributed.shared.JMXUtil;
 import org.apache.cassandra.utils.JMXServerUtils;
 import org.apache.cassandra.utils.MBeanWrapper;
-import org.apache.cassandra.utils.RMIClientSocketFactoryImpl;
 import sun.rmi.transport.tcp.TCPEndpoint;
 
 import static 
org.apache.cassandra.config.CassandraRelevantProperties.JAVA_RMI_DGC_LEASE_VALUE_IN_JVM_DTEST;


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

Reply via email to