Skip to content

Commit e26d039

Browse files
voidzcysergiitk
authored andcommitted
interop-testing: aggregate accumulated stats by RPC methods in xDS test client (grpc#7603)
Update xDS interop test proto to aggregate accumulated stats based on RPC methods (mirroring 643e5bcd1e8db931cf76a3be19cd9bba223ee987 in C-core's change). Updated the xDS interop test client to support querying accumulated stats aggregated to RPC methods.
1 parent c65531c commit e26d039

File tree

2 files changed

+41
-20
lines changed

2 files changed

+41
-20
lines changed

interop-testing/src/main/java/io/grpc/testing/integration/XdsTestClient.java

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@
6161
import java.util.concurrent.ExecutionException;
6262
import java.util.concurrent.Executors;
6363
import java.util.concurrent.TimeUnit;
64-
import java.util.concurrent.atomic.AtomicInteger;
6564
import java.util.concurrent.atomic.AtomicReference;
6665
import java.util.logging.Level;
6766
import java.util.logging.Logger;
@@ -74,9 +73,9 @@ public final class XdsTestClient {
7473
private final Set<XdsStatsWatcher> watchers = new HashSet<>();
7574
private final Object lock = new Object();
7675
private final List<ManagedChannel> channels = new ArrayList<>();
77-
private final AtomicInteger rpcsStarted = new AtomicInteger();
78-
private final AtomicInteger rpcsFailed = new AtomicInteger();
79-
private final AtomicInteger rpcsSucceeded = new AtomicInteger();
76+
private final Map<String, Integer> rpcsStartedByMethod = new HashMap<>();
77+
private final Map<String, Integer> rpcsFailedByMethod = new HashMap<>();
78+
private final Map<String, Integer> rpcsSucceededByMethod = new HashMap<>();
8079

8180
private int numChannels = 1;
8281
private boolean printResponse = false;
@@ -345,7 +344,6 @@ public void onError(Throwable t) {
345344
@Override
346345
public void onNext(EmptyProtos.Empty response) {}
347346
});
348-
rpcsStarted.getAndIncrement();
349347
} else if (rpcType == RpcType.UNARY_CALL) {
350348
SimpleRequest request = SimpleRequest.newBuilder().setFillServerId(true).build();
351349
stub.unaryCall(
@@ -385,19 +383,39 @@ public void onNext(SimpleResponse response) {
385383
}
386384
}
387385
});
388-
rpcsStarted.getAndIncrement();
386+
} else {
387+
throw new AssertionError("Unknown RPC type: " + rpcType);
388+
}
389+
synchronized (lock) {
390+
Integer startedBase = rpcsStartedByMethod.get(rpcType.name());
391+
if (startedBase == null) {
392+
startedBase = 0;
393+
}
394+
rpcsStartedByMethod.put(rpcType.name(), startedBase + 1);
389395
}
390396
}
391397

392398
private void handleRpcCompleted(long requestId, RpcType rpcType, String hostname,
393399
Set<XdsStatsWatcher> watchers) {
394-
rpcsSucceeded.getAndIncrement();
400+
synchronized (lock) {
401+
Integer succeededBase = rpcsSucceededByMethod.get(rpcType.name());
402+
if (succeededBase == null) {
403+
succeededBase = 0;
404+
}
405+
rpcsSucceededByMethod.put(rpcType.name(), succeededBase + 1);
406+
}
395407
notifyWatchers(watchers, rpcType, requestId, hostname);
396408
}
397409

398410
private void handleRpcError(long requestId, RpcType rpcType, String hostname,
399411
Set<XdsStatsWatcher> watchers) {
400-
rpcsFailed.getAndIncrement();
412+
synchronized (lock) {
413+
Integer failedBase = rpcsFailedByMethod.get(rpcType.name());
414+
if (failedBase == null) {
415+
failedBase = 0;
416+
}
417+
rpcsFailedByMethod.put(rpcType.name(), failedBase + 1);
418+
}
401419
notifyWatchers(watchers, rpcType, requestId, hostname);
402420
}
403421
}
@@ -469,12 +487,15 @@ public void getClientStats(
469487
@Override
470488
public void getClientAccumulatedStats(LoadBalancerAccumulatedStatsRequest request,
471489
StreamObserver<LoadBalancerAccumulatedStatsResponse> responseObserver) {
472-
responseObserver.onNext(
473-
LoadBalancerAccumulatedStatsResponse.newBuilder()
474-
.setNumRpcsStarted(rpcsStarted.get())
475-
.setNumRpcsSucceeded(rpcsSucceeded.get())
476-
.setNumRpcsFailed(rpcsFailed.get())
477-
.build());
490+
LoadBalancerAccumulatedStatsResponse.Builder responseBuilder =
491+
LoadBalancerAccumulatedStatsResponse.newBuilder();
492+
synchronized (lock) {
493+
responseBuilder
494+
.putAllNumRpcsStartedByMethod(rpcsStartedByMethod)
495+
.putAllNumRpcsSucceededByMethod(rpcsSucceededByMethod)
496+
.putAllNumRpcsFailedByMethod(rpcsFailedByMethod);
497+
}
498+
responseObserver.onNext(responseBuilder.build());
478499
responseObserver.onCompleted();
479500
}
480501
}

interop-testing/src/main/proto/grpc/testing/messages.proto

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -208,12 +208,12 @@ message LoadBalancerAccumulatedStatsRequest {}
208208

209209
// Accumulated stats for RPCs sent by a test client.
210210
message LoadBalancerAccumulatedStatsResponse {
211-
// The total number of RPCs have ever issued.
212-
int32 num_rpcs_started = 1;
213-
// The total number of RPCs have ever completed successfully.
214-
int32 num_rpcs_succeeded = 2;
215-
// The total number of RPCs have ever failed.
216-
int32 num_rpcs_failed = 3;
211+
// The total number of RPCs have ever issued for each type.
212+
map<string, int32> num_rpcs_started_by_method = 1;
213+
// The total number of RPCs have ever completed successfully for each type.
214+
map<string, int32> num_rpcs_succeeded_by_method = 2;
215+
// The total number of RPCs have ever failed for each type.
216+
map<string, int32> num_rpcs_failed_by_method = 3;
217217
}
218218

219219
// Configurations for a test client.

0 commit comments

Comments
 (0)