diff options
author | Håkon Hallingstad <hakon@oath.com> | 2018-12-06 14:38:57 +0100 |
---|---|---|
committer | Håkon Hallingstad <hakon@oath.com> | 2018-12-06 14:38:57 +0100 |
commit | 790f43668c9f6a1ed0e86cfec730a76c31666cf6 (patch) | |
tree | 1726ce9fae98dd7f2c533733d69f0458d96cf8af /service-monitor/src/test/java/com/yahoo/vespa/service/model/ModelGeneratorTest.java | |
parent | 0daac4e48cea934f1849d5be486c8506641214b6 (diff) |
Make service monitors aware of infra applications in duper model.
- Notify monitors of infrastructure application activation. Live-flipping the
content of the duper model is non-trivial and has been removed.
- Split out DuperModel as a simple mutable and thread-unsafe container of the
applications in the duper model, that also handles calls listeners on
changes. The previous DuperModel has been renamed to DuperModelManager.
- Replace SuperModelProvider::snapshot method (fast but difficult to use
right) with registerListener.
- Shorten the fully qualified package names by 1-2 levels for mosts classes.
Next steps:
- Make HA query the real orchestrator
- Start experimenting with health monitoring of infra apps
Diffstat (limited to 'service-monitor/src/test/java/com/yahoo/vespa/service/model/ModelGeneratorTest.java')
-rw-r--r-- | service-monitor/src/test/java/com/yahoo/vespa/service/model/ModelGeneratorTest.java | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/service-monitor/src/test/java/com/yahoo/vespa/service/model/ModelGeneratorTest.java b/service-monitor/src/test/java/com/yahoo/vespa/service/model/ModelGeneratorTest.java new file mode 100644 index 00000000000..bcc136f80e3 --- /dev/null +++ b/service-monitor/src/test/java/com/yahoo/vespa/service/model/ModelGeneratorTest.java @@ -0,0 +1,114 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.service.model; + +import com.yahoo.cloud.config.ConfigserverConfig; +import com.yahoo.config.model.api.ApplicationInfo; +import com.yahoo.config.provision.Environment; +import com.yahoo.config.provision.RegionName; +import com.yahoo.config.provision.Zone; +import com.yahoo.vespa.applicationmodel.ApplicationInstance; +import com.yahoo.vespa.applicationmodel.ApplicationInstanceReference; +import com.yahoo.vespa.applicationmodel.ServiceCluster; +import com.yahoo.vespa.applicationmodel.ServiceInstance; +import com.yahoo.vespa.applicationmodel.ServiceStatus; +import com.yahoo.vespa.service.monitor.ServiceModel; +import com.yahoo.vespa.service.monitor.ConfigserverUtil; +import com.yahoo.vespa.service.duper.ConfigServerApplication; +import com.yahoo.vespa.service.slobrok.SlobrokMonitorManagerImpl; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class ModelGeneratorTest { + private final String ENVIRONMENT = "prod"; + private final String REGION = "us-west-1"; + private final String HOSTNAME = "hostname"; + private final int PORT = 2; + + @Test + public void toApplicationModel() throws Exception { + ModelGenerator modelGenerator = new ModelGenerator(); + + Zone zone = new Zone(Environment.from(ENVIRONMENT), RegionName.from(REGION)); + + SlobrokMonitorManagerImpl slobrokMonitorManager = mock(SlobrokMonitorManagerImpl.class); + when(slobrokMonitorManager.getStatus(any(), any(), any(), any())) + .thenReturn(ServiceStatus.UP); + + ServiceModel serviceModel = + modelGenerator.toServiceModel( + getExampleApplicationInfos(), + zone, + slobrokMonitorManager); + + Map<ApplicationInstanceReference, + ApplicationInstance> applicationInstances = + serviceModel.getAllApplicationInstances(); + + assertEquals(2, applicationInstances.size()); + + Iterator<Map.Entry<ApplicationInstanceReference, + ApplicationInstance>> iterator = + applicationInstances.entrySet().iterator(); + + ApplicationInstance applicationInstance1 = iterator.next().getValue(); + ApplicationInstance applicationInstance2 = iterator.next().getValue(); + + if (applicationInstance1.applicationInstanceId().equals( + ConfigServerApplication.APPLICATION_INSTANCE_ID)) { + verifyConfigServerApplication(applicationInstance1); + verifyOtherApplication(applicationInstance2); + } else { + verifyConfigServerApplication(applicationInstance2); + verifyOtherApplication(applicationInstance1); + } + } + + private List<ApplicationInfo> getExampleApplicationInfos() { + List<ApplicationInfo> applicationInfos = new ArrayList<>(); + ConfigserverConfig config = ConfigserverUtil.createExampleConfigserverConfig(); + applicationInfos.add(new ConfigServerApplication().makeApplicationInfoFromConfig(config)); + applicationInfos.addAll(ExampleModel.createExampleSuperModelWithOneRpcPort(HOSTNAME, PORT).getAllApplicationInfos()); + return applicationInfos; + } + + private void verifyOtherApplication(ApplicationInstance applicationInstance) { + assertEquals(String.format("%s:%s:%s:%s:%s", + ExampleModel.TENANT, + ExampleModel.APPLICATION_NAME, + ENVIRONMENT, + REGION, + ExampleModel.INSTANCE_NAME), + applicationInstance.reference().toString()); + + assertEquals(ExampleModel.TENANT, applicationInstance.tenantId().toString()); + Set<ServiceCluster> serviceClusters = + applicationInstance.serviceClusters(); + assertEquals(1, serviceClusters.size()); + ServiceCluster serviceCluster = serviceClusters.iterator().next(); + assertEquals(ExampleModel.CLUSTER_ID, serviceCluster.clusterId().toString()); + assertEquals(ExampleModel.SERVICE_TYPE, serviceCluster.serviceType().toString()); + Set<ServiceInstance> serviceInstances = + serviceCluster.serviceInstances(); + assertEquals(1, serviceClusters.size()); + ServiceInstance serviceInstance = serviceInstances.iterator().next(); + assertEquals(HOSTNAME, serviceInstance.hostName().toString()); + assertEquals(ExampleModel.CONFIG_ID, serviceInstance.configId().toString()); + assertEquals(ServiceStatus.UP, serviceInstance.serviceStatus()); + } + + private void verifyConfigServerApplication( + ApplicationInstance applicationInstance) { + assertEquals(ConfigServerApplication.APPLICATION_INSTANCE_ID, + applicationInstance.applicationInstanceId()); + } +} |