diff options
author | Håkon Hallingstad <hakon@verizonmedia.com> | 2020-03-06 16:09:13 +0100 |
---|---|---|
committer | Håkon Hallingstad <hakon@verizonmedia.com> | 2020-03-06 16:09:13 +0100 |
commit | b1cdda08cb9f3979076f9012fa26128a66f375c7 (patch) | |
tree | 015cdbb1aa99c5ab40878b769351a2ea238e0da4 /configserver | |
parent | 6f582fd7501818a9828b368023b1067f71483ef4 (diff) |
Reuse existing super model completion notification
Diffstat (limited to 'configserver')
3 files changed, 10 insertions, 42 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/ConfigServerBootstrap.java b/configserver/src/main/java/com/yahoo/vespa/config/server/ConfigServerBootstrap.java index 4e1006213c6..439408fc01c 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/ConfigServerBootstrap.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/ConfigServerBootstrap.java @@ -212,9 +212,6 @@ public class ConfigServerBootstrap extends AbstractComponent implements Runnable private boolean redeployAllApplications() throws InterruptedException { Instant end = Instant.now().plus(maxDurationOfRedeployment); Set<ApplicationId> applicationsNotRedeployed = applicationRepository.listApplications(); - if (superModelManager != null) { - superModelManager.setBootstrapApplicationSet(applicationsNotRedeployed); - } do { applicationsNotRedeployed = redeployApplications(applicationsNotRedeployed); if ( ! applicationsNotRedeployed.isEmpty()) { diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelManager.java b/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelManager.java index b3b86380fa3..d46c551fa7e 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelManager.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelManager.java @@ -102,19 +102,12 @@ public class SuperModelManager implements SuperModelProvider { .getForVersionOrLatest(Optional.empty(), Instant.now()) .toApplicationInfo(); - SuperModel oldSuperModel = superModelConfigProvider.getSuperModel(); - SuperModel newSuperModel = oldSuperModel - .cloneAndSetApplication(applicationInfo, isComplete(oldSuperModel)); + SuperModel newSuperModel = superModelConfigProvider.getSuperModel() + .cloneAndSetApplication(applicationInfo); generationCounter.increment(); makeNewSuperModelConfigProvider(newSuperModel); listeners.forEach(listener -> listener.applicationActivated(newSuperModel, applicationInfo)); - - if (!oldSuperModel.isComplete() && newSuperModel.isComplete()) { - for (var listener : listeners) { - listener.notifyOfCompleteness(newSuperModel); - } - } } } @@ -131,37 +124,13 @@ public class SuperModelManager implements SuperModelProvider { } } - public void setBootstrapApplicationSet(Set<ApplicationId> bootstrapApplicationSet) { - logger.log(LogLevel.INFO, "Bootstrap applications: " + bootstrapApplicationSet); - - synchronized (monitor) { - // Make HashSet to be able to remove applications from it. - this.bootstrapApplicationSet = Optional.of(new HashSet<>(bootstrapApplicationSet)); - - SuperModel superModel = superModelConfigProvider.getSuperModel(); - if (!superModel.isComplete() && isComplete(superModel)) { - // We do NOT increment the generation since completeness is not part of the config: - // generationCounter.increment() - - SuperModel newSuperModel = superModel.cloneAsComplete(); - makeNewSuperModelConfigProvider(newSuperModel); - listeners.forEach(listener -> listener.notifyOfCompleteness(newSuperModel)); - } - } - } - - /** Returns freshly calculated value of isComplete. */ - private boolean isComplete(SuperModel superModel) { - if (superModel.isComplete()) return true; - if (bootstrapApplicationSet.isEmpty()) return false; - - Set<ApplicationId> currentApplicationIds = superModel.getApplicationIds(); - if (currentApplicationIds.size() < bootstrapApplicationSet.get().size()) return false; - if (!currentApplicationIds.containsAll(bootstrapApplicationSet.get())) return false; - - // We only arrive here when transitioning from incomplete to complete. + public void markAsComplete() { + // Invoked on component graph bootstrap (even before ConfigServerBootstrap), + // there is no need to bump generation counter. logger.log(LogLevel.INFO, "Super model is complete"); - return true; + SuperModel newSuperModel = getSuperModel().cloneAsComplete(); + superModelConfigProvider = new SuperModelConfigProvider(newSuperModel, zone, flagSource); + listeners.forEach(listener -> listener.notifyOfCompleteness(newSuperModel)); } private void makeNewSuperModelConfigProvider(SuperModel newSuperModel) { diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelRequestHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelRequestHandler.java index 520972f2fcf..51c5be1b1f0 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelRequestHandler.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelRequestHandler.java @@ -125,5 +125,7 @@ public class SuperModelRequestHandler implements RequestHandler { public void enable() { enabled = true; + superModelManager.markAsComplete(); + updateHandler(); } } |