xds: Remember nonces for unknown types · grpc/grpc-java@6c12c2b
@@ -309,7 +309,7 @@ private class AdsStream implements XdsTransportFactory.EventHandler<DiscoveryRes
309309private boolean responseReceived;
310310private boolean sentInitialRequest;
311311private boolean closed;
312-// Response nonce for the most recently received discovery responses of each resource type.
312+// Response nonce for the most recently received discovery responses of each resource type URL.
313313// Client initiated requests start response nonce with empty string.
314314// Nonce in each response is echoed back in the following ACK/NACK request. It is
315315// used for management server to identify which response the client is ACKing/NACking.
@@ -318,7 +318,7 @@ private class AdsStream implements XdsTransportFactory.EventHandler<DiscoveryRes
318318// map; nonces are only discarded once the stream closes because xds_protocol says "the
319319// management server should not send a DiscoveryResponse for any DiscoveryRequest that has a
320320// stale nonce."
321-private final Map<XdsResourceType<?>, String> respNonces = new HashMap<>();
321+private final Map<String, String> respNonces = new HashMap<>();
322322private final StreamingCall<DiscoveryRequest, DiscoveryResponse> call;
323323private final MethodDescriptor<DiscoveryRequest, DiscoveryResponse> methodDescriptor =
324324AggregatedDiscoveryServiceGrpc.getStreamAggregatedResourcesMethod();
@@ -369,7 +369,7 @@ void sendDiscoveryRequest(XdsResourceType<?> type, String versionInfo,
369369final void sendDiscoveryRequest(XdsResourceType<?> type, Collection<String> resources) {
370370logger.log(XdsLogLevel.INFO, "Sending {0} request for resources: {1}", type, resources);
371371sendDiscoveryRequest(type, versions.getOrDefault(type, ""), resources,
372-respNonces.getOrDefault(type, ""), null);
372+respNonces.getOrDefault(type.typeUrl(), ""), null);
373373 }
374374375375@Override
@@ -400,6 +400,7 @@ public void run() {
400400boolean isFirstResponse = !responseReceived;
401401responseReceived = true;
402402inError = false;
403+respNonces.put(response.getTypeUrl(), response.getNonce());
403404404405XdsResourceType<?> type = fromTypeUrl(response.getTypeUrl());
405406if (logger.isLoggable(XdsLogLevel.DEBUG)) {
@@ -433,7 +434,6 @@ final void handleRpcResponse(XdsResourceType<?> type, String versionInfo, List<A
433434String nonce, boolean isFirstResponse) {
434435checkNotNull(type, "type");
435436436-respNonces.put(type, nonce);
437437ProcessingTracker processingTracker = new ProcessingTracker(
438438 () -> call.startRecvMessage(), syncContext);
439439xdsResponseHandler.handleResourceResponse(type, serverInfo, versionInfo, resources, nonce,