aboutsummaryrefslogtreecommitdiffstats
path: root/config-proxy/src/main
diff options
context:
space:
mode:
authorHarald Musum <musum@oath.com>2019-01-14 14:00:37 +0100
committerHarald Musum <musum@oath.com>2019-01-14 14:00:37 +0100
commita32fdcffe9dee280bb4f3d1535e5d24b0d65d82a (patch)
tree596f63b8642229b606ca583fc4d097e25806c597 /config-proxy/src/main
parentb0587989a0f6b5a07b09fe4b03036fdd0231b2cf (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.java12
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());