@Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { super.channelRead(ctx, msg); if (msg instanceof Request) { Request request = (Request) msg; if (request.startOfMessage()) { requestsMeter.mark(); } } }
@Override public void channelRead0(ChannelHandlerContext ctx, Request request) throws Exception { if (request.startOfMessage()) { state.onRequest(ctx, request); } ctx.fireChannelRead(request); }
@Override public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { if (!(msg instanceof Request)) { ctx.write(msg, promise); return; } Request request = (Request) msg; if (request.startOfMessage()) { state.onRequest(ctx, request); } ctx.write(msg, promise) .addListener( future -> { if (!future.isSuccess()) { state.onError(ctx, request, future.cause()); } }); } }
(f) -> { if (!f.isSuccess()) { if (request.startOfMessage()) { log.error("proxy request failed client write failed", f.cause()); Response notFound = ResponseBuilders.newServiceUnavailable(request); if (request.startOfMessage()) { log.error("proxy request failed - backend client disconnected"); Response notFound = ResponseBuilders.newNotFound(request);
void onInboundRequest(Request request) { MessageMetaState initialRequest = streamIdRequests.get(request.streamId()); if (initialRequest == null) { if (request.startOfMessage()) { streamIdRequests.put( request.streamId(), new MessageMetaState(request, request.endOfMessage())); } else { log.error( "Received an h2 message segment without initial startOfMessage == true - request: {}", request); } } else { initialRequest.requestFinished = request.endOfMessage(); } }
@VisibleForTesting Optional<ClientConfig> getClientConfig( IntObjectMap<Optional<ClientConfig>> cachedClientConfig, Request request) { int hashKey = request.streamId(); // we only do a fresh round robin if the request is a either a FULL HTTP REQUEST or the First Part of a Chunked Requets if (request.isFullMessage()) { return computationFunction.get(); } else if (request.startOfMessage()) { Optional<ClientConfig> newClientConfig = computationFunction.get(); cachedClientConfig.put(hashKey, newClientConfig); return newClientConfig; } else if (request.endOfMessage()) { return cachedClientConfig.remove(hashKey); } else { return cachedClientConfig.get(hashKey); } }
Client client = factory.getClient(ctx, clientConfig.get()); if (!request.startOfMessage()) { log.debug("not start of stream"); writeClientRequest(ctx, client, request);
when(request1.startOfMessage()).thenReturn(true); when(request1.endOfMessage()).thenReturn(false); when(request1.path()).thenReturn("/foo"); when(request2.startOfMessage()).thenReturn(false); when(request2.endOfMessage()).thenReturn(false); when(request2.path()).thenReturn("/foo"); when(request3.startOfMessage()).thenReturn(false); when(request3.endOfMessage()).thenReturn(true); when(request3.path()).thenReturn("/foo");
when(request1.startOfMessage()).thenReturn(true); when(request1.endOfMessage()).thenReturn(false); when(request1.path()).thenReturn("/foo"); when(request2.startOfMessage()).thenReturn(false); when(request2.endOfMessage()).thenReturn(false); when(request2.path()).thenReturn("/foo"); when(request3.startOfMessage()).thenReturn(false); when(request3.endOfMessage()).thenReturn(true); when(request3.path()).thenReturn("/foo");
when(request1a.startOfMessage()).thenReturn(true); when(request1a.endOfMessage()).thenReturn(false); when(request1a.path()).thenReturn("/foo"); when(request1b.startOfMessage()).thenReturn(true); when(request1b.endOfMessage()).thenReturn(false); when(request1b.path()).thenReturn("/foo"); when(request2a.startOfMessage()).thenReturn(false); when(request2a.endOfMessage()).thenReturn(false); when(request2a.path()).thenReturn("/foo"); when(request2b.startOfMessage()).thenReturn(false); when(request2b.endOfMessage()).thenReturn(false); when(request2b.path()).thenReturn("/foo"); when(request3a.startOfMessage()).thenReturn(false); when(request3a.endOfMessage()).thenReturn(true); when(request3a.path()).thenReturn("/foo"); when(request3b.startOfMessage()).thenReturn(false); when(request3b.endOfMessage()).thenReturn(true); when(request3b.path()).thenReturn("/foo");
when(request1a.startOfMessage()).thenReturn(true); when(request1a.endOfMessage()).thenReturn(false); when(request1a.path()).thenReturn("/foo"); when(request1b.startOfMessage()).thenReturn(true); when(request1b.endOfMessage()).thenReturn(false); when(request1b.path()).thenReturn("/foo"); when(request2a.startOfMessage()).thenReturn(false); when(request2a.endOfMessage()).thenReturn(false); when(request2a.path()).thenReturn("/foo"); when(request2b.startOfMessage()).thenReturn(false); when(request2b.endOfMessage()).thenReturn(false); when(request2b.path()).thenReturn("/foo"); when(request3a.startOfMessage()).thenReturn(false); when(request3a.endOfMessage()).thenReturn(true); when(request3a.path()).thenReturn("/foo"); when(request3b.startOfMessage()).thenReturn(false); when(request3b.endOfMessage()).thenReturn(true); when(request3b.path()).thenReturn("/foo");