Example usage for io.netty.util.concurrent GenericFutureListener GenericFutureListener

List of usage examples for io.netty.util.concurrent GenericFutureListener GenericFutureListener

Introduction

In this page you can find the example usage for io.netty.util.concurrent GenericFutureListener GenericFutureListener.

Prototype

GenericFutureListener

Source Link

Usage

From source file:io.urmia.api.handler.RestApiHandler.java

License:Open Source License

private void handlePUTmkdir(final ChannelHandlerContext ctx, ObjectRequest request) throws Exception {
    if (request.isNotDirectory()) {
        log.warn("request is not mkdir: {}", request);
        sendError(ctx, HttpResponseStatus.BAD_REQUEST);
        return;/*from   w ww . ja  v  a  2  s.  c  o  m*/
    }

    log.info("this is a mkdir: {}", request);
    ExtendedObjectAttributes eoa = new ExtendedObjectAttributes(true, 0, "", uuid.next(), 1,
            System.currentTimeMillis());
    final FullObjectRequest fullObjectRequest = new FullObjectRequest(request, eoa);
    mds.put(ctx.executor(), fullObjectRequest).addListener(new GenericFutureListener<Future<ObjectResponse>>() {
        @Override
        public void operationComplete(Future<ObjectResponse> future) throws Exception {
            if (future.isSuccess()) {
                ObjectResponse response = future.getNow();
                log.info("successful mkdir: {}", response);
                ctx.writeAndFlush(
                        new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.NO_CONTENT),
                        ctx.voidPromise());
                ctx.channel().close();
            } else {
                log.warn("no success on mkdir: {}", future.cause());
                sendError(ctx, HttpResponseStatus.BAD_REQUEST);
            }
        }
    });
}

From source file:io.urmia.api.handler.RestApiHandler.java

License:Open Source License

private void setupProxyToGET(final ChannelHandlerContext ctx, final FullObjectName fon) throws Exception {

    log.info("proxy GET storage node: download mode: {}", true);

    final Future<List<String>> futureStorageNodes = mds.storedNodes(ctx.executor(), fon.attributes.etag);

    futureStorageNodes.addListener(new GenericFutureListener<Future<List<String>>>() {
        @Override/*w  w w  .j a  v a 2 s.com*/
        public void operationComplete(Future<List<String>> future) throws Exception {
            if (future.isSuccess()) {
                final List<String> st = future.getNow();

                Optional<ServiceInstance<NodeType>> si = findStorageInstanceUp(st);

                if (!si.isPresent()) {
                    log.error("failed to find running node, req: {}", objectRequest);
                    sendError(ctx, HttpResponseStatus.INTERNAL_SERVER_ERROR);
                    return;
                }

                List<ServiceInstance<NodeType>> l = Lists.newArrayList(si.get());
                log.info("proxy storage node: {}, download mode: {}, durability: {}", st, true,
                        objectRequest.getDurability());
                HttpProxyFrontendHandler proxy = new HttpProxyFrontendHandler(l, mds, httpRequest, ctx, true,
                        Optional.<FullObjectName>absent());

                ctx.pipeline().remove("encoder");

                ctx.pipeline().addLast("proxy", proxy);

                proxyMode = true;

                ctx.read(); // todo: can ve removed?

            } else {
                log.error("failed to fetch futureStorageNodes, req: {}", objectRequest, future.cause());
                sendError(ctx, HttpResponseStatus.INTERNAL_SERVER_ERROR);
            }
        }
    });

}

From source file:io.urmia.proxy.HttpProxyFrontendHandler.java

License:Open Source License

