summaryrefslogtreecommitdiffstats
path: root/service-monitor/src/main
diff options
context:
space:
mode:
authorHarald Musum <musum@oath.com>2018-12-03 19:11:31 +0100
committerGitHub <noreply@github.com>2018-12-03 19:11:31 +0100
commitb0414973532c2f04ad33e2a1e0383c0e5235722b (patch)
treee54511140dea814b56b1ca9056a5a2c0ffe5643a /service-monitor/src/main
parentf8a4d8cb28be790ce533484452db3a822397ee77 (diff)
Revert "Add infrastructure applications to DuperModel"
Diffstat (limited to 'service-monitor/src/main')
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ConfigServerApplication.java8
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ConfigServerHostApplication.java11
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ControllerApplication.java11
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ControllerHostApplication.java12
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/DuperModel.java140
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/DuperModelInfraApi.java26
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/HostedVespaApplication.java69
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/InfraApplication.java142
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/InfraApplicationApi.java22
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ProxyHostApplication.java11
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/TenantHostApplication.java14
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ZoneApplication.java4
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/monitor/internal/DuperModel.java42
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/monitor/internal/DuperModelListener.java (renamed from service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/DuperModelListener.java)2
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/monitor/internal/MonitorManager.java1
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/monitor/internal/ServiceMonitorImpl.java8
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/monitor/internal/SuperModelListenerImpl.java1
17 files changed, 161 insertions, 363 deletions
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ConfigServerApplication.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ConfigServerApplication.java
index f1041835a39..5ad38cebcfc 100644
--- a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ConfigServerApplication.java
+++ b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ConfigServerApplication.java
@@ -25,7 +25,7 @@ import java.util.Map;
/**
* A service/application model of the config server with health status.
*/
-public class ConfigServerApplication extends InfraApplication {
+public class ConfigServerApplication extends HostedVespaApplication {
public static final ConfigServerApplication CONFIG_SERVER_APPLICATION = new ConfigServerApplication();
public static final TenantId TENANT_ID = new TenantId(CONFIG_SERVER_APPLICATION.getApplicationId().tenant().value());
@@ -39,12 +39,12 @@ public class ConfigServerApplication extends InfraApplication {
return new ConfigId(CONFIG_ID_PREFIX + index);
}
- public ConfigServerApplication() {
+ private ConfigServerApplication() {
super("zone-config-servers", NodeType.config,
- ClusterSpec.Type.admin, ClusterSpec.Id.from("zone-config-servers"), ServiceType.CONFIG_SERVER);
+ ClusterSpec.Type.admin, ClusterSpec.Id.from("zone-config-servers"));
}
- public ApplicationInfo makeApplicationInfoFromConfig(ConfigserverConfig config) {
+ public ApplicationInfo makeApplicationInfo(ConfigserverConfig config) {
List<HostInfo> hostInfos = new ArrayList<>();
List<ConfigserverConfig.Zookeeperserver> zooKeeperServers = config.zookeeperserver();
for (int index = 0; index < zooKeeperServers.size(); ++index) {
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ConfigServerHostApplication.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ConfigServerHostApplication.java
index 9925e2ac69b..18420fe64a1 100644
--- a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ConfigServerHostApplication.java
+++ b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ConfigServerHostApplication.java
@@ -3,12 +3,13 @@ package com.yahoo.vespa.service.monitor.application;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.NodeType;
-import com.yahoo.vespa.applicationmodel.ServiceType;
-public class ConfigServerHostApplication extends InfraApplication {
- public ConfigServerHostApplication() {
+public class ConfigServerHostApplication extends HostedVespaApplication {
+
+ public static final ConfigServerHostApplication CONFIG_SERVER_HOST_APPLICATION = new ConfigServerHostApplication();
+
+ private ConfigServerHostApplication() {
super("configserver-host", NodeType.confighost,
- ClusterSpec.Type.container, ClusterSpec.Id.from("configserver-host"),
- ServiceType.HOST_ADMIN);
+ ClusterSpec.Type.container, ClusterSpec.Id.from("configserver-host"));
}
}
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ControllerApplication.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ControllerApplication.java
index ec4cb73383e..c1bc303e792 100644
--- a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ControllerApplication.java
+++ b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ControllerApplication.java
@@ -3,15 +3,16 @@ package com.yahoo.vespa.service.monitor.application;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.NodeType;
-import com.yahoo.vespa.applicationmodel.ServiceType;
/**
* @author mpolden
*/
-public class ControllerApplication extends InfraApplication {
- public ControllerApplication() {
- super("controller", NodeType.controller, ClusterSpec.Type.container,
- ClusterSpec.Id.from("controller"), ServiceType.CONTROLLER);
+public class ControllerApplication extends HostedVespaApplication {
+
+ public static final ControllerApplication CONTROLLER_APPLICATION = new ControllerApplication();
+
+ private ControllerApplication() {
+ super("controller", NodeType.controller, ClusterSpec.Type.container, ClusterSpec.Id.from("controller"));
}
}
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ControllerHostApplication.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ControllerHostApplication.java
index c23794b3835..8311919d570 100644
--- a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ControllerHostApplication.java
+++ b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ControllerHostApplication.java
@@ -3,14 +3,16 @@ package com.yahoo.vespa.service.monitor.application;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.NodeType;
-import com.yahoo.vespa.applicationmodel.ServiceType;
/**
* @author mpolden
*/
-public class ControllerHostApplication extends InfraApplication {
- public ControllerHostApplication() {
- super("controller-host", NodeType.controllerhost, ClusterSpec.Type.container,
- ClusterSpec.Id.from("controller-host"), ServiceType.HOST_ADMIN);
+public class ControllerHostApplication extends HostedVespaApplication {
+
+ public static final ControllerHostApplication CONTROLLER_HOST_APPLICATION = new ControllerHostApplication();
+
+ protected ControllerHostApplication() {
+ super("controller-host", NodeType.controllerhost, ClusterSpec.Type.container, ClusterSpec.Id.from("controller-host"));
}
+
}
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/DuperModel.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/DuperModel.java
deleted file mode 100644
index b28b37006ed..00000000000
--- a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/DuperModel.java
+++ /dev/null
@@ -1,140 +0,0 @@
-// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.service.monitor.application;
-
-import com.google.inject.Inject;
-import com.yahoo.cloud.config.ConfigserverConfig;
-import com.yahoo.config.model.api.ApplicationInfo;
-import com.yahoo.config.model.api.SuperModel;
-import com.yahoo.config.provision.ApplicationId;
-import com.yahoo.config.provision.HostName;
-import com.yahoo.vespa.flags.FeatureFlag;
-import com.yahoo.vespa.flags.FlagSource;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-/**
- * The {@code DuperModel} unites the {@link com.yahoo.config.model.api.SuperModel SuperModel}
- * with synthetic applications like the config server application.
- *
- * @author hakon
- */
-public class DuperModel implements DuperModelInfraApi {
- // Infrastructure applications
- private static final ConfigServerApplication configServerApplication = new ConfigServerApplication();
- private static final ConfigServerHostApplication configServerHostApplication = new ConfigServerHostApplication();
- private static final ProxyHostApplication proxyHostApplication = new ProxyHostApplication();
- private static final ControllerApplication controllerApplication = new ControllerApplication();
- private static final ControllerHostApplication controllerHostApplication = new ControllerHostApplication();
-
- private static final Map<ApplicationId, InfraApplication> supportedInfraApplications = Stream.of(
- configServerApplication,
- configServerHostApplication,
- proxyHostApplication,
- controllerApplication,
- controllerHostApplication)
- .collect(Collectors.toMap(InfraApplication::getApplicationId, Function.identity()));
-
- private final boolean containsInfra;
- private final boolean useConfigserverConfig;
-
- // Each of the above infrastructure applications may be active, in case their ApplicationInfo is present here
- private final ConcurrentHashMap<ApplicationId, ApplicationInfo> infraInfos =
- new ConcurrentHashMap<>(2 * supportedInfraApplications.size());
-
- // ApplicationInfo known at construction time
- private final List<ApplicationInfo> staticInfos = new ArrayList<>();
-
- @Inject
- public DuperModel(ConfigserverConfig configServerConfig, FlagSource flagSource) {
- this(
- // Whether to include activate infrastructure applications in the DuperModel.
- new FeatureFlag("dupermodel-contains-infra", true, flagSource).value(),
-
- // Whether to base the ApplicationInfo for the config server on ConfigserverConfig or InfrastructureProvisioner:
- // - ConfigserverConfig: The list of config servers comes from VESPA_CONFIGSERVERS environment variable.
- // - InfrastructureProvisioner: The list of config servers comes from the node repository.
- //
- // The goal is to use InfrastructureProvisioner like other infrastructure applications.
- new FeatureFlag("dupermodel-use-configserverconfig", true, flagSource).value(),
- configServerConfig.multitenant(),
- configServerApplication.makeApplicationInfoFromConfig(configServerConfig));
- }
-
- /** For testing */
- public DuperModel(boolean containsInfra,
- boolean useConfigserverConfig,
- boolean multitenant,
- ApplicationInfo configServerApplicationInfo) {
- this.containsInfra = containsInfra;
- this.useConfigserverConfig = useConfigserverConfig;
-
- // Single-tenant applications have the config server as part of the application model.
- // TODO: Add health monitoring for config server when part of application model.
- if (useConfigserverConfig && multitenant) {
- staticInfos.add(configServerApplicationInfo);
- }
- }
-
- public ConfigServerApplication getConfigServerApplication() {
- return configServerApplication;
- }
-
- public ConfigServerHostApplication getConfigServerHostApplication() {
- return configServerHostApplication;
- }
-
- public ProxyHostApplication getProxyHostApplication() {
- return proxyHostApplication;
- }
-
- public ControllerApplication getControllerApplication() {
- return controllerApplication;
- }
-
- public ControllerHostApplication getControllerHostApplication() {
- return controllerHostApplication;
- }
-
- @Override
- public List<InfraApplicationApi> getSupportedInfraApplications() {
- return new ArrayList<>(supportedInfraApplications.values());
- }
-
- @Override
- public boolean infraApplicationIsActive(ApplicationId applicationId) {
- return infraInfos.containsKey(applicationId);
- }
-
- @Override
- public void infraApplicationActivated(ApplicationId applicationId, List<HostName> hostnames) {
- InfraApplication application = supportedInfraApplications.get(applicationId);
- if (application == null) {
- throw new IllegalArgumentException("There is no infrastructure application with ID '" + applicationId + "'");
- }
-
- if (useConfigserverConfig && application.equals(configServerApplication)) {
- return;
- }
-
- infraInfos.put(application.getApplicationId(), application.makeApplicationInfo(hostnames));
- }
-
- @Override
- public void infraApplicationRemoved(ApplicationId applicationId) {
- infraInfos.remove(applicationId);
- }
-
- public List<ApplicationInfo> getApplicationInfos(SuperModel superModelSnapshot) {
- List<ApplicationInfo> allApplicationInfos = new ArrayList<>();
- allApplicationInfos.addAll(staticInfos);
- if (containsInfra) allApplicationInfos.addAll(infraInfos.values());
- allApplicationInfos.addAll(superModelSnapshot.getAllApplicationInfos());
- return allApplicationInfos;
- }
-}
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/DuperModelInfraApi.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/DuperModelInfraApi.java
deleted file mode 100644
index 2faeca55fa4..00000000000
--- a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/DuperModelInfraApi.java
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.service.monitor.application;
-
-import com.yahoo.config.provision.ApplicationId;
-import com.yahoo.config.provision.HostName;
-
-import java.util.List;
-
-/**
- * The DuperModel's API for infrastructure applications.
- *
- * @author hakonhall
- */
-public interface DuperModelInfraApi {
- /** Returns the list of supported infrastructure applications. */
- List<InfraApplicationApi> getSupportedInfraApplications();
-
- /** Returns true if the DuperModel has registered the infrastructure application as active. */
- boolean infraApplicationIsActive(ApplicationId applicationId);
-
- /** Update the DuperModel: A supported infrastructure application has been activated or is active. */
- void infraApplicationActivated(ApplicationId applicationId, List<HostName> hostnames);
-
- /** Update the DuperModel: A supported infrastructure application has been removed or is not active. */
- void infraApplicationRemoved(ApplicationId applicationId);
-}
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/HostedVespaApplication.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/HostedVespaApplication.java
new file mode 100644
index 00000000000..23fafa701d9
--- /dev/null
+++ b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/HostedVespaApplication.java
@@ -0,0 +1,69 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.service.monitor.application;
+
+import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.Capacity;
+import com.yahoo.config.provision.ClusterSpec;
+import com.yahoo.config.provision.NodeType;
+import com.yahoo.config.provision.TenantName;
+import com.yahoo.component.Version;
+
+/**
+ * @author freva
+ */
+public abstract class HostedVespaApplication {
+
+ public static final TenantName TENANT_NAME = TenantName.from("hosted-vespa");
+
+ private final ApplicationId applicationId;
+ private final Capacity capacity;
+ private final ClusterSpec.Type clusterType;
+ private final ClusterSpec.Id clusterId;
+
+ protected HostedVespaApplication(String applicationName, NodeType nodeType,
+ ClusterSpec.Type clusterType, ClusterSpec.Id clusterId) {
+ this(createHostedVespaApplicationId(applicationName), Capacity.fromRequiredNodeType(nodeType),
+ clusterType, clusterId);
+ }
+
+ protected HostedVespaApplication(ApplicationId applicationId, Capacity capacity,
+ ClusterSpec.Type clusterType, ClusterSpec.Id clusterId) {
+ this.applicationId = applicationId;
+ this.capacity = capacity;
+ this.clusterType = clusterType;
+ this.clusterId = clusterId;
+ }
+
+ public ApplicationId getApplicationId() {
+ return applicationId;
+ }
+
+ public Capacity getCapacity() {
+ return capacity;
+ }
+
+ public ClusterSpec getClusterSpecWithVersion(Version version) {
+ return ClusterSpec.request(clusterType, clusterId, version, true);
+ }
+
+ public ClusterSpec.Type getClusterType() {
+ return clusterType;
+ }
+
+ public ClusterSpec.Id getClusterId() {
+ return clusterId;
+ }
+
+ public static ApplicationId createHostedVespaApplicationId(String applicationName) {
+ return new ApplicationId.Builder()
+ .tenant(TENANT_NAME)
+ .applicationName(applicationName)
+ .build();
+ }
+
+ @Override
+ public String toString() {
+ return applicationId.toString();
+ }
+
+}
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/InfraApplication.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/InfraApplication.java
deleted file mode 100644
index 1c4f6ea3d2a..00000000000
--- a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/InfraApplication.java
+++ /dev/null
@@ -1,142 +0,0 @@
-// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.service.monitor.application;
-
-import com.yahoo.config.model.api.ApplicationInfo;
-import com.yahoo.config.model.api.HostInfo;
-import com.yahoo.config.model.api.PortInfo;
-import com.yahoo.config.model.api.ServiceInfo;
-import com.yahoo.config.provision.ApplicationId;
-import com.yahoo.config.provision.Capacity;
-import com.yahoo.config.provision.ClusterSpec;
-import com.yahoo.config.provision.HostName;
-import com.yahoo.config.provision.NodeType;
-import com.yahoo.config.provision.TenantName;
-import com.yahoo.component.Version;
-import com.yahoo.vespa.applicationmodel.ConfigId;
-import com.yahoo.vespa.applicationmodel.ServiceType;
-import com.yahoo.vespa.service.monitor.internal.ModelGenerator;
-import com.yahoo.vespa.service.monitor.internal.health.ApplicationHealthMonitor;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-
-/**
- * @author freva
- */
-public abstract class InfraApplication implements InfraApplicationApi {
- static final int HEALTH_PORT = 8080;
-
- private static final TenantName TENANT_NAME = TenantName.from("hosted-vespa");
- private static final String CONFIG_ID_PREFIX = "configid.";
-
- private final ApplicationId applicationId;
- private final Capacity capacity;
- private final ClusterSpec.Type clusterType;
- private final ClusterSpec.Id clusterId;
- private final ServiceType serviceType;
-
- public static ApplicationId createHostedVespaApplicationId(String applicationName) {
- return new ApplicationId.Builder()
- .tenant(TENANT_NAME)
- .applicationName(applicationName)
- .build();
- }
-
- protected InfraApplication(String applicationName,
- NodeType nodeType,
- ClusterSpec.Type clusterType,
- ClusterSpec.Id clusterId,
- ServiceType serviceType) {
- this.applicationId = createHostedVespaApplicationId(applicationName);
- this.capacity = Capacity.fromRequiredNodeType(nodeType);
- this.clusterType = clusterType;
- this.clusterId = clusterId;
- this.serviceType = serviceType;
- }
-
- @Override
- public ApplicationId getApplicationId() {
- return applicationId;
- }
-
- @Override
- public Capacity getCapacity() {
- return capacity;
- }
-
- @Override
- public ClusterSpec getClusterSpecWithVersion(Version version) {
- return ClusterSpec.request(clusterType, clusterId, version, true);
- }
-
- public ClusterSpec.Type getClusterType() {
- return clusterType;
- }
-
- public ClusterSpec.Id getClusterId() {
- return clusterId;
- }
-
- public ApplicationInfo makeApplicationInfo(List<HostName> hostnames) {
- List<HostInfo> hostInfos = new ArrayList<>();
- for (int index = 0; index < hostnames.size(); ++index) {
- hostInfos.add(makeHostInfo(hostnames.get(index), HEALTH_PORT, index, serviceType, clusterId));
- }
-
- return new ApplicationInfo(applicationId, 0, new HostsModel(hostInfos));
- }
-
- private static HostInfo makeHostInfo(HostName hostname, int port, int configIndex, ServiceType serviceType, ClusterSpec.Id clusterId) {
- PortInfo portInfo = new PortInfo(port, ApplicationHealthMonitor.PORT_TAGS_HEALTH);
-
- Map<String, String> properties = new HashMap<>();
- properties.put(ModelGenerator.CLUSTER_ID_PROPERTY_NAME, clusterId.value());
-
- ServiceInfo serviceInfo = new ServiceInfo(
- // service name == service type for the first service of each type on each host
- serviceType.s(),
- serviceType.s(),
- Collections.singletonList(portInfo),
- properties,
- configIdFrom(configIndex).s(),
- hostname.value());
-
- return new HostInfo(hostname.value(), Collections.singletonList(serviceInfo));
- }
-
- private static ConfigId configIdFrom(int index) {
- return new ConfigId(CONFIG_ID_PREFIX + index);
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- InfraApplication that = (InfraApplication) o;
- return Objects.equals(applicationId, that.applicationId) &&
- Objects.equals(capacity, that.capacity) &&
- clusterType == that.clusterType &&
- Objects.equals(clusterId, that.clusterId) &&
- Objects.equals(serviceType, that.serviceType);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(applicationId, capacity, clusterType, clusterId, serviceType);
- }
-
- @Override
- public String toString() {
- return "InfraApplication{" +
- "applicationId=" + applicationId +
- ", capacity=" + capacity +
- ", clusterType=" + clusterType +
- ", clusterId=" + clusterId +
- ", serviceType=" + serviceType +
- '}';
- }
-}
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/InfraApplicationApi.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/InfraApplicationApi.java
deleted file mode 100644
index 3777a50b531..00000000000
--- a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/InfraApplicationApi.java
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.service.monitor.application;
-
-import com.yahoo.component.Version;
-import com.yahoo.config.model.api.ApplicationInfo;
-import com.yahoo.config.provision.ApplicationId;
-import com.yahoo.config.provision.Capacity;
-import com.yahoo.config.provision.ClusterSpec;
-import com.yahoo.config.provision.HostName;
-
-import java.util.List;
-
-/**
- * API of infrastructure application that is accessible via DuperModelInfraApi.
- *
- * @author hakonhall
- */
-public interface InfraApplicationApi {
- ApplicationId getApplicationId();
- Capacity getCapacity();
- ClusterSpec getClusterSpecWithVersion(Version version);
-}
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ProxyHostApplication.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ProxyHostApplication.java
index 2debec5d299..c1af7a0977e 100644
--- a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ProxyHostApplication.java
+++ b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ProxyHostApplication.java
@@ -3,11 +3,12 @@ package com.yahoo.vespa.service.monitor.application;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.NodeType;
-import com.yahoo.vespa.applicationmodel.ServiceType;
-public class ProxyHostApplication extends InfraApplication {
- public ProxyHostApplication() {
- super("proxy-host", NodeType.proxyhost, ClusterSpec.Type.container,
- ClusterSpec.Id.from("proxy-host"), ServiceType.HOST_ADMIN);
+public class ProxyHostApplication extends HostedVespaApplication {
+
+ public static final ProxyHostApplication PROXY_HOST_APPLICATION = new ProxyHostApplication();
+
+ private ProxyHostApplication() {
+ super("proxy-host", NodeType.proxyhost, ClusterSpec.Type.container, ClusterSpec.Id.from("proxy-host"));
}
}
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/TenantHostApplication.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/TenantHostApplication.java
new file mode 100644
index 00000000000..27879a03c08
--- /dev/null
+++ b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/TenantHostApplication.java
@@ -0,0 +1,14 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.service.monitor.application;
+
+import com.yahoo.config.provision.ClusterSpec;
+import com.yahoo.config.provision.NodeType;
+
+public class TenantHostApplication extends HostedVespaApplication {
+
+ public static final TenantHostApplication TENANT_HOST_APPLICATION = new TenantHostApplication();
+
+ private TenantHostApplication() {
+ super("tenant-host", NodeType.host, ClusterSpec.Type.container, ClusterSpec.Id.from("tenant-host"));
+ }
+}
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ZoneApplication.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ZoneApplication.java
index 4a4189cddd7..c10015d3bfa 100644
--- a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ZoneApplication.java
+++ b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/ZoneApplication.java
@@ -10,14 +10,14 @@ import java.util.Objects;
/**
* @author hakon
*
- * TODO: This does not extend InfraApplication because
+ * TODO: This does not extend HostedVespaApplication because
* 1) It is not deployed same as the other HostedVespaApplications
* 2) ZoneApplication has multiple clusters
*/
public class ZoneApplication {
private ZoneApplication() {}
- public static final ApplicationId ZONE_APPLICATION_ID = InfraApplication
+ public static final ApplicationId ZONE_APPLICATION_ID = HostedVespaApplication
.createHostedVespaApplicationId("routing");
public static boolean isNodeAdminService(ApplicationId applicationId,
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/internal/DuperModel.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/internal/DuperModel.java
new file mode 100644
index 00000000000..80e0bfd2710
--- /dev/null
+++ b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/internal/DuperModel.java
@@ -0,0 +1,42 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.service.monitor.internal;
+
+import com.yahoo.cloud.config.ConfigserverConfig;
+import com.yahoo.config.model.api.ApplicationInfo;
+import com.yahoo.config.model.api.SuperModel;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import static com.yahoo.vespa.service.monitor.application.ConfigServerApplication.CONFIG_SERVER_APPLICATION;
+
+/**
+ * The {@code DuperModel} unites the {@link com.yahoo.config.model.api.SuperModel SuperModel}
+ * with the synthetically produced applications like the config server application.
+ *
+ * @author hakon
+ */
+public class DuperModel {
+ private final List<ApplicationInfo> staticApplicationInfos = new ArrayList<>();
+
+ public DuperModel(ConfigserverConfig configServerConfig) {
+ // Single-tenant applications have the config server as part of the application model.
+ // TODO: Add health monitoring for config server when part of application model.
+ if (configServerConfig.multitenant()) {
+ staticApplicationInfos.add(CONFIG_SERVER_APPLICATION.makeApplicationInfo(configServerConfig));
+ }
+ }
+
+ /** For testing. */
+ DuperModel(ApplicationInfo... staticApplicationInfos) {
+ this.staticApplicationInfos.addAll(Arrays.asList(staticApplicationInfos));
+ }
+
+ public List<ApplicationInfo> getApplicationInfos(SuperModel superModelSnapshot) {
+ List<ApplicationInfo> allApplicationInfos = new ArrayList<>();
+ allApplicationInfos.addAll(staticApplicationInfos);
+ allApplicationInfos.addAll(superModelSnapshot.getAllApplicationInfos());
+ return allApplicationInfos;
+ }
+}
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/DuperModelListener.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/internal/DuperModelListener.java
index 34b8109ce53..235c7db5c36 100644
--- a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/application/DuperModelListener.java
+++ b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/internal/DuperModelListener.java
@@ -1,5 +1,5 @@
// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.service.monitor.application;
+package com.yahoo.vespa.service.monitor.internal;
import com.yahoo.config.model.api.ApplicationInfo;
import com.yahoo.config.model.api.SuperModel;
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/internal/MonitorManager.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/internal/MonitorManager.java
index 965c425b91e..1edf3a18215 100644
--- a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/internal/MonitorManager.java
+++ b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/internal/MonitorManager.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.service.monitor.internal;
-import com.yahoo.vespa.service.monitor.application.DuperModelListener;
import com.yahoo.vespa.service.monitor.ServiceStatusProvider;
/**
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/internal/ServiceMonitorImpl.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/internal/ServiceMonitorImpl.java
index 728c761c71d..eb346cf40c1 100644
--- a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/internal/ServiceMonitorImpl.java
+++ b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/internal/ServiceMonitorImpl.java
@@ -9,7 +9,6 @@ import com.yahoo.jdisc.Metric;
import com.yahoo.jdisc.Timer;
import com.yahoo.vespa.applicationmodel.ApplicationInstance;
import com.yahoo.vespa.applicationmodel.ApplicationInstanceReference;
-import com.yahoo.vespa.service.monitor.application.DuperModel;
import com.yahoo.vespa.service.monitor.ServiceModel;
import com.yahoo.vespa.service.monitor.ServiceMonitor;
import com.yahoo.vespa.service.monitor.internal.health.HealthMonitorManager;
@@ -27,11 +26,12 @@ public class ServiceMonitorImpl implements ServiceMonitor {
HealthMonitorManager healthMonitorManager,
Metric metric,
Timer timer,
- Zone zone,
- DuperModel duperModel) {
+ Zone zone) {
ServiceMonitorMetrics metrics = new ServiceMonitorMetrics(metric, timer);
- UnionMonitorManager monitorManager = new UnionMonitorManager(slobrokMonitorManager, healthMonitorManager);
+ DuperModel duperModel = new DuperModel(configserverConfig);
+ UnionMonitorManager monitorManager =
+ new UnionMonitorManager(slobrokMonitorManager, healthMonitorManager);
SuperModelListenerImpl superModelListener = new SuperModelListenerImpl(
monitorManager,
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/internal/SuperModelListenerImpl.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/internal/SuperModelListenerImpl.java
index 7e2b61af090..f509809c33d 100644
--- a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/internal/SuperModelListenerImpl.java
+++ b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/internal/SuperModelListenerImpl.java
@@ -7,7 +7,6 @@ import com.yahoo.config.model.api.SuperModelListener;
import com.yahoo.config.model.api.SuperModelProvider;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.Zone;
-import com.yahoo.vespa.service.monitor.application.DuperModel;
import com.yahoo.vespa.service.monitor.ServiceModel;
import com.yahoo.vespa.service.monitor.ServiceStatusProvider;