Skip to content

Commit d75cc4e

Browse files
committed
xds: enforce trailer mode SEND for GRPC response body mode in ext_proc client
- Enforce that responseTrailerMode must be SEND if responseBodyMode is GRPC in ExternalProcessorFilter configuration validation. - Refactor ExternalProcessorClientInterceptor.triggerCloseHandshake to cleanly close the ext_proc stream when trailers are skipped, removing the legacy empty body end-of-stream signal. - Update unit tests in ExternalProcessorClientInterceptorTest to configure responseTrailerMode = SEND when using responseBodyMode = GRPC and perform the trailers handshake. - Rename givenExtProcRespondsWithEndOfStream_whenAppHasNotHalfClosed_thenClosePropagated to givenResponseTrailerModeSend_whenDataPlaneCloses_thenTrailersHandshakeCompleted.
1 parent b6e22cb commit d75cc4e

3 files changed

Lines changed: 721 additions & 559 deletions

File tree

xds/src/main/java/io/grpc/xds/ExternalProcessorClientInterceptor.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1370,14 +1370,8 @@ private void triggerCloseHandshake() {
13701370
.build())
13711371
.build());
13721372
} else {
1373-
// Send EOS signal via empty body
1374-
dataPlaneClientCall.sendToExtProc(ProcessingRequest.newBuilder()
1375-
.setResponseBody(HttpBody.newBuilder()
1376-
.setEndOfStreamWithoutMessage(true)
1377-
.build())
1378-
.build());
1379-
13801373
proceedWithClose();
1374+
dataPlaneClientCall.closeExtProcStream();
13811375
}
13821376
}
13831377

xds/src/main/java/io/grpc/xds/ExternalProcessorFilter.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -193,9 +193,9 @@ private static ConfigOrError<Optional<GrpcServiceConfig>> parseAndValidate(
193193
}
194194

195195
if (mode.getResponseBodyMode() == ProcessingMode.BodySendMode.GRPC
196-
&& mode.getResponseHeaderMode() != ProcessingMode.HeaderSendMode.SEND) {
197-
return ConfigOrError.fromError("Invalid response_header_mode: " + mode.getResponseHeaderMode()
198-
+ ". response_header_mode must be SEND if response_body_mode is GRPC.");
196+
&& mode.getResponseTrailerMode() != ProcessingMode.HeaderSendMode.SEND) {
197+
return ConfigOrError.fromError("Invalid response_trailer_mode: " + mode.getResponseTrailerMode()
198+
+ ". response_trailer_mode must be SEND if response_body_mode is GRPC.");
199199
}
200200

201201
try {

0 commit comments

Comments
 (0)