Example usage for io.netty.channel ChannelFuture awaitUninterruptibly

List of usage examples for io.netty.channel ChannelFuture awaitUninterruptibly

Introduction

In this page you can find the example usage for io.netty.channel ChannelFuture awaitUninterruptibly.

Prototype

boolean awaitUninterruptibly(long timeoutMillis);

Source Link

Document

Waits for this future to be completed within the specified time limit without interruption.

Usage

From source file:com.wolfbe.configcenter.remoting.netty.NettyRemotingClient.java

License:Apache License

private Channel createChannel(final String addr) throws InterruptedException {
    ChannelWrapper cw = this.channelTables.get(addr);
    if (cw != null && cw.isOK()) {
        return cw.getChannel();
    }// www  .ja v a2  s.  c om

    if (this.lockChannelTables.tryLock(LockTimeoutMillis, TimeUnit.MILLISECONDS)) {
        try {
            boolean createNewConnection = false;
            cw = this.channelTables.get(addr);
            if (cw != null) {

                if (cw.isOK()) {
                    return cw.getChannel();
                }

                else if (!cw.getChannelFuture().isDone()) {
                    createNewConnection = false;
                }

                else {
                    this.channelTables.remove(addr);
                    createNewConnection = true;
                }
            }

            else {
                createNewConnection = true;
            }

            if (createNewConnection) {
                ChannelFuture channelFuture = this.bootstrap.connect(RemotingHelper.string2SocketAddress(addr));
                log.info("createChannel: begin to connect remote host[{}] asynchronously", addr);
                cw = new ChannelWrapper(channelFuture);
                this.channelTables.put(addr, cw);
            }
        } catch (Exception e) {
            log.error("createChannel: create channel exception", e);
        } finally {
            this.lockChannelTables.unlock();
        }
    } else {
        log.warn("createChannel: try to lock channel table, but timeout, {}ms", LockTimeoutMillis);
    }

    if (cw != null) {
        ChannelFuture channelFuture = cw.getChannelFuture();
        if (channelFuture.awaitUninterruptibly(this.nettyClientConfig.getConnectTimeoutMillis())) {
            if (cw.isOK()) {
                log.info("createChannel: connect remote host[{}] success, {}", addr, channelFuture.toString());
                return cw.getChannel();
            } else {
                log.warn("createChannel: connect remote host[" + addr + "] failed, " + channelFuture.toString(),
                        channelFuture.cause());
            }
        } else {
            log.warn("createChannel: connect remote host[{}] timeout {}ms, {}", addr,
                    this.nettyClientConfig.getConnectTimeoutMillis(), channelFuture.toString());
        }
    }

    return null;
}

From source file:com.zextras.modules.chat.server.xmpp.netty.OversizeStanzaManager.java

License:Open Source License

public void manageOversize(ChannelHandlerContext ctx) {
    ByteBuf errorMessage;/*from  w  ww  . j ava  2s  . c o  m*/
    try {
        errorMessage = Unpooled.wrappedBuffer(SIZE_LIMIT_VIOLATION.getBytes("UTF-8"));
    } catch (UnsupportedEncodingException e) {
        throw new RuntimeException(e);
    }
    ChannelFuture future = ctx.writeAndFlush(errorMessage);
    future.awaitUninterruptibly(1000L);
    ctx.channel().close();
}

From source file:org.apache.activemq.artemis.core.remoting.impl.netty.NettyConnection.java

License:Apache License

private void closeSSLAndChannel(SslHandler sslHandler, Channel channel) {
    if (sslHandler != null) {
        try {//from  w ww.j a  va  2  s. c  o  m
            ChannelFuture sslCloseFuture = sslHandler.close();

            if (!sslCloseFuture.awaitUninterruptibly(10000)) {
                ActiveMQClientLogger.LOGGER.timeoutClosingSSL();
            }
        } catch (Throwable t) {
            // ignore
        }
    }

    ChannelFuture closeFuture = channel.close();
    if (!closeFuture.awaitUninterruptibly(10000)) {
        ActiveMQClientLogger.LOGGER.timeoutClosingNettyChannel();
    }
}

From source file:org.apache.rocketmq.remoting.netty.NettyRemotingClient.java

License:Apache License

