use of org.wildfly.clustering.group.Node in project wildfly by wildfly.
the class SimpleSingletonElectionPolicyTestCase method elect.
@Test
public void elect() {
Node node1 = mock(Node.class);
Node node2 = mock(Node.class);
Node node3 = mock(Node.class);
List<Node> nodes = Arrays.asList(node1, node2, node3);
assertSame(node1, new SimpleSingletonElectionPolicy().elect(nodes));
assertSame(node1, new SimpleSingletonElectionPolicy(0).elect(nodes));
assertSame(node2, new SimpleSingletonElectionPolicy(1).elect(nodes));
assertSame(node3, new SimpleSingletonElectionPolicy(2).elect(nodes));
assertSame(node1, new SimpleSingletonElectionPolicy(3).elect(nodes));
assertNull(new SimpleSingletonElectionPolicy().elect(Collections.<Node>emptyList()));
}
use of org.wildfly.clustering.group.Node in project wildfly by wildfly.
the class ChannelCommandDispatcher method submitOnCluster.
@Override
public <R> Map<Node, Future<R>> submitOnCluster(Command<R, ? super C> command, Node... excludedNodes) throws CommandDispatcherException {
Map<Node, Future<R>> results = new ConcurrentHashMap<>();
FutureListener<RspList<R>> listener = future -> {
try {
future.get().keySet().stream().map(address -> this.factory.createNode(address)).forEach(node -> results.remove(node));
} catch (CancellationException e) {
} catch (ExecutionException e) {
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
};
Message message = this.createMessage(command);
RequestOptions options = this.createRequestOptions(excludedNodes);
try {
Future<? extends Map<Address, Rsp<R>>> futureResponses = this.dispatcher.castMessageWithFuture(null, message, options, listener);
Set<Node> excluded = (excludedNodes != null) ? new HashSet<>(Arrays.asList(excludedNodes)) : Collections.<Node>emptySet();
for (Address address : this.dispatcher.getChannel().getView().getMembers()) {
Node node = this.factory.createNode(address);
if (!excluded.contains(node)) {
Future<R> future = new Future<R>() {
@Override
public boolean cancel(boolean mayInterruptIfRunning) {
return futureResponses.cancel(mayInterruptIfRunning);
}
@Override
public R get() throws InterruptedException, ExecutionException {
Map<Address, Rsp<R>> responses = futureResponses.get();
Rsp<R> response = responses.get(address);
if (response == null) {
throw new CancellationException();
}
return createCommandResponse(response).get();
}
@Override
public R get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
Map<Address, Rsp<R>> responses = futureResponses.get(timeout, unit);
Rsp<R> response = responses.get(address);
if (response == null) {
throw new CancellationException();
}
return createCommandResponse(response).get();
}
@Override
public boolean isCancelled() {
return futureResponses.isCancelled();
}
@Override
public boolean isDone() {
return futureResponses.isDone();
}
};
results.put(node, future);
}
}
return results;
} catch (Exception e) {
throw new CommandDispatcherException(e);
}
}
use of org.wildfly.clustering.group.Node in project wildfly by wildfly.
the class ChannelCommandDispatcherFactory method viewAccepted.
@Override
public void viewAccepted(View view) {
View oldView = this.view.getAndSet(view);
if (oldView != null) {
List<Node> oldNodes = this.getNodes(oldView);
List<Node> newNodes = this.getNodes(view);
List<Address> leftMembers = View.leftMembers(oldView, view);
if (leftMembers != null) {
this.nodeFactory.invalidate(leftMembers);
}
for (Map.Entry<Listener, ExecutorService> entry : this.listeners.entrySet()) {
try {
Listener listener = entry.getKey();
ExecutorService executor = entry.getValue();
executor.submit(() -> {
try {
listener.membershipChanged(oldNodes, newNodes, view instanceof MergeView);
} catch (Throwable e) {
ClusteringLogger.ROOT_LOGGER.warn(e.getLocalizedMessage(), e);
}
});
} catch (RejectedExecutionException e) {
// Executor was shutdown
}
}
}
}
use of org.wildfly.clustering.group.Node in project wildfly by wildfly.
the class InfinispanBeanManager method getWeakAffinity.
@Override
public Affinity getWeakAffinity(I id) {
if (this.cache.getCacheConfiguration().clustering().cacheMode().isClustered()) {
Node node = this.locatePrimaryOwner(id);
Map.Entry<String, ?> entry = this.registry.getEntry(node);
if (entry != null) {
return new NodeAffinity(entry.getKey());
}
}
return Affinity.NONE;
}
use of org.wildfly.clustering.group.Node in project wildfly by wildfly.
the class ServiceProviderRetrieverBean method getProviders.
@Override
public Collection<String> getProviders() {
Set<Node> nodes = this.registration.getProviders();
List<String> result = new ArrayList<>(nodes.size());
for (Node node : nodes) {
result.add(node.getName());
}
return result;
}
Aggregations