private Channel openOutboundChannel(final ChannelHandlerContext ctx, String remoteHost, int remotePort,
        final int index) {

    log.info("proxy opening outbound channel to({}): {}:{}", index, remoteHost, remotePort);

    Bootstrap b = new Bootstrap();
    b.group(new NioEventLoopGroup()).channel(NioSocketChannel.class)
            .handler(new HttpProxyBackendInitializer(ctx, index, directWriteBack))
            .option(ChannelOption.AUTO_READ, false);

    ChannelFuture f = b.connect(remoteHost, remotePort);
    Channel outboundChannel = f.channel();
    f.addListener(new GenericFutureListener<ChannelFuture>() {
        @Override// w w w.j a  va2s .  c om
        public void operationComplete(ChannelFuture futureC) throws Exception {
            if (futureC.isSuccess()) {
                futureC.channel().writeAndFlush(initHttpRequest)
                        .addListener(new GenericFutureListener<ChannelFuture>() {
                            @Override
                            public void operationComplete(ChannelFuture futureW) throws Exception {
                                if (futureW.isSuccess())
                                    onSuccessfulWrite(ctx, index);
                                else {
                                    log.info("unable to write http request: {}", futureW.cause());
                                    ctx.fireUserEventTriggered(new ProxyUserEvent(OUTBOUND_ERROR, index));
                                }
                            }
                        });
            } else {
                ctx.fireUserEventTriggered(new ProxyUserEvent(OUTBOUND_ERROR, index));
            }
        }
    });

    return outboundChannel;
}

From source file:io.urmia.proxy.HttpProxyFrontendHandler.java

License:Open Source License

private void writeToAllOutbounds(final ChannelHandlerContext ctx, final HttpContent msg) {

    writeSet.clear();/*from  w w  w  . j ava2s  . c  om*/

    final int contentSize = msg.content().writableBytes();

    int i = 0;

    for (final Channel outboundChannel : outboundChannels) {

        final int chIdx = i++;

        outboundChannel.writeAndFlush(msg.duplicate()) // duplicate because different widx
                .addListener(new GenericFutureListener<ChannelFuture>() {
                    @Override
                    public void operationComplete(ChannelFuture future) throws Exception {
                        if (future.isSuccess()) {
                            writtenSizes[chIdx].addAndGet(contentSize);
                            onSuccessfulWrite(ctx, chIdx);
                        } else {
                            log.error("error to write to outbound", future.cause());
                            future.channel().close();
                        }

                    }
                });
    }
}

From source file:io.urmia.proxy.HttpProxyFrontendHandler.java

License:Open Source License

private void onComplete(final ChannelHandlerContext ctx, final int index) {
    log.info("onComplete: {}", index);

    completedSet.set(index);/*ww w. j av  a  2 s  .  co  m*/

    mds.flagStored(ctx.executor(), storageNodes.get(index).getId(), etag);

    if (completedSet.cardinality() != outboundCount)
        return;

    log.info("all onComplete");

    final String md5;
    final long size;

    if (fon.isPresent()) {
        md5 = fon.get().attributes.md5;
        size = fon.get().attributes.size;

        digestFinal();
    } else {
        // todo: for mln copy md5 and size from original object
        md5 = digestFinal();
        log.info("md5: ", md5);

        size = receivedSize.longValue();
        receivedSize.set(0);
        log.info("size: {}", size);
    }

    ExtendedObjectAttributes eoa = new ExtendedObjectAttributes(false, size, md5, etag.value,
            completedSet.cardinality(), System.currentTimeMillis());
    final FullObjectRequest req = new FullObjectRequest(objectRequest, eoa);

    log.info("mds.put: {}", req);

    mds.put(ctx.executor(), req).addListener(new GenericFutureListener<Future<ObjectResponse>>() {
        @Override
        public void operationComplete(Future<ObjectResponse> future) throws Exception {
            HttpResponseStatus status = future.isSuccess() ? HttpResponseStatus.OK
                    : HttpResponseStatus.BAD_GATEWAY;

            DefaultFullHttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, status);
            log.info("writing back to client: {}", response);
            ctx.writeAndFlush(response).addListener(new GenericFutureListener<ChannelFuture>() {
                @Override
                public void operationComplete(ChannelFuture future) throws Exception {
                    log.info("write back successful. closing channel");
                    ctx.channel().close();
                }
            });
        }
    });
}

From source file:io.vertx.core.dns.impl.fix.DnsQueryContext.java

License:Apache License

private void sendQuery(final DnsQuery query) {
    if (parent.channelFuture.isDone()) {
        writeQuery(query);//from   w  ww. j  a v a  2s.  c o m
    } else {
        parent.channelFuture.addListener(new GenericFutureListener<Future<? super Channel>>() {
            @Override
            public void operationComplete(Future<? super Channel> future) throws Exception {
                if (future.isSuccess()) {
                    writeQuery(query);
                } else {
                    promise.tryFailure(future.cause());
                }
            }
        });
    }
}

