Example usage for io.netty.util.concurrent Future cause

List of usage examples for io.netty.util.concurrent Future cause

Introduction

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

Prototype

Throwable cause();

Source Link

Document

Returns the cause of the failed I/O operation if the I/O operation has failed.

Usage

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

License:Open Source License

private void handleGET(final ChannelHandlerContext ctx, final ObjectRequest objectRequest) throws Exception {

    log.info("handleGET req: {}", httpRequest);

    mds.list(ctx.executor(), objectRequest).addListener(new GenericFutureListener<Future<ObjectResponse>>() {
        @Override/*from  ww  w.  j  av a2s. c  o m*/
        public void operationComplete(Future<ObjectResponse> future) throws Exception {
            if (!future.isSuccess()) {
                log.error("future failed for handleGET: {}", objectRequest, future.cause());
                sendError(ctx, HttpResponseStatus.INTERNAL_SERVER_ERROR);
                return;
            }

            ObjectResponse objectResponse = future.getNow();

            log.info("result of mds.operate: {} -> {}", objectRequest, objectResponse);

            if (objectResponse instanceof ObjectResponse.EmptyResponse) {
                log.info("nothing found at: {}", objectRequest);
                sendError(ctx, HttpResponseStatus.NOT_FOUND);
                return;

            }

            if (objectResponse instanceof ObjectResponse.SingleObject) {
                log.info("GET is for a file. proxy for downloading: {}", objectResponse);
                setupProxyToGET(ctx, ((ObjectResponse.SingleObject) objectResponse).fullObjectName);
                return;

            }

            if (!(objectResponse instanceof ObjectResponse.MultipleObjects)) {
                log.info("multipleObjects.objects is not MultipleObjects: {}", objectResponse);
                sendError(ctx, HttpResponseStatus.NOT_FOUND);
                return;
            }

            log.info("returning result of mds.list: {}", objectResponse.json());
            ctx.writeAndFlush(objectResponse.encode(), ctx.voidPromise());
        }
    });
}

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

License:Open Source License

private void handleDELETE(final ChannelHandlerContext ctx, final ObjectRequest request) throws IOException {
    log.info("handleDELETE req: {}", httpRequest);

    mds.delete(ctx.executor(), request).addListener(new GenericFutureListener<Future<ObjectResponse>>() {
        @Override/*from  w  ww .j a v  a 2 s  .  c o  m*/
        public void operationComplete(Future<ObjectResponse> future) throws Exception {
            if (future.isSuccess()) {
                ObjectResponse response = future.get();
                if (response instanceof ObjectResponse.Failure) {
                    log.warn("error on handleDELETE: {} -> {}", request, response);
                    sendError(ctx, response.encode());
                } else {
                    log.info("successful handleDELETE req: {}, rsp: {}", request, response);
                    ctx.writeAndFlush(response.encode());
                }
            } else {
                log.warn("error on handleDELETE: {}", request, future.cause());
                sendError(ctx, HttpResponseStatus.BAD_REQUEST);
            }
        }
    });

}

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

License:Open Source License

private void handleHEAD(final ChannelHandlerContext ctx, final ObjectRequest objectRequest) {

    log.info("handleHEAD uri: {} ", httpRequest.getUri());

    mds.head(ctx.executor(), objectRequest).addListener(new GenericFutureListener<Future<ObjectResponse>>() {
        @Override/*from  w w  w .  j a va2  s .  c  o m*/
        public void operationComplete(Future<ObjectResponse> future) throws Exception {
            if (future.isSuccess()) {
                ObjectResponse objectResponse = future.get();

                log.info("handleHEAD {} -> {}", objectRequest, objectResponse);

                // todo: use .encode()
                if (objectResponse instanceof ObjectResponse.SingleObject) {
                    ObjectResponse.SingleObject singleObject = (ObjectResponse.SingleObject) objectResponse;

                    FullHttpResponse response = new DefaultFullHttpResponse(HTTP_1_1,
                            HttpResponseStatus.NO_CONTENT);

                    if (singleObject.fullObjectName.attributes.dir) {
                        response.headers().set(CONTENT_TYPE, "application/x-json-stream; type=directory");
                    } else {
                        response.headers().set(CONTENT_MD5, singleObject.fullObjectName.attributes.md5);
                    }

                    ctx.writeAndFlush(response).addListener(new GenericFutureListener<ChannelFuture>() {

                        @Override
                        public void operationComplete(ChannelFuture future) throws Exception {
                            if (future.isSuccess()) {
                                log.info("write success");
                            } else {
                                log.info("write failed: {}", future.cause());
                            }

                        }
                    });

                    return;
                }

                log.warn("error on handleHEAD: {}", objectRequest, future.cause());
                sendError(ctx, ERROR_BAD_REQUEST);
            }
        }
    });

}

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;//www .  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/*from   w  w  w .j a  va2 s  . c o  m*/
        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.vertx.core.dns.impl.fix.DnsNameResolver.java

