summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2019-10-11 18:19:11 +0200
committerJon Marius Venstad <venstad@gmail.com>2019-10-11 18:19:11 +0200
commit10108f1ccd8bbbd8480a033394cb32dcf5d8b117 (patch)
tree0803c42426945afce994188a8d9fc266cf542f35 /controller-server
parentc7e411803f4c730de6a27cb7ccd032a38be343ce (diff)
Handle cases where instances in application are not in the deployment spec
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java11
1 files changed, 7 insertions, 4 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
index 0a260bf3ed5..d118239d6a7 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
@@ -464,7 +464,7 @@ public class ApplicationController {
// We do this at deployment time for externally built applications, and at submission time
// for internally built ones, to be able to return a validation failure message when necessary
for (InstanceName instanceName : application.get().instances().keySet()) {
- application = withoutDeletedDeployments(application, instanceName);
+ application = withoutDeletedDeployments(application, instanceName);
// Clean up deployment jobs that are no longer referenced by deployment spec
DeploymentSpec deploymentSpec = application.get().deploymentSpec();
@@ -630,8 +630,9 @@ public class ApplicationController {
private LockedApplication withoutDeletedDeployments(LockedApplication application, InstanceName instance) {
DeploymentSpec deploymentSpec = application.get().deploymentSpec();
List<Deployment> deploymentsToRemove = application.get().require(instance).productionDeployments().values().stream()
- .filter(deployment -> ! deploymentSpec.requireInstance(instance).includes(deployment.zone().environment(),
- Optional.of(deployment.zone().region())))
+ .filter(deployment -> deploymentSpec.instance(instance).isEmpty()
+ || ! deploymentSpec.requireInstance(instance).includes(deployment.zone().environment(),
+ Optional.of(deployment.zone().region())))
.collect(Collectors.toList());
if (deploymentsToRemove.isEmpty()) return application;
@@ -655,7 +656,9 @@ public class ApplicationController {
private Instance withoutUnreferencedDeploymentJobs(DeploymentSpec deploymentSpec, Instance instance) {
for (JobType job : JobList.from(instance).production().mapToList(JobStatus::type)) {
ZoneId zone = job.zone(controller.system());
- if (deploymentSpec.requireInstance(instance.name()).includes(zone.environment(), Optional.of(zone.region())))
+ if (deploymentSpec.instance(instance.name())
+ .map(spec -> spec.includes(zone.environment(), Optional.of(zone.region())))
+ .orElse(false))
continue;
instance = instance.withoutDeploymentJob(job);
}