Skip to content

Commit 7abb485

Browse files
committed
Update @SInCE tag to 1.84.0 and add tracer cancellation in FailingClientStream
1 parent 9d14356 commit 7abb485

4 files changed

Lines changed: 37 additions & 1 deletion

File tree

api/src/main/java/io/grpc/ClientStreamTracer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public void addOptionalLabel(String key, String value) {
103103
* The stream was cancelled from the client side before a normal response was received.
104104
*
105105
* @param status the cancellation status
106-
* @since 1.70.0
106+
* @since 1.84.0
107107
*/
108108
public void cancelled(Status status) {
109109
}

core/src/main/java/io/grpc/internal/FailingClientStream.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,13 @@ public void start(ClientStreamListener listener) {
6161
listener.closed(error, rpcProgress, new Metadata());
6262
}
6363

64+
@Override
65+
public void cancel(Status reason) {
66+
for (ClientStreamTracer tracer : tracers) {
67+
tracer.cancelled(reason);
68+
}
69+
}
70+
6471
@VisibleForTesting
6572
Status getError() {
6673
return error;

core/src/test/java/io/grpc/internal/AbstractClientStreamTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939

4040
import io.grpc.Attributes;
4141
import io.grpc.CallOptions;
42+
import io.grpc.ClientStreamTracer;
4243
import io.grpc.Codec;
4344
import io.grpc.Deadline;
4445
import io.grpc.Grpc;
@@ -155,6 +156,24 @@ public void cancel(Status errorStatus) {
155156
verify(mockListener).closed(any(Status.class), same(PROCESSED), any(Metadata.class));
156157
}
157158

159+
@Test
160+
public void cancel_notifiesStatsTraceContext() {
161+
ClientStreamTracer mockTracer = mock(ClientStreamTracer.class);
162+
StatsTraceContext customStatsTraceCtx = new StatsTraceContext(new StreamTracer[] {mockTracer});
163+
final BaseTransportState state = new BaseTransportState(customStatsTraceCtx, transportTracer);
164+
AbstractClientStream stream = new BaseAbstractClientStream(allocator, state, new BaseSink() {
165+
@Override
166+
public void cancel(Status errorStatus) {
167+
}
168+
}, customStatsTraceCtx, transportTracer);
169+
stream.start(mockListener);
170+
171+
Status cancelStatus = Status.CANCELLED.withDescription("Cancelled by test");
172+
stream.cancel(cancelStatus);
173+
174+
verify(mockTracer).cancelled(cancelStatus);
175+
}
176+
158177
@Test
159178
public void startFailsOnNullListener() {
160179
AbstractClientStream stream =

core/src/test/java/io/grpc/internal/FailingClientStreamTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,14 @@ public void droppedRpcProgressPopulatedToListener() {
5757
stream.start(listener);
5858
verify(listener).closed(eq(status), eq(RpcProgress.DROPPED), any(Metadata.class));
5959
}
60+
61+
@Test
62+
public void cancel_notifiesTracers() {
63+
ClientStreamTracer mockTracer = mock(ClientStreamTracer.class);
64+
ClientStream stream = new FailingClientStream(
65+
Status.UNAVAILABLE, RpcProgress.PROCESSED, new ClientStreamTracer[] {mockTracer});
66+
Status cancelStatus = Status.CANCELLED.withDescription("Cancelled by test");
67+
stream.cancel(cancelStatus);
68+
verify(mockTracer).cancelled(cancelStatus);
69+
}
6070
}

0 commit comments

Comments
 (0)