This is an automated email from the ASF dual-hosted git repository. jeetkundoug pushed a commit to branch cassandra-4.1 in repository https://gitbox.apache.org/repos/asf/cassandra.git
commit c988b609b0239e37f37e3b764728d960220cc3e8 Merge: 176519a45c aa0e2f1631 Author: Doug Rohrer <[email protected]> AuthorDate: Fri Oct 24 14:22:02 2025 -0400 Merge branch 'cassandra-4.0' into cassandra-4.1 * cassandra-4.0: CASSANDRA-20884 - Move JMX classes to the in-jvm-dtest API project CHANGES.txt | 4 + build.xml | 2 +- ide/nbproject/project.xml | 2 +- .../utils/RMIClientSocketFactoryImpl.java | 81 -------------------- .../distributed/impl/AbstractCluster.java | 8 +- .../impl/CollectingRMIServerSocketFactoryImpl.java | 87 ---------------------- .../cassandra/distributed/impl/Instance.java | 3 - .../cassandra/distributed/impl/IsolatedJmx.java | 4 +- 8 files changed, 10 insertions(+), 181 deletions(-) diff --cc CHANGES.txt index a742aa8158,ddbee6860e..dc70d2bce4 --- a/CHANGES.txt +++ b/CHANGES.txt @@@ -1,17 -1,9 +1,21 @@@ -4.0.20 ++4.1.12 ++Merged from 4.0 + * Updated dtest-api to 0.0.18 and removed JMX-related classes that now live in the dtest-api (CASSANDRA-20884) + -4.0.19 +4.1.11 + * Redact security-sensitive information in system_views.settings (CASSANDRA-20856) +Merged from 4.0: * Fixed incorrect error message constant for keyspace name length validation (CASSANDRA-20915) * update shaded cassandra-driver-core to 3.11.5 (CASSANDRA-20904) + + +4.1.10 + * Improve CommitLogSegmentReader to skip SyncBlocks correctly in case of CRC errors (CASSANDRA-20664) + * Do not crash on first boot with data_disk_usage_max_disk_size set when data directory is not created yet (CASSANDRA-20787) + * Rework / simplification of nodetool get/setguardrailsconfig commands (CASSANDRA-20778) + * IntrusiveStack.accumulate is not accumulating correctly (CASSANDRA-20670) + * Add nodetool get/setguardrailsconfig commands (CASSANDRA-19552) +Merged from 4.0: * Prevent too long table names not fitting file names (CASSANDRA-20389) * Fix IndexOutOfBoundsException in sstablemetadata tool when a range tombstone is a max clustering value (CASSANDRA-20855) * Update Jackson to 2.19.2 (CASSANDRA-20848) diff --cc build.xml index 98159fe84f,1682bc4ace..bb33058ec8 --- a/build.xml +++ b/build.xml @@@ -170,8 -160,6 +170,8 @@@ <property name="chronicle-wire.version" value="2.20.117" /> <property name="chronicle-threads.version" value="2.20.111" /> - <property name="dtest-api.version" value="0.0.16" /> ++ <property name="dtest-api.version" value="0.0.18" /> + <condition property="maven-ant-tasks.jar.exists"> <available file="${build.dir}/maven-ant-tasks-${maven-ant-tasks.version}.jar" /> </condition> diff --cc ide/nbproject/project.xml index 71f3ee5b31,09460aca11..beccd5683c --- a/ide/nbproject/project.xml +++ b/ide/nbproject/project.xml @@@ -7,7 -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-9.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-instal [...] - <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-instal [...] ++ <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-9.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-instal [...] </properties> <folders> <source-folder> diff --cc test/distributed/org/apache/cassandra/distributed/impl/AbstractCluster.java index 8296e7b208,4fe139e8e5..af9335a093 --- a/test/distributed/org/apache/cassandra/distributed/impl/AbstractCluster.java +++ b/test/distributed/org/apache/cassandra/distributed/impl/AbstractCluster.java @@@ -198,15 -178,8 +198,9 @@@ public abstract class AbstractCluster< public AbstractBuilder(Factory<I, C, B> factory) { super(factory); + withSharedClasses(SHARED_PREDICATE); } - @SuppressWarnings("unchecked") - private B self() - { - return (B) this; - } - public B withNodeProvisionStrategy(INodeProvisionStrategy.Strategy nodeProvisionStrategy) { this.nodeProvisionStrategy = nodeProvisionStrategy; @@@ -584,45 -450,15 +578,45 @@@ } @VisibleForTesting - InstanceConfig createInstanceConfig(int nodeNum) + public InstanceConfig createInstanceConfig(int nodeNum) { INodeProvisionStrategy provisionStrategy = nodeProvisionStrategy.create(subnet, portMap); - long token = tokenSupplier.token(nodeNum); + Collection<String> tokens = tokenSupplier.tokens(nodeNum); NetworkTopology topology = buildNetworkTopology(provisionStrategy, nodeIdTopology); - InstanceConfig config = InstanceConfig.generate(nodeNum, provisionStrategy, topology, root, Long.toString(token), datadirCount); + InstanceConfig config = InstanceConfig.generate(nodeNum, provisionStrategy, topology, root, tokens, datadirCount); config.set(Constants.KEY_DTEST_API_CLUSTER_ID, clusterId.toString()); + // if a test sets num_tokens directly, then respect it and only run if vnode or no-vnode is defined + int defaultTokenCount = config.getInt("num_tokens"); + assert tokens.size() == defaultTokenCount : String.format("num_tokens=%d but tokens are %s; size does not match", defaultTokenCount, tokens); + String defaultTokens = config.getString("initial_token"); if (configUpdater != null) + { configUpdater.accept(config); + int testTokenCount = config.getInt("num_tokens"); + if (defaultTokenCount != testTokenCount) + { + if (testTokenCount == 1) + { + // test is no-vnode, but running with vnode, so skip + Assume.assumeTrue("vnode is not supported", false); + } + else + { + Assume.assumeTrue("no-vnode is requested but not supported", defaultTokenCount > 1); + // if the test controls initial_token or GOSSIP is enabled, then the test is safe to run + if (defaultTokens.equals(config.getString("initial_token"))) + { + // test didn't define initial_token + Assume.assumeTrue("vnode is enabled and num_tokens is defined in test without GOSSIP or setting initial_token", config.has(Feature.GOSSIP)); + config.remove("initial_token"); + } + else + { + // test defined initial_token; trust it + } + } + } + } return config; } diff --cc test/distributed/org/apache/cassandra/distributed/impl/Instance.java index 0f96af78b2,caebaa0c26..1b1dd2a255 --- a/test/distributed/org/apache/cassandra/distributed/impl/Instance.java +++ b/test/distributed/org/apache/cassandra/distributed/impl/Instance.java @@@ -148,8 -135,8 +148,7 @@@ import org.apache.cassandra.utils.FBUti 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; import org.apache.cassandra.utils.memory.BufferPools; import org.apache.cassandra.utils.progress.jmx.JMXBroadcastExecutor; @@@ -182,27 -162,14 +181,25 @@@ public class Instance extends IsolatedE 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; - // only visible for inheritance + @Deprecated Instance(IInstanceConfig config, ClassLoader classLoader) { - super("node" + config.num(), classLoader); + this(config, classLoader, null); + } + + Instance(IInstanceConfig config, ClassLoader classLoader, FileSystem fileSystem) + { + this(config, classLoader, fileSystem, null); + } + + Instance(IInstanceConfig config, ClassLoader classLoader, FileSystem fileSystem, ShutdownExecutor shutdownExecutor) + { + super("node" + config.num(), classLoader, executorFactory().pooled("isolatedExecutor", Integer.MAX_VALUE), shutdownExecutor); this.config = config; + if (fileSystem != null) + File.unsafeSetFilesystem(fileSystem); Object clusterId = Objects.requireNonNull(config.get(Constants.KEY_DTEST_API_CLUSTER_ID), "cluster_id is not defined"); ClusterIDDefiner.setId("cluster-" + clusterId); InstanceIDDefiner.setInstanceId(config.num()); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
