List of usage examples for io.netty.util.concurrent GenericFutureListener GenericFutureListener
GenericFutureListener
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; }