diff --git a/xds/src/main/java/io/grpc/xds/XdsLoadStatsStore.java b/xds/src/main/java/io/grpc/xds/XdsLoadStatsStore.java index 77f1607737..cf3f3b7f12 100644 --- a/xds/src/main/java/io/grpc/xds/XdsLoadStatsStore.java +++ b/xds/src/main/java/io/grpc/xds/XdsLoadStatsStore.java @@ -92,11 +92,15 @@ final class XdsLoadStatsStore implements StatsStore { localityLoadCounters.remove(entry.getKey()); } } + long totalDrops = 0; for (Map.Entry entry : dropCounters.entrySet()) { + long drops = entry.getValue().getAndSet(0); + totalDrops += drops; statsBuilder.addDroppedRequests(DroppedRequests.newBuilder() .setCategory(entry.getKey()) - .setDroppedCount(entry.getValue().getAndSet(0))); + .setDroppedCount(drops)); } + statsBuilder.setTotalDroppedRequests(totalDrops); return statsBuilder.build(); } diff --git a/xds/src/test/java/io/grpc/xds/XdsLoadReportClientImplTest.java b/xds/src/test/java/io/grpc/xds/XdsLoadReportClientImplTest.java index 83d13b417f..b2bad3f90c 100644 --- a/xds/src/test/java/io/grpc/xds/XdsLoadReportClientImplTest.java +++ b/xds/src/test/java/io/grpc/xds/XdsLoadReportClientImplTest.java @@ -374,6 +374,7 @@ public class XdsLoadReportClientImplTest { .addDroppedRequests(DroppedRequests.newBuilder() .setCategory("throttle") .setDroppedCount(numThrottleDrops)) + .setTotalDroppedRequests(numLbDrops + numThrottleDrops) .build(); ClusterStats expectedStats2 = ClusterStats.newBuilder() .setClusterName(SERVICE_AUTHORITY) @@ -387,6 +388,7 @@ public class XdsLoadReportClientImplTest { .addDroppedRequests(DroppedRequests.newBuilder() .setCategory("throttle") .setDroppedCount(0)) + .setTotalDroppedRequests(0) .build(); when(statsStore.generateLoadReport()) .thenReturn(expectedStats1, expectedStats2); diff --git a/xds/src/test/java/io/grpc/xds/XdsLoadStatsStoreTest.java b/xds/src/test/java/io/grpc/xds/XdsLoadStatsStoreTest.java index 54792239e7..276c255df0 100644 --- a/xds/src/test/java/io/grpc/xds/XdsLoadStatsStoreTest.java +++ b/xds/src/test/java/io/grpc/xds/XdsLoadStatsStoreTest.java @@ -135,6 +135,7 @@ public class XdsLoadStatsStoreTest { private static void assertClusterStatsEqual(ClusterStats expected, ClusterStats actual) { assertThat(actual.getClusterName()).isEqualTo(expected.getClusterName()); assertThat(actual.getLoadReportInterval()).isEqualTo(expected.getLoadReportInterval()); + assertThat(actual.getTotalDroppedRequests()).isEqualTo(expected.getTotalDroppedRequests()); assertThat(actual.getDroppedRequestsCount()).isEqualTo(expected.getDroppedRequestsCount()); assertThat(new HashSet<>(actual.getDroppedRequestsList())) .isEqualTo(new HashSet<>(expected.getDroppedRequestsList()));