package org.infinispan.manager.impl;
import java.util.concurrent.Executor;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.function.Predicate;
import org.infinispan.manager.ClusterExecutor;
import org.infinispan.manager.EmbeddedCacheManager;
import org.infinispan.remoting.transport.Address;
import org.infinispan.remoting.transport.jgroups.JGroupsTransport;
/**
* Static factory methods to construct a ClusterExecutor
* @author wburns
* @since 9.0
*/
public class ClusterExecutors {
private ClusterExecutors() { }
public static ClusterExecutor allSubmissionExecutor(Predicate<? super Address> predicate, EmbeddedCacheManager manager,
JGroupsTransport transport, long time, TimeUnit unit, Executor localExecutor, ScheduledExecutorService timeoutExecutor) {
if (transport == null) {
return new LocalClusterExecutor(predicate, manager, localExecutor, time, unit, timeoutExecutor);
}
return new AllClusterExecutor(predicate, manager, transport, time, unit, localExecutor, timeoutExecutor);
}
public static ClusterExecutor singleNodeSubmissionExecutor(Predicate<? super Address> predicate, EmbeddedCacheManager manager,
JGroupsTransport transport, long time, TimeUnit unit, Executor localExecutor, ScheduledExecutorService timeoutExecutor,
int failOverCount) {
if (failOverCount < 0) {
throw new IllegalArgumentException("Failover count must be 0 or greater");
}
ClusterExecutor executor;
if (transport == null) {
executor = new LocalClusterExecutor(predicate, manager, localExecutor, time, unit, timeoutExecutor);
} else {
executor = new SingleClusterExecutor(predicate, manager, transport, time, unit, localExecutor, timeoutExecutor);
}
if (failOverCount == 0) {
return executor;
}
return new FailOverClusterExecutor(executor, failOverCount);
}
}