License:Apache License

private void doResolveUncached(String hostname, Promise<InetAddress> promise, DnsCache resolveCache,
        boolean trySearchDomain) {
    if (trySearchDomain) {
        Promise<InetAddress> original = promise;
        promise = new DefaultPromise<>(executor());
        FutureListener<InetAddress> globalListener = future -> {
            if (future.isSuccess()) {
                original.setSuccess(future.getNow());
            } else {
                FutureListener<InetAddress> sdListener = new FutureListener<InetAddress>() {
                    int count;

                    @Override// w w w  . j a  v  a 2  s .  com
                    public void operationComplete(Future<InetAddress> future) throws Exception {
                        if (future.isSuccess()) {
                            original.trySuccess(future.getNow());
                        } else {
                            if (count < searchDomains.size()) {
                                String searchDomain = searchDomains.get(count++);
                                Promise<InetAddress> p = new DefaultPromise<>(executor());
                                doResolveUncached(hostname + "." + searchDomain, p, resolveCache, false);
                                p.addListener(this);
                            } else {
                                original.tryFailure(future.cause());
                            }
                        }
                    }
                };
                future.addListener(sdListener);
            }
        };
        promise.addListener(globalListener);
    }
    if (searchDomains(hostname)) {
        promise.tryFailure(new UnknownHostException(hostname));
    } else {
        final DnsNameResolverContext<InetAddress> ctx = new DnsNameResolverContext<InetAddress>(this, hostname,
                promise, resolveCache) {
            @Override
            protected boolean finishResolve(Class<? extends InetAddress> addressType,
                    List<DnsCacheEntry> resolvedEntries) {

                final int numEntries = resolvedEntries.size();
                for (int i = 0; i < numEntries; i++) {
                    final InetAddress a = resolvedEntries.get(i).address();
                    if (addressType.isInstance(a)) {
                        setSuccess(promise(), a);
                        return true;
                    }
                }
                return false;
            }
        };

        ctx.resolve();
    }
}

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

License:Apache License

private void query(InetSocketAddress nameServerAddr, final DnsQuestion question) {
    if (allowedQueries == 0 || promise.isCancelled()) {
        tryToFinishResolve();/*from w ww .  j a v  a 2  s  .com*/
        return;
    }

    allowedQueries--;

    final Future<AddressedEnvelope<DnsResponse, InetSocketAddress>> f = parent.query(nameServerAddr, question);
    queriesInProgress.add(f);

    f.addListener(new FutureListener<AddressedEnvelope<DnsResponse, InetSocketAddress>>() {
        @Override
        public void operationComplete(Future<AddressedEnvelope<DnsResponse, InetSocketAddress>> future) {
            queriesInProgress.remove(future);

            if (promise.isDone() || future.isCancelled()) {
                return;
            }

            try {
                if (future.isSuccess()) {
                    onResponse(question, future.getNow());
                } else {
                    // Server did not respond or I/O error occurred; try again.
                    if (traceEnabled) {
                        addTrace(future.cause());
                    }
                    query(nameServerAddrs.next(), question);
                }
            } finally {
                tryToFinishResolve();
            }
        }
    });
}

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  www  .  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: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//w w w.  j  a  v  a2s . c om
                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.ferrybig.javacoding.teamspeakconnector.util.FutureUtil.java

License:Open Source License

private static <T, R> Future<R> delegateFutureResult(Future<T> future, Promise<R> prom, Function<T, R> map) {
    future.addListener(ignored -> {//w w  w.  java2s  . c  o m
        assert ignored == future;
        try {
            if (future.isSuccess()) {
                prom.setSuccess(map.apply(future.getNow()));
            } else {
                prom.setFailure(future.cause());
            }
        } catch (Throwable e) {
            prom.setFailure(e);
        }
    });
    return prom;
}