private Channel createChannel(final String addr) throws InterruptedException {
    ChannelWrapper cw = this.channelTables.get(addr);
    if (cw != null && cw.isOK()) {
        return cw.getChannel();
    }//from  w  w  w . j a  v a  2  s  .  c  om

    if (this.lockChannelTables.tryLock(LOCK_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)) {
        try {
            boolean createNewConnection = false;
            cw = this.channelTables.get(addr);
            if (cw != null) {

                if (cw.isOK()) {
                    return cw.getChannel();
                } else if (!cw.getChannelFuture().isDone()) {
                    createNewConnection = false;
                } else {
                    this.channelTables.remove(addr);
                    createNewConnection = true;
                }
            } else {
                createNewConnection = true;
            }

            if (createNewConnection) {
                ChannelFuture channelFuture = this.bootstrap.connect(RemotingHelper.string2SocketAddress(addr));
                log.info("createChannel: begin to connect remote host[{}] asynchronously", addr);
                cw = new ChannelWrapper(channelFuture);
                this.channelTables.put(addr, cw);
            }
        } catch (Exception e) {
            log.error("createChannel: create channel exception", e);
        } finally {
            this.lockChannelTables.unlock();
        }
    } else {
        log.warn("createChannel: try to lock channel table, but timeout, {}ms", LOCK_TIMEOUT_MILLIS);
    }

    if (cw != null) {
        ChannelFuture channelFuture = cw.getChannelFuture();
        if (channelFuture.awaitUninterruptibly(this.nettyClientConfig.getConnectTimeoutMillis())) {
            if (cw.isOK()) {
                log.info("createChannel: connect remote host[{}] success, {}", addr, channelFuture.toString());
                return cw.getChannel();
            } else {
                log.warn("createChannel: connect remote host[" + addr + "] failed, " + channelFuture.toString(),
                        channelFuture.cause());
            }
        } else {
            log.warn("createChannel: connect remote host[{}] timeout {}ms, {}", addr,
                    this.nettyClientConfig.getConnectTimeoutMillis(), channelFuture.toString());
        }
    }

    return null;
}

From source file:org.apache.spark.network.netty.NettyTransportClientFactory.java

License:Apache License

/** Create a completely new {@link TransportClient} to the remote address. */
private NettyTransportClient createClient(InetSocketAddress address) throws IOException {
    logger.debug("Creating new connection to " + address);

    Bootstrap bootstrap = new Bootstrap();
    bootstrap.group(workerGroup).channel(socketChannelClass)
            // Disable Nagle's Algorithm since we don't want packets to wait
            .option(ChannelOption.TCP_NODELAY, true).option(ChannelOption.SO_KEEPALIVE, true)
            .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, conf.connectionTimeoutMs())
            .option(ChannelOption.ALLOCATOR, pooledAllocator);

    final AtomicReference<NettyTransportClient> clientRef = new AtomicReference<NettyTransportClient>();
    final AtomicReference<Channel> channelRef = new AtomicReference<Channel>();

    bootstrap.handler(new ChannelInitializer<SocketChannel>() {
        @Override//  w  w  w.j  a  v  a 2s .  c om
        public void initChannel(SocketChannel ch) {
            TransportChannelHandler clientHandler = context.initializePipeline(ch);
            clientRef.set(clientHandler.getClient());
            channelRef.set(ch);
        }
    });

    // Connect to the remote server
    long preConnect = System.nanoTime();
    ChannelFuture cf = bootstrap.connect(address);
    if (!cf.awaitUninterruptibly(conf.connectionTimeoutMs())) {
        throw new IOException(
                String.format("Connecting to %s timed out (%s ms)", address, conf.connectionTimeoutMs()));
    } else if (cf.cause() != null) {
        throw new IOException(String.format("Failed to connect to %s", address), cf.cause());
    }

    NettyTransportClient client = clientRef.get();
    Channel channel = channelRef.get();
    assert client != null : "Channel future completed successfully with null client";

    // Execute any client bootstraps synchronously before marking the Client as successful.
    long preBootstrap = System.nanoTime();
    logger.debug("Connection to {} successful, running bootstraps...", address);
    try {
        for (TransportClientBootstrap clientBootstrap : clientBootstraps) {
            clientBootstrap.doBootstrap(client, channel);
        }
    } catch (Exception e) { // catch non-RuntimeExceptions too as bootstrap may be written in Scala
        long bootstrapTimeMs = (System.nanoTime() - preBootstrap) / 1000000;
        logger.error("Exception while bootstrapping client after " + bootstrapTimeMs + " ms", e);
        client.close();
        throw Throwables.propagate(e);
    }
    long postBootstrap = System.nanoTime();

    logger.debug("Successfully created connection to {} after {} ms ({} ms spent in bootstraps)", address,
            (postBootstrap - preConnect) / 1000000, (postBootstrap - preBootstrap) / 1000000);

    return client;
}

From source file:org.elasticsearch.hadoop.transport.netty4.Netty4Transport.java

License:Apache License

