Search in sources :

Example 6 with Address

use of org.jgroups.Address in project wildfly by wildfly.

the class AddressableNodeExternalizer method read.

private static AddressableNode read(DataInput input) throws IOException {
    try {
        Address jgroupsAddress = org.jgroups.util.Util.readAddress(input);
        String name = input.readUTF();
        byte[] address = new byte[input.readInt()];
        input.readFully(address);
        int port = input.readInt();
        return new AddressableNode(jgroupsAddress, name, new InetSocketAddress(InetAddress.getByAddress(address), port));
    } catch (IOException e) {
        throw e;
    } catch (Exception e) {
        throw new IOException(e);
    }
}
Also used : InetAddress(java.net.InetAddress) Address(org.jgroups.Address) InetSocketAddress(java.net.InetSocketAddress) InetSocketAddress(java.net.InetSocketAddress) IOException(java.io.IOException) IOException(java.io.IOException)

Example 7 with Address

use of org.jgroups.Address in project wildfly by wildfly.

the class ChannelCommandDispatcher method createRequestOptions.

private RequestOptions createRequestOptions(Node... excludedNodes) {
    RequestOptions options = this.createRequestOptions();
    if ((excludedNodes != null) && (excludedNodes.length > 0)) {
        Address[] addresses = new Address[excludedNodes.length];
        for (int i = 0; i < excludedNodes.length; ++i) {
            addresses[i] = getAddress(excludedNodes[i]);
        }
        options.setExclusionList(addresses);
    }
    return options;
}
Also used : Address(org.jgroups.Address) RequestOptions(org.jgroups.blocks.RequestOptions)

Example 8 with Address

use of org.jgroups.Address 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);
    }
}
Also used : Arrays(java.util.Arrays) Rsp(org.jgroups.util.Rsp) TimeoutException(java.util.concurrent.TimeoutException) HashMap(java.util.HashMap) FutureListener(org.jgroups.util.FutureListener) HashSet(java.util.HashSet) CommandDispatcher(org.wildfly.clustering.dispatcher.CommandDispatcher) Command(org.wildfly.clustering.dispatcher.Command) Future(java.util.concurrent.Future) RspFilter(org.jgroups.blocks.RspFilter) RequestOptions(org.jgroups.blocks.RequestOptions) Map(java.util.Map) RspList(org.jgroups.util.RspList) Address(org.jgroups.Address) NodeFactory(org.wildfly.clustering.group.NodeFactory) CancellationException(java.util.concurrent.CancellationException) ResponseMode(org.jgroups.blocks.ResponseMode) CommandResponse(org.wildfly.clustering.dispatcher.CommandResponse) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Set(java.util.Set) Addressable(org.wildfly.clustering.server.Addressable) IOException(java.io.IOException) ExecutionException(java.util.concurrent.ExecutionException) TimeUnit(java.util.concurrent.TimeUnit) Message(org.jgroups.Message) Node(org.wildfly.clustering.group.Node) CommandDispatcherException(org.wildfly.clustering.dispatcher.CommandDispatcherException) Collections(java.util.Collections) MessageDispatcher(org.jgroups.blocks.MessageDispatcher) Message(org.jgroups.Message) Address(org.jgroups.Address) RequestOptions(org.jgroups.blocks.RequestOptions) CommandDispatcherException(org.wildfly.clustering.dispatcher.CommandDispatcherException) Node(org.wildfly.clustering.group.Node) RspList(org.jgroups.util.RspList) Rsp(org.jgroups.util.Rsp) TimeoutException(java.util.concurrent.TimeoutException) CancellationException(java.util.concurrent.CancellationException) IOException(java.io.IOException) ExecutionException(java.util.concurrent.ExecutionException) CommandDispatcherException(org.wildfly.clustering.dispatcher.CommandDispatcherException) CancellationException(java.util.concurrent.CancellationException) Future(java.util.concurrent.Future) TimeUnit(java.util.concurrent.TimeUnit) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) ExecutionException(java.util.concurrent.ExecutionException)

Example 9 with Address

use of org.jgroups.Address 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
            }
        }
    }
}
Also used : MergeView(org.jgroups.MergeView) MembershipListener(org.jgroups.MembershipListener) Address(org.jgroups.Address) Node(org.wildfly.clustering.group.Node) ExecutorService(java.util.concurrent.ExecutorService) MergeView(org.jgroups.MergeView) View(org.jgroups.View) Map(java.util.Map) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) RejectedExecutionException(java.util.concurrent.RejectedExecutionException)

Aggregations

Address (org.jgroups.Address)9 IOException (java.io.IOException)3 Map (java.util.Map)3 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)3 Message (org.jgroups.Message)3 RequestOptions (org.jgroups.blocks.RequestOptions)3 Node (org.wildfly.clustering.group.Node)3 InetSocketAddress (java.net.InetSocketAddress)2 HashMap (java.util.HashMap)2 CancellationException (java.util.concurrent.CancellationException)2 ExecutionException (java.util.concurrent.ExecutionException)2 TimeoutException (java.util.concurrent.TimeoutException)2 View (org.jgroups.View)2 IpAddress (org.jgroups.stack.IpAddress)2 Rsp (org.jgroups.util.Rsp)2 CommandDispatcherException (org.wildfly.clustering.dispatcher.CommandDispatcherException)2 CommandResponse (org.wildfly.clustering.dispatcher.CommandResponse)2 InetAddress (java.net.InetAddress)1 Arrays (java.util.Arrays)1 Collections (java.util.Collections)1