diff --git a/build.xml b/build.xml
index f2b60eb6c9..7afa888ae4 100644
--- a/build.xml
+++ b/build.xml
@@ -370,7 +370,7 @@
-
+
diff --git a/test/distributed/org/apache/cassandra/distributed/impl/DelegatingInvokableInstance.java b/test/distributed/org/apache/cassandra/distributed/impl/DelegatingInvokableInstance.java
index d6942ae6ec..bee474b088 100644
--- a/test/distributed/org/apache/cassandra/distributed/impl/DelegatingInvokableInstance.java
+++ b/test/distributed/org/apache/cassandra/distributed/impl/DelegatingInvokableInstance.java
@@ -20,7 +20,6 @@ package org.apache.cassandra.distributed.impl;
import java.io.Serializable;
import java.net.InetSocketAddress;
-import java.util.List;
import java.util.UUID;
import java.util.concurrent.Future;
import java.util.function.BiConsumer;
@@ -141,12 +140,24 @@ public abstract class DelegatingInvokableInstance implements IInvokableInstance
delegateForStartup().startup(cluster);
}
+ @Override
+ public void postStartup()
+ {
+ delegateForStartup().postStartup();
+ }
+
@Override
public void receiveMessage(IMessage message)
{
delegate().receiveMessage(message);
}
+ @Override
+ public void receiveMessageWithInvokingThread(IMessage message)
+ {
+ delegate().receiveMessageWithInvokingThread(message);
+ }
+
@Override
public CallableNoExcept> async(CallableNoExcept call)
{
@@ -195,6 +206,18 @@ public abstract class DelegatingInvokableInstance implements IInvokableInstance
return delegate().sync(consumer);
}
+ @Override
+ public TriFunction> async(TriConsumer consumer)
+ {
+ return delegate().async(consumer);
+ }
+
+ @Override
+ public TriConsumer sync(TriConsumer consumer)
+ {
+ return delegate().sync(consumer);
+ }
+
@Override
public Function> async(Function f)
{
@@ -236,4 +259,27 @@ public abstract class DelegatingInvokableInstance implements IInvokableInstance
{
return delegate().callOnInstance(call);
}
+
+ public QuadFunction> async(QuadFunction f)
+ {
+ return delegate().async(f);
+ }
+
+ @Override
+ public QuadFunction sync(QuadFunction f)
+ {
+ return delegate().sync(f);
+ }
+
+ @Override
+ public QuintFunction> async(QuintFunction f)
+ {
+ return delegate().async(f);
+ }
+
+ @Override
+ public QuintFunction sync(QuintFunction f)
+ {
+ return delegate().sync(f);
+ }
}
diff --git a/test/distributed/org/apache/cassandra/distributed/impl/Instance.java b/test/distributed/org/apache/cassandra/distributed/impl/Instance.java
index 77842142f9..80728e27f7 100644
--- a/test/distributed/org/apache/cassandra/distributed/impl/Instance.java
+++ b/test/distributed/org/apache/cassandra/distributed/impl/Instance.java
@@ -438,27 +438,31 @@ public class Instance extends IsolatedExecutor implements IInvokableInstance
public void receiveMessage(IMessage imessage)
{
- sync(() -> {
- // Based on org.apache.cassandra.net.IncomingTcpConnection.receiveMessage
- try
+ sync(() -> receiveMessageWithInvokingThread(imessage)).run();
+ }
+
+ @Override
+ public void receiveMessageWithInvokingThread(IMessage imessage)
+ {
+ // Based on org.apache.cassandra.net.IncomingTcpConnection.receiveMessage
+ try
+ {
+ MessageIn message = deserializeMessage(imessage);
+ if (message == null)
{
- MessageIn message = deserializeMessage(imessage);
- if (message == null)
- {
- // callback expired; nothing to do
- return;
- }
- if (message.version <= MessagingService.current_version)
- {
- MessagingService.instance().receive(message, imessage.id());
- }
- // else ignore message
+ // callback expired; nothing to do
+ return;
}
- catch (Throwable t)
+ if (message.version <= MessagingService.current_version)
{
- throw new RuntimeException("Exception occurred on node " + broadcastAddress(), t);
+ MessagingService.instance().receive(message, imessage.id());
}
- }).run();
+ // else ignore message
+ }
+ catch (Throwable t)
+ {
+ throw new RuntimeException("Exception occurred on node " + broadcastAddress(), t);
+ }
}
public int getMessagingVersion()
@@ -603,7 +607,7 @@ public class Instance extends IsolatedExecutor implements IInvokableInstance
private static Config loadConfig(IInstanceConfig overrides)
{
- Map params = ((InstanceConfig) overrides).getParams();
+ Map params = overrides.getParams();
boolean check = true;
if (overrides.get(Constants.KEY_DTEST_API_CONFIG_CHECK) != null)
check = (boolean) overrides.get(Constants.KEY_DTEST_API_CONFIG_CHECK);
diff --git a/test/distributed/org/apache/cassandra/distributed/impl/InstanceConfig.java b/test/distributed/org/apache/cassandra/distributed/impl/InstanceConfig.java
index b6b402bc4a..e5469625d2 100644
--- a/test/distributed/org/apache/cassandra/distributed/impl/InstanceConfig.java
+++ b/test/distributed/org/apache/cassandra/distributed/impl/InstanceConfig.java
@@ -36,7 +36,6 @@ import org.apache.cassandra.distributed.api.Feature;
import org.apache.cassandra.distributed.api.IInstanceConfig;
import org.apache.cassandra.distributed.shared.NetworkTopology;
import org.apache.cassandra.distributed.shared.Shared;
-import org.apache.cassandra.distributed.upgrade.UpgradeTestBase;
import org.apache.cassandra.locator.InetAddressAndPort;
import org.apache.cassandra.locator.SimpleSeedProvider;
@@ -189,7 +188,7 @@ public class InstanceConfig implements IInstanceConfig
return this;
}
- private InstanceConfig forceSet(String fieldName, Object value)
+ public InstanceConfig forceSet(String fieldName, Object value)
{
if (value == null)
value = NULL;
diff --git a/test/distributed/org/apache/cassandra/distributed/impl/IsolatedExecutor.java b/test/distributed/org/apache/cassandra/distributed/impl/IsolatedExecutor.java
index fc31fdf978..53c1ad56b0 100644
--- a/test/distributed/org/apache/cassandra/distributed/impl/IsolatedExecutor.java
+++ b/test/distributed/org/apache/cassandra/distributed/impl/IsolatedExecutor.java
@@ -117,6 +117,9 @@ public class IsolatedExecutor implements IIsolatedExecutor
public BiFunction> async(BiConsumer consumer) { return (a, b) -> isolatedExecutor.submit(() -> consumer.accept(a, b)); }
public BiConsumer sync(BiConsumer consumer) { return (a, b) -> waitOn(async(consumer).apply(a, b)); }
+ public TriFunction> async(TriConsumer consumer) { return (a, b, c) -> isolatedExecutor.submit(() -> consumer.accept(a, b, c)); }
+ public TriConsumer sync(TriConsumer consumer) { return (a, b, c) -> waitOn(async(consumer).apply(a, b, c)); }
+
public Function> async(Function f) { return (a) -> isolatedExecutor.submit(() -> f.apply(a)); }
public Function sync(Function f) { return (a) -> waitOn(async(f).apply(a)); }
@@ -126,6 +129,12 @@ public class IsolatedExecutor implements IIsolatedExecutor
public TriFunction> async(TriFunction f) { return (a, b, c) -> isolatedExecutor.submit(() -> f.apply(a, b, c)); }
public TriFunction sync(TriFunction f) { return (a, b, c) -> waitOn(async(f).apply(a, b, c)); }
+ public QuadFunction> async(QuadFunction f) { return (a, b, c, d) -> isolatedExecutor.submit(() -> f.apply(a, b, c, d)); }
+ public QuadFunction sync(QuadFunction f) { return (a, b, c, d) -> waitOn(async(f).apply(a, b, c, d)); }
+
+ public QuintFunction> async(QuintFunction f) { return (a, b, c, d, e) -> isolatedExecutor.submit(() -> f.apply(a, b, c, d, e)); }
+ public QuintFunction sync(QuintFunction f) { return (a, b, c, d,e ) -> waitOn(async(f).apply(a, b, c, d, e)); }
+
public E transfer(E object)
{
return (E) transferOneObject(object, classLoader, deserializeOnInstance);