summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValerij Fredriksen <valerij92@gmail.com>2019-06-01 16:58:08 +0200
committerValerij Fredriksen <valerij92@gmail.com>2019-06-01 17:14:39 +0200
commitb0154dbc54bf7257d4d1803c4b0895b11f56335b (patch)
treef849ab30fa13c36d6e34f0b0a36d025bc96778c7
parentee6b26191c0855396971a5b23c2f7cbe6142367c (diff)
Only deploy supported infrastructure applications
-rw-r--r--config-provisioning/abi-spec.json2
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/InfraDeployer.java6
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/InfrastructureProvisioner.java7
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImpl.java14
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockDuperModel.java6
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockInfraDeployer.java6
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImplTest.java2
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/duper/DuperModelManager.java6
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/monitor/DuperModelInfraApi.java4
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);