Skip to content

Commit 135f433

Browse files
authored
Revert "stub: Ignore unary response on server if status is not OK" (#11636) (#11640)
This reverts commit 99f8683. The change doesn't handle `null` messages, which don't happen with protobuf, but can happen with other marshallers, especially in tests. See cl/689445172 This will reopen #5969.
1 parent 2d0c158 commit 135f433

File tree

2 files changed

+4
-74
lines changed

2 files changed

+4
-74
lines changed

stub/src/main/java/io/grpc/stub/ServerCalls.java

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,6 @@ private static final class ServerCallStreamObserverImpl<ReqT, RespT>
335335
private boolean aborted = false;
336336
private boolean completed = false;
337337
private Runnable onCloseHandler;
338-
private RespT unaryResponse;
339338

340339
// Non private to avoid synthetic class
341340
ServerCallStreamObserverImpl(ServerCall<ReqT, RespT> call, boolean serverStreamingOrBidi) {
@@ -374,22 +373,15 @@ public void onNext(RespT response) {
374373
}
375374
checkState(!aborted, "Stream was terminated by error, no further calls are allowed");
376375
checkState(!completed, "Stream is already completed, no further calls are allowed");
377-
if (serverStreamingOrBidi) {
378-
if (!sentHeaders) {
379-
call.sendHeaders(new Metadata());
380-
sentHeaders = true;
381-
}
382-
call.sendMessage(response);
383-
} else {
384-
unaryResponse = response;
376+
if (!sentHeaders) {
377+
call.sendHeaders(new Metadata());
378+
sentHeaders = true;
385379
}
380+
call.sendMessage(response);
386381
}
387382

388383
@Override
389384
public void onError(Throwable t) {
390-
if (!serverStreamingOrBidi) {
391-
unaryResponse = null;
392-
}
393385
Metadata metadata = Status.trailersFromThrowable(t);
394386
if (metadata == null) {
395387
metadata = new Metadata();
@@ -400,14 +392,6 @@ public void onError(Throwable t) {
400392

401393
@Override
402394
public void onCompleted() {
403-
if (!serverStreamingOrBidi && unaryResponse != null) {
404-
if (!sentHeaders) {
405-
call.sendHeaders(new Metadata());
406-
sentHeaders = true;
407-
}
408-
call.sendMessage(unaryResponse);
409-
unaryResponse = null;
410-
}
411395
call.close(Status.OK, new Metadata());
412396
completed = true;
413397
}

stub/src/test/java/io/grpc/stub/ServerCallsTest.java

Lines changed: 0 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
import io.grpc.ServerServiceDefinition;
3434
import io.grpc.ServiceDescriptor;
3535
import io.grpc.Status;
36-
import io.grpc.Status.Code;
3736
import io.grpc.StatusRuntimeException;
3837
import io.grpc.inprocess.InProcessChannelBuilder;
3938
import io.grpc.inprocess.InProcessServerBuilder;
@@ -621,59 +620,6 @@ public void onClose(Status status, Metadata trailers) {
621620
assertArrayEquals(new int[]{0, 1, 1, 2, 2, 2}, receivedMessages);
622621
}
623622

624-
@Test
625-
public void serverUnaryResponseMsgWithOkStatus() {
626-
ServerCallHandler<Integer, Integer> serverCallHandler =
627-
ServerCalls.asyncUnaryCall(
628-
new ServerCalls.UnaryMethod<Integer, Integer>() {
629-
@Override
630-
public void invoke(Integer request, StreamObserver<Integer> responseObserver) {
631-
responseObserver.onNext(request);
632-
responseObserver.onCompleted();
633-
}
634-
});
635-
ServerCall.Listener<Integer> callListener =
636-
serverCallHandler.startCall(serverCall, new Metadata());
637-
serverCall.isReady = true;
638-
serverCall.isCancelled = false;
639-
callListener.onReady();
640-
callListener.onMessage(1);
641-
callListener.onHalfClose();
642-
643-
assertThat(serverCall.status.getCode()).isEqualTo(Code.OK);
644-
assertThat(serverCall.responses).containsExactly(1);
645-
}
646-
647-
@Test
648-
public void serverUnaryResponseMsgWithNotOkStatus() {
649-
ServerCallHandler<Integer, Integer> serverCallHandler =
650-
ServerCalls.asyncUnaryCall(
651-
new ServerCalls.UnaryMethod<Integer, Integer>() {
652-
@Override
653-
public void invoke(Integer request, StreamObserver<Integer> responseObserver) {
654-
responseObserver.onNext(request);
655-
responseObserver.onError(
656-
Status.INTERNAL
657-
.withDescription("Response message is null for unary call")
658-
.asRuntimeException());
659-
}
660-
});
661-
662-
ServerCall.Listener<Integer> callListener =
663-
serverCallHandler.startCall(serverCall, new Metadata());
664-
665-
serverCall.isReady = true;
666-
serverCall.isCancelled = false;
667-
callListener.onReady();
668-
callListener.onMessage(1);
669-
callListener.onHalfClose();
670-
671-
assertThat(serverCall.status.getCode()).isEqualTo(Code.INTERNAL);
672-
assertThat(serverCall.status.getDescription())
673-
.isEqualTo("Response message is null for unary call");
674-
assertThat(serverCall.responses).isEmpty();
675-
}
676-
677623
public static class IntegerMarshaller implements MethodDescriptor.Marshaller<Integer> {
678624
@Override
679625
public InputStream stream(Integer value) {

0 commit comments

Comments
 (0)