diff --git a/core/src/main/java/io/grpc/internal/RetriableStream.java b/core/src/main/java/io/grpc/internal/RetriableStream.java index 0c37a0beaca..d12341b379c 100644 --- a/core/src/main/java/io/grpc/internal/RetriableStream.java +++ b/core/src/main/java/io/grpc/internal/RetriableStream.java @@ -754,7 +754,13 @@ public final void setDeadline(final Deadline deadline) { class DeadlineEntry implements BufferEntry { @Override public void runWith(Substream substream) { - substream.stream.setDeadline(deadline); + if (retryPolicy != null && retryPolicy.perAttemptRecvTimeoutNanos != null) { + Deadline perAttemptDeadline = + Deadline.after(retryPolicy.perAttemptRecvTimeoutNanos, TimeUnit.NANOSECONDS); + substream.stream.setDeadline(deadline.minimum(perAttemptDeadline)); + } else { + substream.stream.setDeadline(deadline); + } } }