private ListenableFuture<RapidResponse> sendOnce(final Endpoint remote, final RapidRequest msg) { try { final long reqNo = counter.incrementAndGet(); final SettableFuture<RapidResponse> future = outstandingRequests.get(reqNo); final ChannelFuture f = channelCache.get(remote); ignoreFuture(f.channel().writeAndFlush(new WrappedRapidRequest(reqNo, msg), f.channel().voidPromise())); return future; } catch (final ExecutionException e) { return Futures.immediateFailedFuture(e); } }