From source file:io.vertx.core.impl.VertxImpl.java

License:Open Source License

@SuppressWarnings("unchecked")
private void deleteCacheDirAndShutdown(Handler<AsyncResult<Void>> completionHandler) {
    fileResolver.close(res -> {/* w ww  . j  a  v  a2  s. c  o m*/

        workerPool.close();
        internalBlockingPool.close();
        new ArrayList<>(namedWorkerPools.values()).forEach(WorkerPool::close);

        acceptorEventLoopGroup.shutdownGracefully(0, 10, TimeUnit.SECONDS)
                .addListener(new GenericFutureListener() {
                    @Override
                    public void operationComplete(io.netty.util.concurrent.Future future) throws Exception {
                        if (!future.isSuccess()) {
                            log.warn("Failure in shutting down acceptor event loop group", future.cause());
                        }
                        eventLoopGroup.shutdownGracefully(0, 10, TimeUnit.SECONDS)
                                .addListener(new GenericFutureListener() {
                                    @Override
                                    public void operationComplete(io.netty.util.concurrent.Future future)
                                            throws Exception {
                                        if (!future.isSuccess()) {
                                            log.warn("Failure in shutting down event loop group",
                                                    future.cause());
                                        }
                                        if (metrics != null) {
                                            metrics.close();
                                        }

                                        checker.close();

                                        if (completionHandler != null) {
                                            eventLoopThreadFactory.newThread(() -> {
                                                completionHandler.handle(Future.succeededFuture());
                                            }).start();
                                        }
                                    }
                                });
                    }
                });
    });
}

From source file:jj.repl.ReplServer.java

License:Apache License

@Listener
void configurationLoaded(ConfigurationLoaded configurationLoaded) {
    if (configuration.activate()) {

        if (server != null && port != configuration.port()) {

            server.group().terminationFuture().addListener(new GenericFutureListener<Future<Object>>() {
                @Override/*from ww w  . ja va2 s  . c  o m*/
                public void operationComplete(Future<Object> future) throws Exception {
                    // if this failed what do we do?
                    // just publish an emergency
                    if (future.isSuccess()) {
                        start();
                    } else {
                        publisher.publish(new Emergency(
                                "couldn't restart the REPL server.  The server may need to be restarted",
                                future.cause()));
                    }
                }
            });

            shutdown();

        } else if (server == null) {
            start();
        }

    } else if (server != null) {
        shutdown();
    }
}

From source file:me.melchor9000.net.NettyFuture.java

License:Open Source License

NettyFuture(@NotNull io.netty.util.concurrent.Future<ReturnType> future, @NotNull IOService service,
        @Nullable Procedure whenCancelled) {
    this.future = future;
    this.service = service;
    this.whenCancelled = whenCancelled;
    future.addListener(new GenericFutureListener<io.netty.util.concurrent.Future<? super ReturnType>>() {
        @Override//from  w  w  w.  j a  v a  2s . c  om
        public void operationComplete(io.netty.util.concurrent.Future<? super ReturnType> future)
                throws Exception {
            if (timeoutFuture != null)
                timeoutFuture.cancel(false);
        }
    });
}

From source file:me.melchor9000.net.NettyFuture.java

License:Open Source License

@NotNull
public Future<ReturnType> whenDone(@NotNull final Callback<Future<ReturnType>> cbk) {
    future.addListener(new GenericFutureListener<io.netty.util.concurrent.Future<? super ReturnType>>() {
        @Override/*from w  w w  . j  a v  a  2s  . co  m*/
        public void operationComplete(io.netty.util.concurrent.Future<? super ReturnType> future)
                throws Exception {
            try {
                cbk.call(NettyFuture.this);
            } catch (Exception exception) {
                throw exception;
            } catch (Throwable throwable) {
                System.err.println("Caught a Throwable in " + cbk.getClass().getName() + ".call()");
                throwable.printStackTrace();
            }
        }
    });
    return this;
}