diff options
author | Harald Musum <musum@oath.com> | 2019-01-14 14:00:37 +0100 |
---|---|---|
committer | Harald Musum <musum@oath.com> | 2019-01-14 14:00:37 +0100 |
commit | a32fdcffe9dee280bb4f3d1535e5d24b0d65d82a (patch) | |
tree | 596f63b8642229b606ca583fc4d097e25806c597 /config-proxy/src/main | |
parent | b0587989a0f6b5a07b09fe4b03036fdd0231b2cf (diff) |
Add guard to avoid sending config with older generation than current to subscribers
Diffstat (limited to 'config-proxy/src/main')
-rw-r--r-- | config-proxy/src/main/java/com/yahoo/vespa/config/proxy/ClientUpdater.java | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/ClientUpdater.java b/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/ClientUpdater.java index 8b8f75a3f99..f20b45cbe45 100644 --- a/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/ClientUpdater.java +++ b/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/ClientUpdater.java @@ -31,18 +31,12 @@ class ClientUpdater { /** * This method will be called when a response with changed config is received from upstream * (content or generation has changed) or the server timeout has elapsed. - * Updates the cache with the returned config. Will only be called when in default mode * * @param config new config */ void updateSubscribers(RawConfig config) { log.log(LogLevel.DEBUG, () -> "Config updated for " + config.getKey() + "," + config.getGeneration()); - sendResponse(config); - } - - private void sendResponse(RawConfig config) { if (config.isError()) { statistics.incErrorCount(); } - log.log(LogLevel.DEBUG, () -> "Sending response for " + config.getKey() + "," + config.getGeneration()); DelayQueue<DelayedResponse> responseDelayQueue = delayedResponses.responses(); log.log(LogLevel.SPAM, () -> "Delayed response queue: " + responseDelayQueue); if (responseDelayQueue.size() == 0) { @@ -51,11 +45,11 @@ class ClientUpdater { } else { log.log(LogLevel.DEBUG, () -> "Delayed response queue has " + responseDelayQueue.size() + " elements"); } - DelayedResponse[] responses = responseDelayQueue.toArray(new DelayedResponse[0]); boolean found = false; - for (DelayedResponse response : responses) { + for (DelayedResponse response : responseDelayQueue.toArray(new DelayedResponse[0])) { JRTServerConfigRequest request = response.getRequest(); - if (request.getConfigKey().equals(config.getKey())) { + if (request.getConfigKey().equals(config.getKey()) + && (config.getGeneration() >= request.getRequestGeneration())) { if (delayedResponses.remove(response)) { found = true; log.log(LogLevel.DEBUG, () -> "Call returnOkResponse for " + config.getKey() + "," + config.getGeneration()); |