From f0f5abc65741f8e7a45f9f01bdb8eb33e3cefcd8 Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Wed, 18 Jul 2018 13:23:15 +0200 Subject: Filter out apps that should not be deployed on this config server Either the apps should be deployed on another config server or they are fake apps that have never been deployed, filter out apps for both cases --- .../maintenance/PeriodicApplicationMaintainer.java | 23 +++++++--------------- .../PeriodicApplicationMaintainerTest.java | 4 ++++ 2 files changed, 11 insertions(+), 16 deletions(-) (limited to 'node-repository') diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainer.java index bdacf5362f1..d28b8c5e5c6 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainer.java @@ -2,21 +2,13 @@ package com.yahoo.vespa.hosted.provision.maintenance; import com.yahoo.config.provision.ApplicationId; -import com.yahoo.config.provision.ApplicationName; import com.yahoo.config.provision.Deployer; -import com.yahoo.config.provision.TenantName; import com.yahoo.log.LogLevel; import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.NodeRepository; -import com.yahoo.vespa.service.monitor.application.ConfigServerApplication; -import com.yahoo.vespa.service.monitor.application.ConfigServerHostApplication; -import com.yahoo.vespa.service.monitor.application.HostedVespaApplication; -import com.yahoo.vespa.service.monitor.application.ProxyHostApplication; -import com.yahoo.vespa.service.monitor.application.TenantHostApplication; import java.time.Duration; import java.time.Instant; -import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.HashSet; @@ -49,16 +41,9 @@ public class PeriodicApplicationMaintainer extends ApplicationMaintainer { // Returns the app that was deployed the longest time ago @Override protected Set applicationsNeedingMaintenance() { - // Need to exclude these fake apps - List fakeApps = Arrays.asList( - ConfigServerApplication.CONFIG_SERVER_APPLICATION.getApplicationId(), - ConfigServerHostApplication.CONFIG_SERVER_HOST_APPLICATION.getApplicationId(), - ProxyHostApplication.PROXY_HOST_APPLICATION.getApplicationId(), - TenantHostApplication.TENANT_HOST_APPLICATION.getApplicationId()); - Optional app = (nodesNeedingMaintenance().stream() .map(node -> node.allocation().get().owner()) - .filter(applicationId -> !fakeApps.contains(applicationId)) + .filter(this::shouldBeDeployedOnThisServer) .min(Comparator.comparing(this::getLastDeployTime))); app.ifPresent(applicationId -> log.log(LogLevel.INFO, applicationId + " will be deployed, last deploy time " + getLastDeployTime(applicationId))); @@ -69,6 +54,12 @@ public class PeriodicApplicationMaintainer extends ApplicationMaintainer { return deployer().lastDeployTime(application).orElse(Instant.EPOCH); } + // We only know last deploy time for applications that were deployed on this config server, + // the rest will be deployed on another config server + protected boolean shouldBeDeployedOnThisServer(ApplicationId application) { + return deployer().lastDeployTime(application).isPresent(); + } + @Override protected List nodesNeedingMaintenance() { return nodeRepository().getNodes(Node.State.active); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java index 90fa1801789..77f1594c386 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java @@ -262,6 +262,10 @@ public class PeriodicApplicationMaintainerTest { return super.nodesNeedingMaintenance(); } + protected boolean shouldBeDeployedOnThisServer(ApplicationId application) { + return true; + } + } } -- cgit v1.2.3