summaryrefslogtreecommitdiffstats
path: root/configserver
diff options
context:
space:
mode:
authorHåkon Hallingstad <hakon@verizonmedia.com>2020-03-06 16:09:13 +0100
committerHåkon Hallingstad <hakon@verizonmedia.com>2020-03-06 16:09:13 +0100
commitb1cdda08cb9f3979076f9012fa26128a66f375c7 (patch)
tree015cdbb1aa99c5ab40878b769351a2ea238e0da4 /configserver
parent6f582fd7501818a9828b368023b1067f71483ef4 (diff)
Reuse existing super model completion notification
Diffstat (limited to 'configserver')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/ConfigServerBootstrap.java3
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelManager.java47
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelRequestHandler.java2
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();
}
}