diff options
author | Håkon Hallingstad <hakon@oath.com> | 2017-10-02 20:22:33 +0200 |
---|---|---|
committer | Håkon Hallingstad <hakon@oath.com> | 2017-10-02 20:22:33 +0200 |
commit | 3237d9de41b1dd0094fe081faf7b5ef0741ffff9 (patch) | |
tree | a27fd4a1bb135f708cc32bd1737f5eea16c9224d /service-monitor | |
parent | 61679bfc56d0f9c5df09e92b70375ec1262179f0 (diff) |
ServiceMonitor v2 support for single tenancy
Diffstat (limited to 'service-monitor')
3 files changed, 53 insertions, 8 deletions
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ModelGenerator.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ModelGenerator.java index ef418f99d47..bee34524b20 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ModelGenerator.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ModelGenerator.java @@ -31,6 +31,11 @@ import java.util.stream.Collectors; public class ModelGenerator { public static final String CLUSTER_ID_PROPERTY_NAME = "clustername"; + /** + * Create service model based primarily on super model. + * + * If the configServerhosts is non-empty, a config server application is added. + */ ServiceModel toServiceModel( SuperModel superModel, Zone zone, @@ -47,10 +52,12 @@ public class ModelGenerator { } // The config server is part of the service model (but not super model) - ConfigServerApplication configServerApplication = new ConfigServerApplication(); - ApplicationInstance<ServiceMonitorStatus> configServerApplicationInstance = - configServerApplication.toApplicationInstance(configServerHosts); - applicationInstances.put(configServerApplicationInstance.reference(), configServerApplicationInstance); + if (!configServerHosts.isEmpty()) { + ConfigServerApplication configServerApplication = new ConfigServerApplication(); + ApplicationInstance<ServiceMonitorStatus> configServerApplicationInstance = + configServerApplication.toApplicationInstance(configServerHosts); + applicationInstances.put(configServerApplicationInstance.reference(), configServerApplicationInstance); + } return new ServiceModel(applicationInstances); } diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ServiceMonitorImpl.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ServiceMonitorImpl.java index 3468644169d..c3ce129e89a 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ServiceMonitorImpl.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ServiceMonitorImpl.java @@ -8,6 +8,7 @@ import com.yahoo.config.provision.Zone; import com.yahoo.vespa.applicationmodel.ApplicationInstance; import com.yahoo.vespa.applicationmodel.ApplicationInstanceReference; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.logging.Logger; @@ -26,12 +27,20 @@ public class ServiceMonitorImpl implements ServiceMonitor { public ServiceMonitorImpl(SuperModelProvider superModelProvider, ConfigserverConfig configserverConfig) { this.zone = superModelProvider.getZone(); - this.configServerHostnames = configserverConfig.zookeeperserver().stream() - .map(server -> server.hostname()) - .collect(Collectors.toList()); + this.configServerHostnames = toConfigServerList(configserverConfig); superModelListener.start(superModelProvider); } + private List<String> toConfigServerList(ConfigserverConfig configserverConfig) { + if (configserverConfig.multitenant()) { + return configserverConfig.zookeeperserver().stream() + .map(server -> server.hostname()) + .collect(Collectors.toList()); + } + + return Collections.emptyList(); + } + @Override public Map<ApplicationInstanceReference, ApplicationInstance<ServiceMonitorStatus>> queryStatusOfAllApplicationInstances() { diff --git a/service-monitor/src/test/java/com/yahoo/vespa/service/monitor/ModelGeneratorTest.java b/service-monitor/src/test/java/com/yahoo/vespa/service/monitor/ModelGeneratorTest.java index e54fdc51a3a..87cbb7950b6 100644 --- a/service-monitor/src/test/java/com/yahoo/vespa/service/monitor/ModelGeneratorTest.java +++ b/service-monitor/src/test/java/com/yahoo/vespa/service/monitor/ModelGeneratorTest.java @@ -11,6 +11,7 @@ import com.yahoo.vespa.applicationmodel.ServiceCluster; import com.yahoo.vespa.applicationmodel.ServiceInstance; import org.junit.Test; +import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -30,7 +31,7 @@ public class ModelGeneratorTest { private final int PORT = 2; @Test - public void toApplicationModel() throws Exception { + public void toApplicationModelWithConfigServerApplication() throws Exception { SuperModel superModel = ExampleModel.createExampleSuperModelWithOneRpcPort(HOSTNAME, PORT); ModelGenerator modelGenerator = new ModelGenerator(); @@ -73,6 +74,34 @@ public class ModelGeneratorTest { } } + @Test + public void toApplicationModel() throws Exception { + SuperModel superModel = + ExampleModel.createExampleSuperModelWithOneRpcPort(HOSTNAME, PORT); + ModelGenerator modelGenerator = new ModelGenerator(); + + Zone zone = new Zone(Environment.from(ENVIRONMENT), RegionName.from(REGION)); + + List<String> configServerHosts = Collections.emptyList(); + + SlobrokMonitor2 slobrokMonitor = mock(SlobrokMonitor2.class); + when(slobrokMonitor.getStatus(any(), any())).thenReturn(ServiceMonitorStatus.UP); + + ServiceModel serviceModel = + modelGenerator.toServiceModel( + superModel, + zone, + configServerHosts, + slobrokMonitor); + + Map<ApplicationInstanceReference, + ApplicationInstance<ServiceMonitorStatus>> applicationInstances = + serviceModel.getAllApplicationInstances(); + + assertEquals(1, applicationInstances.size()); + verifyOtherApplication(applicationInstances.values().iterator().next()); + } + private void verifyOtherApplication(ApplicationInstance<ServiceMonitorStatus> applicationInstance) { assertEquals(String.format("%s:%s:%s:%s:%s", ExampleModel.TENANT, |