diff options
author | Valerij Fredriksen <valerij92@gmail.com> | 2019-06-01 16:58:08 +0200 |
---|---|---|
committer | Valerij Fredriksen <valerij92@gmail.com> | 2019-06-01 17:14:39 +0200 |
commit | b0154dbc54bf7257d4d1803c4b0895b11f56335b (patch) | |
tree | f849ab30fa13c36d6e34f0b0a36d025bc96778c7 | |
parent | ee6b26191c0855396971a5b23c2f7cbe6142367c (diff) |
Only deploy supported infrastructure applications
9 files changed, 31 insertions, 22 deletions
diff --git a/config-provisioning/abi-spec.json b/config-provisioning/abi-spec.json index 3cfa301894a..e88947b3fdb 100644 --- a/config-provisioning/abi-spec.json +++ b/config-provisioning/abi-spec.json @@ -502,7 +502,7 @@ ], "methods": [ "public abstract java.util.Optional getDeployment(com.yahoo.config.provision.ApplicationId)", - "public abstract java.util.List getSupportedInfraApplications()" + "public abstract java.util.Map getSupportedInfraDeployments()" ], "fields": [] }, diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/InfraDeployer.java b/config-provisioning/src/main/java/com/yahoo/config/provision/InfraDeployer.java index e1657bc5dca..6fbabfd0c95 100644 --- a/config-provisioning/src/main/java/com/yahoo/config/provision/InfraDeployer.java +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/InfraDeployer.java @@ -1,7 +1,7 @@ // Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.config.provision; -import java.util.List; +import java.util.Map; import java.util.Optional; /** @@ -17,6 +17,6 @@ public interface InfraDeployer { */ Optional<Deployment> getDeployment(ApplicationId application); - /** Returns list of infrastructure applications supported in this zone */ - List<ApplicationId> getSupportedInfraApplications(); + /** Returns deployments by application id for the supported infrastructure applications in this zone */ + Map<ApplicationId, Deployment> getSupportedInfraDeployments(); } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/InfrastructureProvisioner.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/InfrastructureProvisioner.java index 9ab816b8acc..3392569d1f2 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/InfrastructureProvisioner.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/InfrastructureProvisioner.java @@ -1,7 +1,6 @@ // Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.provision.maintenance; -import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.InfraDeployer; import com.yahoo.log.LogLevel; import com.yahoo.vespa.hosted.provision.NodeRepository; @@ -28,13 +27,13 @@ public class InfrastructureProvisioner extends Maintainer { @Override protected void maintain() { - for (ApplicationId application : infraDeployer.getSupportedInfraApplications()) { + infraDeployer.getSupportedInfraDeployments().forEach((application, deployment) -> { try { - infraDeployer.getDeployment(application).orElseThrow().activate(); + deployment.activate(); } catch (RuntimeException e) { logger.log(LogLevel.INFO, "Failed to activate " + application, e); // loop around to activate the next application } - } + }); } } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImpl.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImpl.java index 73aadb93f2a..f3fdb583abf 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImpl.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImpl.java @@ -23,7 +23,6 @@ import com.yahoo.vespa.service.monitor.InfraApplicationApi; import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.function.Function; import java.util.logging.Logger; import java.util.stream.Collectors; @@ -38,7 +37,6 @@ public class InfraDeployerImpl implements InfraDeployer { private final Provisioner provisioner; private final InfrastructureVersions infrastructureVersions; private final DuperModelInfraApi duperModel; - private final Map<ApplicationId, InfraApplicationApi> infraApplicationApiByApplicationId; @Inject public InfraDeployerImpl(NodeRepository nodeRepository, Provisioner provisioner, DuperModelInfraApi duperModel) { @@ -46,21 +44,17 @@ public class InfraDeployerImpl implements InfraDeployer { this.provisioner = provisioner; this.infrastructureVersions = nodeRepository.infrastructureVersions(); this.duperModel = duperModel; - this.infraApplicationApiByApplicationId = duperModel.getSupportedInfraApplications().stream() - .collect(Collectors.toUnmodifiableMap( - InfraApplicationApi::getApplicationId, - Function.identity())); } - @Override public Optional<Deployment> getDeployment(ApplicationId application) { - return Optional.ofNullable(infraApplicationApiByApplicationId.get(application)).map(InfraDeployment::new); + return duperModel.getInfraApplication(application).map(InfraDeployment::new); } @Override - public List<ApplicationId> getSupportedInfraApplications() { - return List.copyOf(infraApplicationApiByApplicationId.keySet()); + public Map<ApplicationId, Deployment> getSupportedInfraDeployments() { + return duperModel.getSupportedInfraApplications().stream() + .collect(Collectors.toMap(InfraApplicationApi::getApplicationId, InfraDeployment::new)); } private class InfraDeployment implements Deployment { diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockDuperModel.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockDuperModel.java index 1a612e0ff00..62e17ab63ad 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockDuperModel.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockDuperModel.java @@ -11,6 +11,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; /** @@ -30,6 +31,11 @@ public class MockDuperModel implements DuperModelInfraApi { } @Override + public Optional<InfraApplicationApi> getInfraApplication(ApplicationId applicationId) { + return Optional.ofNullable(supportedInfraApps.get(applicationId)); + } + + @Override public boolean infraApplicationIsActive(ApplicationId applicationId) { return activeApps.containsKey(applicationId); } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockInfraDeployer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockInfraDeployer.java index 5a5f8431653..831520cf383 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockInfraDeployer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockInfraDeployer.java @@ -4,7 +4,7 @@ import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.Deployment; import com.yahoo.config.provision.InfraDeployer; -import java.util.List; +import java.util.Map; import java.util.Optional; public class MockInfraDeployer implements InfraDeployer { @@ -14,7 +14,7 @@ public class MockInfraDeployer implements InfraDeployer { } @Override - public List<ApplicationId> getSupportedInfraApplications() { - return List.of(); + public Map<ApplicationId, Deployment> getSupportedInfraDeployments() { + return Map.of(); } } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImplTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImplTest.java index 5b6da66f7f2..c6f91b6a0b9 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImplTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImplTest.java @@ -68,7 +68,7 @@ public class InfraDeployerImplTest { private final NodeType nodeType; public InfraDeployerImplTest(InfraApplicationApi application) { - when(duperModelInfraApi.getSupportedInfraApplications()).thenReturn(List.of(application)); + when(duperModelInfraApi.getInfraApplication(eq(application.getApplicationId()))).thenReturn(Optional.of(application)); this.application = application; this.nodeType = application.getCapacity().type(); this.infraDeployer = new InfraDeployerImpl(nodeRepository, provisioner, duperModelInfraApi); diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/DuperModelManager.java b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/DuperModelManager.java index 2477c77bdad..c9cd4528bec 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/DuperModelManager.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/DuperModelManager.java @@ -17,6 +17,7 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; @@ -94,6 +95,11 @@ public class DuperModelManager implements DuperModelInfraApi { return new ArrayList<>(supportedInfraApplications.values()); } + @Override + public Optional<InfraApplicationApi> getInfraApplication(ApplicationId applicationId) { + return Optional.ofNullable(supportedInfraApplications.get(applicationId)); + } + /** * Returns true if application is considered an infrastructure application by the DuperModel. * diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/DuperModelInfraApi.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/DuperModelInfraApi.java index c5c96921fa1..d08bba2bd3d 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/DuperModelInfraApi.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/DuperModelInfraApi.java @@ -5,6 +5,7 @@ import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.HostName; import java.util.List; +import java.util.Optional; /** * The DuperModel's API for infrastructure applications. @@ -15,6 +16,9 @@ public interface DuperModelInfraApi { /** Returns the list of supported infrastructure applications. */ List<InfraApplicationApi> getSupportedInfraApplications(); + /** Returns a supported infrastructure with the given application id or empty if not found */ + Optional<InfraApplicationApi> getInfraApplication(ApplicationId applicationId); + /** Returns true if the DuperModel has registered the infrastructure application as active. */ boolean infraApplicationIsActive(ApplicationId applicationId); |