protected NodeChannels connectToChannelsLight(DiscoveryNode node) {
    InetSocketAddress address = ((InetSocketTransportAddress) node.getAddress()).address();
    ChannelFuture connect = bootstrap.connect(address);
    connect.awaitUninterruptibly((long) (connectTimeout.millis() * 1.5));
    if (!connect.isSuccess()) {
        throw new ConnectTransportException(node, "connect_timeout[" + connectTimeout + "]", connect.cause());
    }// w w  w.  j  a  va  2  s .  c  o m
    Channel[] channels = new Channel[1];
    channels[0] = connect.channel();
    channels[0].closeFuture().addListener(new ChannelCloseListener(node));
    return new NodeChannels(channels, channels, channels, channels, channels);
}

From source file:org.elasticsearch.hadoop.transport.netty4.Netty4Transport.java

License:Apache License

protected NodeChannels connectToChannels(DiscoveryNode node) {
    final NodeChannels nodeChannels = new NodeChannels(new Channel[connectionsPerNodeRecovery],
            new Channel[connectionsPerNodeBulk], new Channel[connectionsPerNodeReg],
            new Channel[connectionsPerNodeState], new Channel[connectionsPerNodePing]);
    boolean success = false;
    try {// w w  w. j  av a2 s . c om
        int numConnections = connectionsPerNodeRecovery + connectionsPerNodeBulk + connectionsPerNodeReg
                + connectionsPerNodeState + connectionsPerNodeRecovery;
        final ArrayList<ChannelFuture> connections = new ArrayList<>(numConnections);
        final InetSocketAddress address = ((InetSocketTransportAddress) node.getAddress()).address();
        for (int i = 0; i < numConnections; i++) {
            connections.add(bootstrap.connect(address));
        }
        final Iterator<ChannelFuture> iterator = connections.iterator();
        try {
            for (Channel[] channels : nodeChannels.getChannelArrays()) {
                for (int i = 0; i < channels.length; i++) {
                    assert iterator.hasNext();
                    ChannelFuture future = iterator.next();
                    future.awaitUninterruptibly((long) (connectTimeout.millis() * 1.5));
                    if (!future.isSuccess()) {
                        throw new ConnectTransportException(node, "connect_timeout[" + connectTimeout + "]",
                                future.cause());
                    }
                    channels[i] = future.channel();
                    channels[i].closeFuture().addListener(new ChannelCloseListener(node));
                }
            }
            if (nodeChannels.recovery.length == 0) {
                if (nodeChannels.bulk.length > 0) {
                    nodeChannels.recovery = nodeChannels.bulk;
                } else {
                    nodeChannels.recovery = nodeChannels.reg;
                }
            }
            if (nodeChannels.bulk.length == 0) {
                nodeChannels.bulk = nodeChannels.reg;
            }
        } catch (final RuntimeException e) {
            for (final ChannelFuture future : Collections.unmodifiableList(connections)) {
                FutureUtils.cancel(future);
                if (future.channel() != null && future.channel().isOpen()) {
                    try {
                        future.channel().close();
                    } catch (Exception inner) {
                        e.addSuppressed(inner);
                    }
                }
            }
            throw e;
        }
        success = true;
    } finally {
        if (success == false) {
            try {
                nodeChannels.close();
            } catch (IOException e) {
                logger.trace("exception while closing channels", e);
            }
        }
    }
    return nodeChannels;
}

From source file:org.elasticsearch.transport.netty4.Netty4Transport.java

License:Apache License

protected NodeChannels connectToChannelsLight(DiscoveryNode node) {
    InetSocketAddress address = ((InetSocketTransportAddress) node.getAddress()).address();
    ChannelFuture connect = bootstrap.connect(address);
    connect.awaitUninterruptibly((long) (connectTimeout.millis() * 1.5));
    if (!connect.isSuccess()) {
        throw new ConnectTransportException(node, "connect_timeout[" + connectTimeout + "]", connect.cause());
    }//from www . j a  v a2s  . c  o  m
    Channel[] channels = new Channel[1];
    channels[0] = connect.channel();
    channels[0].closeFuture().addListener(new ChannelCloseListener(node));
    NodeChannels nodeChannels = new NodeChannels(channels, channels, channels, channels, channels);
    onAfterChannelsConnected(nodeChannels);
    return nodeChannels;
}

From source file:org.elasticsearch.transport.netty4.Netty4Transport.java

License:Apache License

