Skip to content

Commit 550d117

Browse files
committed
Implement setting timeout value for the ext-proc call specified in the GrpcService config.
1 parent ccba6d0 commit 550d117

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

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

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,14 @@
3333
import java.io.IOException;
3434
import java.io.InputStream;
3535
import java.util.concurrent.ScheduledExecutorService;
36+
import java.util.concurrent.TimeUnit;
3637
import java.util.concurrent.atomic.AtomicBoolean;
3738
import javax.annotation.Nullable;
3839

3940
public class ExternalProcessorFilter implements Filter {
4041
static final String TYPE_URL = "type.googleapis.com/envoy.extensions.filters.http.ext_proc.v3.ExternalProcessor";
4142

4243
final String filterInstanceName;
43-
ManagedChannel grpcServiceChannel;
44-
ExternalProcessorGrpc.ExternalProcessorStub externalProcessorStub;
4544
private final Object lock = new Object();
4645

4746
public ExternalProcessorFilter(String name) {
@@ -154,6 +153,15 @@ public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(
154153
Channel next) {
155154
ExternalProcessorGrpc.ExternalProcessorStub stub = ExternalProcessorGrpc.newStub(
156155
cachedChannelManager.getChannel(filterConfig.grpcServiceConfig));
156+
157+
if (filterConfig.grpcServiceConfig.timeout() != null && filterConfig.grpcServiceConfig.timeout().isPresent()) {
158+
long timeoutNanos = filterConfig.grpcServiceConfig.timeout().get().getSeconds() * 1_000_000_000L
159+
+ filterConfig.grpcServiceConfig.timeout().get().getNano();
160+
if (timeoutNanos > 0) {
161+
stub = stub.withDeadlineAfter(timeoutNanos, TimeUnit.NANOSECONDS);
162+
}
163+
}
164+
157165
ExternalProcessor config = filterConfig.externalProcessor;
158166

159167
MethodDescriptor<InputStream, InputStream> rawMethod = method.toBuilder(RAW_MARSHALLER, RAW_MARSHALLER).build();
@@ -372,7 +380,7 @@ else if (response.hasRequestBody()) {
372380
// 3. We don't send request trailers in gRPC for half close.
373381
// 4. Server Headers
374382
else if (response.hasResponseHeaders()) {
375-
if (response.getResponseHeaders().hasResponse()) {
383+
if (response.hasResponseHeaders() && response.getResponseHeaders().hasResponse()) {
376384
applyHeaderMutations(wrappedListener.savedHeaders, response.getResponseHeaders().getResponse().getHeaderMutation());
377385
}
378386
wrappedListener.proceedWithHeaders();

0 commit comments

Comments
 (0)