Skip to content

Commit 339fc4c

Browse files
committed
xds: makes getAuthority() static
1 parent 9ed94ac commit 339fc4c

4 files changed

Lines changed: 37 additions & 77 deletions

File tree

xds/src/main/java/io/grpc/xds/XdsClientMetricReporterImpl.java

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,13 @@
3434
import java.util.Arrays;
3535
import java.util.Collections;
3636
import java.util.HashMap;
37-
import java.util.List;
3837
import java.util.Map;
3938
import java.util.concurrent.ExecutionException;
4039
import java.util.concurrent.Future;
4140
import java.util.concurrent.TimeUnit;
4241
import java.util.concurrent.TimeoutException;
4342
import java.util.logging.Level;
4443
import java.util.logging.Logger;
45-
import java.util.stream.Collectors;
4644
import javax.annotation.Nullable;
4745

4846
/**
@@ -145,15 +143,7 @@ void reportCallbackMetrics(BatchRecorder recorder, XdsClient xdsClient) {
145143
Map<XdsResourceType<?>, Map<String, ResourceMetadata>> metadataByType =
146144
getResourceMetadataCompleted.get(10, TimeUnit.SECONDS);
147145

148-
List<String> resourceNames = metadataByType.values()
149-
.stream()
150-
.flatMap(innerMap -> innerMap.keySet().stream())
151-
.collect(Collectors.toList());
152-
153-
Map<String, String> resourceNameToAuthority =
154-
xdsClient.getResourceNameToAuthorityMap(resourceNames);
155-
156-
computeAndReportResourceCounts(metadataByType, resourceNameToAuthority, callback);
146+
computeAndReportResourceCounts(metadataByType, callback);
157147

158148
// Normally this shouldn't take long, but adding a timeout to avoid indefinite blocking
159149
Void unused = reportServerConnectionsCompleted.get(5, TimeUnit.SECONDS);
@@ -167,7 +157,6 @@ void reportCallbackMetrics(BatchRecorder recorder, XdsClient xdsClient) {
167157

168158
private void computeAndReportResourceCounts(
169159
Map<XdsResourceType<?>, Map<String, ResourceMetadata>> metadataByType,
170-
Map<String, String> resourceNameToAuthority,
171160
MetricReporterCallback callback) {
172161
for (Map.Entry<XdsResourceType<?>, Map<String, ResourceMetadata>> metadataByTypeEntry :
173162
metadataByType.entrySet()) {
@@ -178,7 +167,7 @@ private void computeAndReportResourceCounts(
178167
for (Map.Entry<String, ResourceMetadata> resourceEntry : resources.entrySet()) {
179168
String resourceName = resourceEntry.getKey();
180169
ResourceMetadata metadata = resourceEntry.getValue();
181-
String authority = resourceNameToAuthority.getOrDefault(resourceName, "");
170+
String authority = XdsClient.getAuthorityFromResourceName(resourceName);
182171
String cacheState = cacheStateFromResourceStatus(metadata.getStatus(), metadata.isCached());
183172
resourceCountsByAuthorityAndState
184173
.computeIfAbsent(authority, k -> new HashMap<>())
@@ -230,7 +219,7 @@ static final class MetricReporterCallback implements ServerConnectionCallback {
230219
void reportResourceCountGauge(String authority, long resourceCount, String cacheState,
231220
String resourceType) {
232221
recorder.recordLongGauge(RESOURCES_GAUGE, resourceCount,
233-
Arrays.asList(target, authority == null || authority.isEmpty() ? "#old" : authority,
222+
Arrays.asList(target, authority == null ? "#old" : authority,
234223
cacheState, resourceType), Collections.emptyList());
235224
}
236225

xds/src/main/java/io/grpc/xds/client/XdsClient.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -379,10 +379,20 @@ public Map<Bootstrapper.ServerInfo, LoadReportClient> getServerLrsClientMap() {
379379
}
380380

381381
/**
382-
* Returns a map of resource names to the authority.
382+
* Returns the authority from the resource name.
383383
*/
384-
public Map<String, String> getResourceNameToAuthorityMap(List<String> resourceNames) {
385-
throw new UnsupportedOperationException();
384+
public static String getAuthorityFromResourceName(String resourceNames) {
385+
String authority;
386+
if (resourceNames.startsWith(XDSTP_SCHEME)) {
387+
URI uri = URI.create(resourceNames);
388+
authority = uri.getAuthority();
389+
if (authority == null) {
390+
authority = "";
391+
}
392+
} else {
393+
authority = null;
394+
}
395+
return authority;
386396
}
387397

388398
/** Callback used to report a gauge metric value for server connections. */

xds/src/main/java/io/grpc/xds/client/XdsClientImpl.java

Lines changed: 1 addition & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
import static com.google.common.base.Preconditions.checkArgument;
2020
import static com.google.common.base.Preconditions.checkNotNull;
21-
import static io.grpc.xds.client.Bootstrapper.XDSTP_SCHEME;
2221
import static io.grpc.xds.client.XdsResourceType.ParsedResource;
2322
import static io.grpc.xds.client.XdsResourceType.ValidatedResourceUpdate;
2423

@@ -43,7 +42,6 @@
4342
import io.grpc.xds.client.XdsClient.ResourceStore;
4443
import io.grpc.xds.client.XdsLogger.XdsLogLevel;
4544
import java.io.IOException;
46-
import java.net.URI;
4745
import java.util.ArrayList;
4846
import java.util.Collection;
4947
import java.util.Collections;
@@ -57,7 +55,6 @@
5755
import java.util.concurrent.Future;
5856
import java.util.concurrent.ScheduledExecutorService;
5957
import java.util.concurrent.TimeUnit;
60-
import java.util.function.Function;
6158
import java.util.stream.Collectors;
6259
import javax.annotation.Nullable;
6360

@@ -531,32 +528,6 @@ public Map<ServerInfo, LoadReportClient> getServerLrsClientMap() {
531528
return ImmutableMap.copyOf(serverLrsClientMap);
532529
}
533530

534-
private String getAuthority(String resource) {
535-
String authority;
536-
if (resource.startsWith(XDSTP_SCHEME)) {
537-
URI uri = URI.create(resource);
538-
authority = uri.getAuthority();
539-
if (authority == null) {
540-
authority = "";
541-
}
542-
} else {
543-
authority = null;
544-
}
545-
546-
return authority;
547-
}
548-
549-
@Override
550-
public Map<String, String> getResourceNameToAuthorityMap(List<String> resourceNames) {
551-
if (resourceNames == null || resourceNames.isEmpty()) {
552-
return Collections.emptyMap();
553-
}
554-
return resourceNames.stream()
555-
.collect(Collectors.toMap(
556-
Function.identity(),
557-
this::getAuthority));
558-
}
559-
560531
@Nullable
561532
private ImmutableList<ServerInfo> getServerInfos(String authority) {
562533
if (authority != null) {
@@ -710,7 +681,7 @@ private final class ResourceSubscriber<T extends ResourceUpdate> {
710681
syncContext.throwIfNotInThisSynchronizationContext();
711682
this.type = type;
712683
this.resource = resource;
713-
this.authority = getAuthority(resource);
684+
this.authority = getAuthorityFromResourceName(resource);
714685
if (getServerInfos(authority) == null) {
715686
this.errorDescription = "Wrong configuration: xds server does not exist for resource "
716687
+ resource;

xds/src/test/java/io/grpc/xds/XdsClientMetricReporterImplTest.java

Lines changed: 20 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import static com.google.common.truth.Truth.assertThat;
2020
import static org.mockito.AdditionalAnswers.delegatesTo;
2121
import static org.mockito.ArgumentMatchers.any;
22-
import static org.mockito.ArgumentMatchers.anyList;
2322
import static org.mockito.ArgumentMatchers.argThat;
2423
import static org.mockito.ArgumentMatchers.eq;
2524
import static org.mockito.Mockito.inOrder;
@@ -233,43 +232,36 @@ public void metricReporterCallback() {
233232
@Test
234233
public void reportCallbackMetrics_computeAndReportResourceCounts() {
235234
Map<XdsResourceType<?>, Map<String, ResourceMetadata>> metadataByType = new HashMap<>();
236-
Map<String, String> resourceNameByAuthority = new HashMap<>();
237235
XdsResourceType<?> listenerResource = XdsListenerResource.getInstance();
238236
XdsResourceType<?> routeConfigResource = XdsRouteConfigureResource.getInstance();
239237
XdsResourceType<?> clusterResource = XdsClusterResource.getInstance();
240238

241239
Any rawListener =
242-
Any.pack(Listener.newBuilder().setName("listener.googleapis.com").build());
240+
Any.pack(Listener.newBuilder().setName("listener.googleapis.com").build());
243241
long nanosLastUpdate = 1577923199_606042047L;
244242

245243
Map<String, ResourceMetadata> ldsResourceMetadataMap = new HashMap<>();
246-
ldsResourceMetadataMap.put("resource1",
247-
ResourceMetadata.newResourceMetadataRequested());
248-
resourceNameByAuthority.put("resource1", "authority1");
244+
ldsResourceMetadataMap.put("xdstp://authority1",
245+
ResourceMetadata.newResourceMetadataRequested());
249246
ResourceMetadata ackedLdsResource = ResourceMetadata.newResourceMetadataAcked(rawListener, "42",
250-
nanosLastUpdate);
247+
nanosLastUpdate);
251248
ldsResourceMetadataMap.put("resource2", ackedLdsResource);
252-
resourceNameByAuthority.put("resource2", "authority2");
253249
ldsResourceMetadataMap.put("resource3",
254-
ResourceMetadata.newResourceMetadataAcked(rawListener, "43", nanosLastUpdate));
255-
resourceNameByAuthority.put("resource3", "authority2");
256-
ldsResourceMetadataMap.put("resource4",
257-
ResourceMetadata.newResourceMetadataNacked(ackedLdsResource, "44", nanosLastUpdate,
258-
"nacked after previous ack", true));
259-
resourceNameByAuthority.put("resource4", "authority4");
250+
ResourceMetadata.newResourceMetadataAcked(rawListener, "43", nanosLastUpdate));
251+
ldsResourceMetadataMap.put("xdstp:/need_this",
252+
ResourceMetadata.newResourceMetadataNacked(ackedLdsResource, "44", nanosLastUpdate,
253+
"nacked after previous ack", true));
260254

261255
Map<String, ResourceMetadata> rdsResourceMetadataMap = new HashMap<>();
262256
ResourceMetadata requestedRdsResourceMetadata = ResourceMetadata.newResourceMetadataRequested();
263-
rdsResourceMetadataMap.put("resource5",
264-
ResourceMetadata.newResourceMetadataNacked(requestedRdsResourceMetadata, "24",
265-
nanosLastUpdate, "nacked after request", false));
266-
resourceNameByAuthority.put("resource5", "authority5");
267-
rdsResourceMetadataMap.put("resource6",
268-
ResourceMetadata.newResourceMetadataDoesNotExist());
269-
resourceNameByAuthority.put("resource6", "authority6");
257+
rdsResourceMetadataMap.put("xdstp://authority5",
258+
ResourceMetadata.newResourceMetadataNacked(requestedRdsResourceMetadata, "24",
259+
nanosLastUpdate, "nacked after request", false));
260+
rdsResourceMetadataMap.put("xdstp://authority6",
261+
ResourceMetadata.newResourceMetadataDoesNotExist());
270262

271263
Map<String, ResourceMetadata> cdsResourceMetadataMap = new HashMap<>();
272-
cdsResourceMetadataMap.put("resource7", ResourceMetadata.newResourceMetadataUnknown());
264+
cdsResourceMetadataMap.put("xdstp://authority7", ResourceMetadata.newResourceMetadataUnknown());
273265

274266
metadataByType.put(listenerResource, ldsResourceMetadataMap);
275267
metadataByType.put(routeConfigResource, rdsResourceMetadataMap);
@@ -278,15 +270,13 @@ public void reportCallbackMetrics_computeAndReportResourceCounts() {
278270
SettableFuture<Void> reportServerConnectionsCompleted = SettableFuture.create();
279271
reportServerConnectionsCompleted.set(null);
280272
when(mockXdsClient.reportServerConnections(any(MetricReporterCallback.class)))
281-
.thenReturn(reportServerConnectionsCompleted);
273+
.thenReturn(reportServerConnectionsCompleted);
282274

283275
ListenableFuture<Map<XdsResourceType<?>, Map<String, ResourceMetadata>>>
284-
getResourceMetadataCompleted = Futures.immediateFuture(metadataByType);
276+
getResourceMetadataCompleted = Futures.immediateFuture(metadataByType);
285277
when(mockXdsClient.getSubscribedResourcesMetadataSnapshot())
286-
.thenReturn(getResourceMetadataCompleted);
278+
.thenReturn(getResourceMetadataCompleted);
287279

288-
when(mockXdsClient.getResourceNameToAuthorityMap(anyList()))
289-
.thenReturn(resourceNameByAuthority);
290280

291281
reporter.reportCallbackMetrics(mockBatchRecorder, mockXdsClient);
292282

@@ -296,11 +286,11 @@ public void reportCallbackMetrics_computeAndReportResourceCounts() {
296286
"requested", listenerResource.typeUrl())), any());
297287
// LDS resources acked
298288
verify(mockBatchRecorder).recordLongGauge(eqMetricInstrumentName("grpc.xds_client.resources"),
299-
eq(2L), eq(Arrays.asList(target, "authority2",
289+
eq(2L), eq(Arrays.asList(target, "#old",
300290
"acked", listenerResource.typeUrl())), any());
301291
// LDS resource nacked but cached
302292
verify(mockBatchRecorder).recordLongGauge(eqMetricInstrumentName("grpc.xds_client.resources"),
303-
eq(1L), eq(Arrays.asList(target, "authority4",
293+
eq(1L), eq(Arrays.asList(target, "",
304294
"nacked_but_cached", listenerResource.typeUrl())), any());
305295

306296
// RDS resource nacked
@@ -314,7 +304,7 @@ public void reportCallbackMetrics_computeAndReportResourceCounts() {
314304

315305
// CDS resource unknown
316306
verify(mockBatchRecorder).recordLongGauge(eqMetricInstrumentName("grpc.xds_client.resources"),
317-
eq(1L), eq(Arrays.asList(target, "#old",
307+
eq(1L), eq(Arrays.asList(target, "authority7",
318308
"unknown", clusterResource.typeUrl())), any());
319309
verifyNoMoreInteractions(mockBatchRecorder);
320310
}

0 commit comments

Comments
 (0)