protected NodeChannels connectToChannels(DiscoveryNode node) {
    final NodeChannels nodeChannels = new NodeChannels(new Channel[connectionsPerNodeRecovery],
            new Channel[connectionsPerNodeBulk], new Channel[connectionsPerNodeReg],
            new Channel[connectionsPerNodeState], new Channel[connectionsPerNodePing]);
    boolean success = false;
    try {//from ww  w . j av  a  2  s  . co m
        int numConnections = connectionsPerNodeRecovery + connectionsPerNodeBulk + connectionsPerNodeReg
                + connectionsPerNodeState + connectionsPerNodeRecovery;
        final ArrayList<ChannelFuture> connections = new ArrayList<>(numConnections);
        final InetSocketAddress address = ((InetSocketTransportAddress) node.getAddress()).address();
        for (int i = 0; i < numConnections; i++) {
            connections.add(bootstrap.connect(address));
        }
        final Iterator<ChannelFuture> iterator = connections.iterator();
        try {
            for (Channel[] channels : nodeChannels.getChannelArrays()) {
                for (int i = 0; i < channels.length; i++) {
                    assert iterator.hasNext();
                    ChannelFuture future = iterator.next();
                    future.awaitUninterruptibly((long) (connectTimeout.millis() * 1.5));
                    if (!future.isSuccess()) {
                        throw new ConnectTransportException(node, "connect_timeout[" + connectTimeout + "]",
                                future.cause());
                    }
                    channels[i] = future.channel();
                    channels[i].closeFuture().addListener(new ChannelCloseListener(node));
                }
            }
            if (nodeChannels.recovery.length == 0) {
                if (nodeChannels.bulk.length > 0) {
                    nodeChannels.recovery = nodeChannels.bulk;
                } else {
                    nodeChannels.recovery = nodeChannels.reg;
                }
            }
            if (nodeChannels.bulk.length == 0) {
                nodeChannels.bulk = nodeChannels.reg;
            }
        } catch (final RuntimeException e) {
            for (final ChannelFuture future : Collections.unmodifiableList(connections)) {
                FutureUtils.cancel(future);
                if (future.channel() != null && future.channel().isOpen()) {
                    try {
                        future.channel().close();
                    } catch (Exception inner) {
                        e.addSuppressed(inner);
                    }
                }
            }
            throw e;
        }
        onAfterChannelsConnected(nodeChannels);
        success = true;
    } finally {
        if (success == false) {
            try {
                nodeChannels.close();
            } catch (IOException e) {
                logger.trace("exception while closing channels", e);
            }
        }
    }
    return nodeChannels;
}

From source file:org.hongxi.whatsmars.remoting.netty.NettyRemotingClient.java

License:Apache License

private Channel createChannel(final String addr) throws InterruptedException {
    ChannelWrapper cw = this.channelTables.get(addr);
    if (cw != null && cw.isOK()) {
        cw.getChannel().close();/*from  w w w.  jav a  2s .c o m*/
        channelTables.remove(addr);
    }

    if (this.lockChannelTables.tryLock(LOCK_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)) {
        try {
            boolean createNewConnection;
            cw = this.channelTables.get(addr);
            if (cw != null) {

                if (cw.isOK()) {
                    cw.getChannel().close();
                    this.channelTables.remove(addr);
                    createNewConnection = true;
                } else if (!cw.getChannelFuture().isDone()) {
                    createNewConnection = false;
                } else {
                    this.channelTables.remove(addr);
                    createNewConnection = true;
                }
            } else {
                createNewConnection = true;
            }

            if (createNewConnection) {
                ChannelFuture channelFuture = this.bootstrap.connect(RemotingHelper.string2SocketAddress(addr));
                log.info("createChannel: begin to connect remote host[{}] asynchronously", addr);
                cw = new ChannelWrapper(channelFuture);
                this.channelTables.put(addr, cw);
            }
        } catch (Exception e) {
            log.error("createChannel: create channel exception", e);
        } finally {
            this.lockChannelTables.unlock();
        }
    } else {
        log.warn("createChannel: try to lock channel table, but timeout, {}ms", LOCK_TIMEOUT_MILLIS);
    }

    if (cw != null) {
        ChannelFuture channelFuture = cw.getChannelFuture();
        if (channelFuture.awaitUninterruptibly(this.nettyClientConfig.getConnectTimeoutMillis())) {
            if (cw.isOK()) {
                log.info("createChannel: connect remote host[{}] success, {}", addr, channelFuture.toString());
                return cw.getChannel();
            } else {
                log.warn("createChannel: connect remote host[" + addr + "] failed, " + channelFuture.toString(),
                        channelFuture.cause());
            }
        } else {
            log.warn("createChannel: connect remote host[{}] timeout {}ms, {}", addr,
                    this.nettyClientConfig.getConnectTimeoutMillis(), channelFuture.toString());
        }
    }

    return null;
}