diff --git a/build.xml b/build.xml
index 8e30da60b1..3fd409bcb5 100644
--- a/build.xml
+++ b/build.xml
@@ -422,7 +422,7 @@
-
+
diff --git a/test/distributed/org/apache/cassandra/distributed/Cluster.java b/test/distributed/org/apache/cassandra/distributed/Cluster.java
index d657638c76..95ead5035d 100644
--- a/test/distributed/org/apache/cassandra/distributed/Cluster.java
+++ b/test/distributed/org/apache/cassandra/distributed/Cluster.java
@@ -18,17 +18,13 @@
package org.apache.cassandra.distributed;
-import java.io.File;
import java.io.IOException;
-import java.util.List;
import java.util.function.Consumer;
import org.apache.cassandra.distributed.api.IInstanceConfig;
import org.apache.cassandra.distributed.api.IInvokableInstance;
import org.apache.cassandra.distributed.impl.AbstractCluster;
-import org.apache.cassandra.distributed.impl.InstanceConfig;
-import org.apache.cassandra.distributed.shared.Builder;
-import org.apache.cassandra.distributed.shared.NetworkTopology;
+import org.apache.cassandra.distributed.shared.AbstractBuilder;
import org.apache.cassandra.distributed.shared.Versions;
/**
@@ -38,9 +34,9 @@ import org.apache.cassandra.distributed.shared.Versions;
public class Cluster extends AbstractCluster
{
- private Cluster(File root, Versions.Version version, List configs, ClassLoader sharedClassLoader)
+ private Cluster(Builder builder)
{
- super(root, version, configs, sharedClassLoader);
+ super(builder);
}
protected IInvokableInstance newInstanceWrapper(int generation, Versions.Version version, IInstanceConfig config)
@@ -48,22 +44,12 @@ public class Cluster extends AbstractCluster
return new Wrapper(generation, version, config);
}
- public static Builder build()
+ public static Builder build()
{
- return new Builder(Cluster::new)
- {
- {
- withVersion(CURRENT_VERSION);
- }
-
- protected IInstanceConfig generateConfig(int nodeNum, String ipAddress, NetworkTopology networkTopology, File root, String token, String seedIp)
- {
- return InstanceConfig.generate(nodeNum, ipAddress, networkTopology, root, token, seedIp);
- }
- };
+ return new Builder();
}
- public static Builder build(int nodeCount)
+ public static Builder build(int nodeCount)
{
return build().withNodes(nodeCount);
}
@@ -77,4 +63,14 @@ public class Cluster extends AbstractCluster
{
return build(nodeCount).start();
}
-}
\ No newline at end of file
+
+ public static final class Builder extends AbstractBuilder
+ {
+ public Builder()
+ {
+ super(Cluster::new);
+ withVersion(CURRENT_VERSION);
+ }
+ }
+}
+
diff --git a/test/distributed/org/apache/cassandra/distributed/UpgradeableCluster.java b/test/distributed/org/apache/cassandra/distributed/UpgradeableCluster.java
index 71f3f8ce39..bde5d4ea83 100644
--- a/test/distributed/org/apache/cassandra/distributed/UpgradeableCluster.java
+++ b/test/distributed/org/apache/cassandra/distributed/UpgradeableCluster.java
@@ -18,17 +18,13 @@
package org.apache.cassandra.distributed;
-import java.io.File;
import java.io.IOException;
-import java.util.List;
import java.util.function.Consumer;
import org.apache.cassandra.distributed.api.IInstanceConfig;
-import org.apache.cassandra.distributed.impl.AbstractCluster;
import org.apache.cassandra.distributed.api.IUpgradeableInstance;
-import org.apache.cassandra.distributed.impl.InstanceConfig;
-import org.apache.cassandra.distributed.shared.Builder;
-import org.apache.cassandra.distributed.shared.NetworkTopology;
+import org.apache.cassandra.distributed.impl.AbstractCluster;
+import org.apache.cassandra.distributed.shared.AbstractBuilder;
import org.apache.cassandra.distributed.shared.Versions;
/**
@@ -40,9 +36,9 @@ import org.apache.cassandra.distributed.shared.Versions;
*/
public class UpgradeableCluster extends AbstractCluster implements AutoCloseable
{
- private UpgradeableCluster(File root, Versions.Version version, List configs, ClassLoader sharedClassLoader)
+ private UpgradeableCluster(Builder builder)
{
- super(root, version, configs, sharedClassLoader);
+ super(builder);
}
protected IUpgradeableInstance newInstanceWrapper(int generation, Versions.Version version, IInstanceConfig config)
@@ -50,18 +46,12 @@ public class UpgradeableCluster extends AbstractCluster im
return new Wrapper(generation, version, config);
}
- public static Builder build()
+ public static Builder build()
{
- return new Builder(UpgradeableCluster::new)
- {
- protected IInstanceConfig generateConfig(int nodeNum, String ipAddress, NetworkTopology networkTopology, File root, String token, String seedIp)
- {
- return InstanceConfig.generate(nodeNum, ipAddress, networkTopology, root, token, seedIp);
- }
- };
+ return new Builder();
}
- public static Builder build(int nodeCount)
+ public static Builder build(int nodeCount)
{
return build().withNodes(nodeCount);
}
@@ -80,4 +70,13 @@ public class UpgradeableCluster extends AbstractCluster im
{
return build(nodeCount).withVersion(version).start();
}
+
+ public static final class Builder extends AbstractBuilder
+ {
+
+ public Builder()
+ {
+ super(UpgradeableCluster::new);
+ }
+ }
}
diff --git a/test/distributed/org/apache/cassandra/distributed/impl/AbstractCluster.java b/test/distributed/org/apache/cassandra/distributed/impl/AbstractCluster.java
index 6539747ecf..0016316707 100644
--- a/test/distributed/org/apache/cassandra/distributed/impl/AbstractCluster.java
+++ b/test/distributed/org/apache/cassandra/distributed/impl/AbstractCluster.java
@@ -55,6 +55,8 @@ import org.apache.cassandra.distributed.api.IMessage;
import org.apache.cassandra.distributed.api.IMessageFilters;
import org.apache.cassandra.distributed.api.IUpgradeableInstance;
import org.apache.cassandra.distributed.api.NodeToolResult;
+import org.apache.cassandra.distributed.api.TokenSupplier;
+import org.apache.cassandra.distributed.shared.AbstractBuilder;
import org.apache.cassandra.distributed.shared.InstanceClassLoader;
import org.apache.cassandra.distributed.shared.MessageFilters;
import org.apache.cassandra.distributed.shared.NetworkTopology;
@@ -96,10 +98,15 @@ public abstract class AbstractCluster implements ICluster nodeIdTopology;
+ private final Consumer configUpdater;
+ private final int broadcastPort;
// mutated by starting/stopping a node
private final List instances;
@@ -241,18 +248,26 @@ public abstract class AbstractCluster implements ICluster configs,
- ClassLoader sharedClassLoader)
+ protected AbstractCluster(AbstractBuilder, ?> builder)
{
- this.root = root;
- this.sharedClassLoader = sharedClassLoader;
+ this.root = builder.getRoot();
+ this.sharedClassLoader = builder.getSharedClassLoader();
+ this.subnet = builder.getSubnet();
+ this.tokenSupplier = builder.getTokenSupplier();
+ this.nodeIdTopology = builder.getNodeIdTopology();
+ this.configUpdater = builder.getConfigUpdater();
+ this.broadcastPort = builder.getBroadcastPort();
this.instances = new ArrayList<>();
this.instanceMap = new HashMap<>();
- this.initialVersion = initialVersion;
- int generation = AbstractCluster.generation.incrementAndGet();
+ this.initialVersion = builder.getVersion();
+ this.filters = new MessageFilters();
- for (IInstanceConfig config : configs)
+ int generation = GENERATION.incrementAndGet();
+ for (int i = 0; i < builder.getNodeCount(); ++i)
{
+ int nodeNum = i + 1;
+ InstanceConfig config = createInstanceConfig(nodeNum);
+
I instance = newInstanceWrapperInternal(generation, initialVersion, config);
instances.add(instance);
// we use the config().broadcastAddressAndPort() here because we have not initialised the Instance
@@ -260,7 +275,27 @@ public abstract class AbstractCluster implements ICluster executeInternal(query, consistencyLevel, boundValues)).call();
}
- public Future