diff options
5 files changed, 12 insertions, 44 deletions
diff --git a/config-model-api/abi-spec.json b/config-model-api/abi-spec.json index 40a62026253..cb979722a77 100644 --- a/config-model-api/abi-spec.json +++ b/config-model-api/abi-spec.json @@ -997,7 +997,7 @@ "public boolean isComplete()", "public java.util.List getAllApplicationInfos()", "public java.util.Optional getApplicationInfo(com.yahoo.config.provision.ApplicationId)", - "public com.yahoo.config.model.api.SuperModel cloneAndSetApplication(com.yahoo.config.model.api.ApplicationInfo, boolean)", + "public com.yahoo.config.model.api.SuperModel cloneAndSetApplication(com.yahoo.config.model.api.ApplicationInfo)", "public com.yahoo.config.model.api.SuperModel cloneAndRemoveApplication(com.yahoo.config.provision.ApplicationId)", "public com.yahoo.config.model.api.SuperModel cloneAsComplete()", "public java.util.Set getApplicationIds()" diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/SuperModel.java b/config-model-api/src/main/java/com/yahoo/config/model/api/SuperModel.java index 15502dac1f1..50f1ea2336d 100644 --- a/config-model-api/src/main/java/com/yahoo/config/model/api/SuperModel.java +++ b/config-model-api/src/main/java/com/yahoo/config/model/api/SuperModel.java @@ -58,7 +58,7 @@ public class SuperModel { return applicationInfo == null ? Optional.empty() : Optional.of(applicationInfo); } - public SuperModel cloneAndSetApplication(ApplicationInfo application, boolean complete) { + public SuperModel cloneAndSetApplication(ApplicationInfo application) { Map<ApplicationId, ApplicationInfo> newModels = cloneModels(models); newModels.put(application.getApplicationId(), application); return new SuperModel(newModels, complete); 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(); } } |