private ChannelFuture rawWrite(Request request) { return request.endOfMessage() ? manager.currentChannel().writeAndFlush(request).addListener(this.writeListener) : manager.currentChannel().write(request).addListener(this.writeListener); }
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); } }
@Override protected void channelRead0(ChannelHandlerContext ctx, Request msg) { if (msg instanceof SegmentedRequestData && msg.endOfMessage()) { sendResponse(ctx, msg); return; } else if (msg instanceof FullRequest) { sendResponse(ctx, msg); } ctx.write(msg); }
when(request1.endOfMessage()).thenReturn(false); when(request1.path()).thenReturn("/foo"); when(request1.streamId()).thenReturn(Message.H1_STREAM_ID_NONE); when(request2.endOfMessage()).thenReturn(false); when(request2.path()).thenReturn("/foo"); when(request2.streamId()).thenReturn(Message.H1_STREAM_ID_NONE); when(request3.endOfMessage()).thenReturn(true); when(request3.path()).thenReturn("/foo"); when(request3.streamId()).thenReturn(Message.H1_STREAM_ID_NONE);
when(request1.endOfMessage()).thenReturn(false); when(request1.path()).thenReturn("/foo"); when(request1.streamId()).thenReturn(Message.H1_STREAM_ID_NONE); when(request2.endOfMessage()).thenReturn(false); when(request2.path()).thenReturn("/foo"); when(request2.streamId()).thenReturn(Message.H1_STREAM_ID_NONE); when(request3.endOfMessage()).thenReturn(true); when(request3.path()).thenReturn("/foo"); when(request3.streamId()).thenReturn(Message.H1_STREAM_ID_NONE);
when(request1a.endOfMessage()).thenReturn(false); when(request1a.path()).thenReturn("/foo"); when(request1a.streamId()).thenReturn(streamId1); when(request1b.endOfMessage()).thenReturn(false); when(request1b.path()).thenReturn("/foo"); when(request1b.streamId()).thenReturn(streamId2); when(request2a.endOfMessage()).thenReturn(false); when(request2a.path()).thenReturn("/foo"); when(request2a.streamId()).thenReturn(streamId1); when(request2b.endOfMessage()).thenReturn(false); when(request2b.path()).thenReturn("/foo"); when(request2b.streamId()).thenReturn(streamId2); when(request3a.endOfMessage()).thenReturn(true); when(request3a.path()).thenReturn("/foo"); when(request3a.streamId()).thenReturn(streamId1); when(request3b.endOfMessage()).thenReturn(true); when(request3b.path()).thenReturn("/foo"); when(request3b.streamId()).thenReturn(streamId2);
when(request1a.endOfMessage()).thenReturn(false); when(request1a.path()).thenReturn("/foo"); when(request1a.streamId()).thenReturn(streamId1); when(request1b.endOfMessage()).thenReturn(false); when(request1b.path()).thenReturn("/foo"); when(request1b.streamId()).thenReturn(streamId2); when(request2a.endOfMessage()).thenReturn(false); when(request2a.path()).thenReturn("/foo"); when(request2a.streamId()).thenReturn(streamId1); when(request2b.endOfMessage()).thenReturn(false); when(request2b.path()).thenReturn("/foo"); when(request2b.streamId()).thenReturn(streamId2); when(request3a.endOfMessage()).thenReturn(true); when(request3a.path()).thenReturn("/foo"); when(request3a.streamId()).thenReturn(streamId1); when(request3b.endOfMessage()).thenReturn(true); when(request3b.path()).thenReturn("/foo"); when(request3b.streamId()).thenReturn(streamId2);
@Override protected void channelRead0(ChannelHandlerContext ctx, Request msg) throws Exception { if (msg instanceof SegmentedRequestData && msg.endOfMessage()) { sendResponse(ctx, msg.httpTraceInfo(), msg.streamId()); return; } else if (msg instanceof FullRequest) { sendResponse(ctx, msg.httpTraceInfo(), msg.streamId()); } ctx.write(msg); }
if (request.endOfMessage()) { handleGrpcRequest(ctx, state, request.streamId()); } else {
@Override public void channelRead0(ChannelHandlerContext ctx, Request request) throws Exception { ByteBuf content = Unpooled.copiedBuffer("Here is the default content that is returned", CharsetUtil.UTF_8); HttpResponseStatus status = OK; Tracer tracer = httpTracing.tracing().tracer(); if (request.endOfMessage()) { request .httpTraceInfo() .getSpan() .ifPresent( parent -> { if (parent instanceof brave.Span) { Span span = tracer.newChild(((brave.Span) parent).context()).name("child").start(); span.finish(); } }); val response = DefaultFullResponse.builder() .status(status) .headers(new DefaultHeaders()) .httpTraceInfo(request.httpTraceInfo()) .status(status) .body(content) .build(); ctx.writeAndFlush(response).addListener(ChannelFutureListener.CLOSE); } } }
assertNotNull(((SegmentedRequestData) bodyOut1).content()); assertEquals(body1, ((SegmentedRequestData) bodyOut1).content()); assertFalse(bodyOut1.endOfMessage()); assertNotNull(((SegmentedRequestData) bodyOut2).content()); assertEquals(body2, ((SegmentedRequestData) bodyOut2).content()); assertFalse(bodyOut2.endOfMessage()); assertEquals(1, ((SegmentedRequestData) trailersOut).trailingHeaders().size()); assertEquals("bar", ((SegmentedRequestData) trailersOut).trailingHeaders().get("foo")); assertTrue(trailersOut.endOfMessage());
assertNotNull(((SegmentedRequestData) bodyOut1).content()); assertEquals(body1, ((SegmentedRequestData) bodyOut1).content()); assertFalse(bodyOut1.endOfMessage()); assertNotNull(((SegmentedRequestData) bodyOut2).content()); assertEquals(body2, ((SegmentedRequestData) bodyOut2).content()); assertTrue(bodyOut2.endOfMessage());