diff options
author | Håkon Hallingstad <hakon@verizonmedia.com> | 2020-03-03 00:56:44 +0100 |
---|---|---|
committer | Håkon Hallingstad <hakon@verizonmedia.com> | 2020-03-03 00:56:44 +0100 |
commit | fb83b5123cb279a896f9198bbb6f4734d81b278d (patch) | |
tree | 34b318ad455a09be4a35cc1a54369dce48df165c /orchestrator | |
parent | a5dd3abdd90978a19cd3c69857c5bc487a1da057 (diff) |
Remove InstanceLookupService
The lower-level methods on ServiceMonitor has removed the need for InstanceLookupService.
Diffstat (limited to 'orchestrator')
14 files changed, 122 insertions, 191 deletions
diff --git a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/InstanceLookupService.java b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/InstanceLookupService.java deleted file mode 100644 index 2978b091548..00000000000 --- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/InstanceLookupService.java +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.orchestrator; - -import com.yahoo.vespa.applicationmodel.ApplicationInstance; -import com.yahoo.vespa.applicationmodel.ApplicationInstanceReference; -import com.yahoo.vespa.applicationmodel.HostName; - -import java.util.Optional; -import java.util.Set; - -/** - * @author oyving - */ -public interface InstanceLookupService { - - Optional<ApplicationInstance> findInstanceById(ApplicationInstanceReference applicationInstanceReference); - Optional<ApplicationInstance> findInstanceByHost(HostName hostName); - Set<ApplicationInstanceReference> knownInstances(); - - /** - * Returns an application instance that may not contain more services and clusters than - * those related to the host. - */ - Optional<ApplicationInstance> findInstancePossiblyNarrowedToHost(HostName hostname); -} diff --git a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorImpl.java b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorImpl.java index be1f83da094..d4b55e92271 100644 --- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorImpl.java +++ b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorImpl.java @@ -31,11 +31,12 @@ import com.yahoo.vespa.orchestrator.policy.HostedVespaClusterPolicy; import com.yahoo.vespa.orchestrator.policy.HostedVespaPolicy; import com.yahoo.vespa.orchestrator.policy.Policy; import com.yahoo.vespa.orchestrator.status.ApplicationInstanceStatus; +import com.yahoo.vespa.orchestrator.status.ApplicationLock; import com.yahoo.vespa.orchestrator.status.HostInfo; import com.yahoo.vespa.orchestrator.status.HostInfos; import com.yahoo.vespa.orchestrator.status.HostStatus; -import com.yahoo.vespa.orchestrator.status.ApplicationLock; import com.yahoo.vespa.orchestrator.status.StatusService; +import com.yahoo.vespa.service.monitor.ServiceMonitor; import java.io.IOException; import java.time.Clock; @@ -59,7 +60,7 @@ public class OrchestratorImpl implements Orchestrator { private final Policy policy; private final StatusService statusService; - private final InstanceLookupService instanceLookupService; + private final ServiceMonitor serviceMonitor; private final int serviceMonitorConvergenceLatencySeconds; private final ClusterControllerClientFactory clusterControllerClientFactory; private final Clock clock; @@ -70,7 +71,7 @@ public class OrchestratorImpl implements Orchestrator { public OrchestratorImpl(ClusterControllerClientFactory clusterControllerClientFactory, StatusService statusService, OrchestratorConfig orchestratorConfig, - InstanceLookupService instanceLookupService, + ServiceMonitor serviceMonitor, ConfigserverConfig configServerConfig, FlagSource flagSource) { @@ -79,7 +80,7 @@ public class OrchestratorImpl implements Orchestrator { new ApplicationApiFactory(configServerConfig.zookeeperserver().size())), clusterControllerClientFactory, statusService, - instanceLookupService, + serviceMonitor, orchestratorConfig.serviceMonitorConvergenceLatencySeconds(), Clock.systemUTC(), new ApplicationApiFactory(configServerConfig.zookeeperserver().size()), @@ -89,7 +90,7 @@ public class OrchestratorImpl implements Orchestrator { public OrchestratorImpl(Policy policy, ClusterControllerClientFactory clusterControllerClientFactory, StatusService statusService, - InstanceLookupService instanceLookupService, + ServiceMonitor serviceMonitor, int serviceMonitorConvergenceLatencySeconds, Clock clock, ApplicationApiFactory applicationApiFactory, @@ -99,7 +100,7 @@ public class OrchestratorImpl implements Orchestrator { this.clusterControllerClientFactory = clusterControllerClientFactory; this.statusService = statusService; this.serviceMonitorConvergenceLatencySeconds = serviceMonitorConvergenceLatencySeconds; - this.instanceLookupService = instanceLookupService; + this.serviceMonitor = serviceMonitor; this.clock = clock; this.applicationApiFactory = applicationApiFactory; this.retireWithPermanentlyDownFlag = Flags.RETIRE_WITH_PERMANENTLY_DOWN.bindTo(flagSource); @@ -107,8 +108,8 @@ public class OrchestratorImpl implements Orchestrator { @Override public Host getHost(HostName hostName) throws HostNameNotFoundException { - ApplicationInstance applicationInstance = instanceLookupService - .findInstancePossiblyNarrowedToHost(hostName) + ApplicationInstance applicationInstance = serviceMonitor + .getApplicationNarrowedTo(hostName) .orElseThrow(() -> new HostNameNotFoundException(hostName)); List<ServiceInstance> serviceInstances = applicationInstance @@ -129,8 +130,8 @@ public class OrchestratorImpl implements Orchestrator { @Override public Function<HostName, Optional<HostInfo>> getHostResolver() { - return hostName -> instanceLookupService - .findInstanceByHost(hostName) + return hostName -> serviceMonitor + .getApplication(hostName) .map(application -> statusService.getHostInfo(application.reference(), hostName)); } @@ -233,7 +234,7 @@ public class OrchestratorImpl implements Orchestrator { @Override public ApplicationInstanceStatus getApplicationInstanceStatus(ApplicationId appId) throws ApplicationIdNotFoundException { - ApplicationInstanceReference reference = OrchestratorUtil.toApplicationInstanceReference(appId, instanceLookupService); + ApplicationInstanceReference reference = OrchestratorUtil.toApplicationInstanceReference(appId, serviceMonitor); return statusService.getApplicationInstanceStatus(reference); } @@ -351,15 +352,15 @@ public class OrchestratorImpl implements Orchestrator { private void setApplicationStatus(ApplicationId appId, ApplicationInstanceStatus status) throws ApplicationStateChangeDeniedException, ApplicationIdNotFoundException{ OrchestratorContext context = OrchestratorContext.createContextForSingleAppOp(clock); - ApplicationInstanceReference appRef = OrchestratorUtil.toApplicationInstanceReference(appId, instanceLookupService); - try (ApplicationLock lock = statusService.lockApplication(context, appRef)) { + ApplicationInstanceReference reference = OrchestratorUtil.toApplicationInstanceReference(appId, serviceMonitor); + try (ApplicationLock lock = statusService.lockApplication(context, reference)) { // Short-circuit if already in wanted state if (status == lock.getApplicationInstanceStatus()) return; // Set content clusters for this application in maintenance on suspend if (status == ApplicationInstanceStatus.ALLOWED_TO_BE_DOWN) { - ApplicationInstance application = getApplicationInstance(appRef); + ApplicationInstance application = getApplicationInstance(reference); HostInfos hostInfosSnapshot = lock.getHostInfos(); @@ -416,12 +417,13 @@ public class OrchestratorImpl implements Orchestrator { } private ApplicationInstance getApplicationInstance(HostName hostName) throws HostNameNotFoundException{ - return instanceLookupService.findInstanceByHost(hostName).orElseThrow( + return serviceMonitor.getApplication(hostName).orElseThrow( () -> new HostNameNotFoundException(hostName)); } - private ApplicationInstance getApplicationInstance(ApplicationInstanceReference appRef) throws ApplicationIdNotFoundException { - return instanceLookupService.findInstanceById(appRef).orElseThrow(ApplicationIdNotFoundException::new); + private ApplicationInstance getApplicationInstance(ApplicationInstanceReference reference) + throws ApplicationIdNotFoundException { + return serviceMonitor.getApplication(reference).orElseThrow(ApplicationIdNotFoundException::new); } private static void sleep(long time, TimeUnit timeUnit) { diff --git a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorUtil.java b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorUtil.java index 5294a841412..40a45627f4d 100644 --- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorUtil.java +++ b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorUtil.java @@ -12,6 +12,7 @@ import com.yahoo.vespa.applicationmodel.HostName; import com.yahoo.vespa.applicationmodel.ServiceCluster; import com.yahoo.vespa.applicationmodel.ServiceInstance; import com.yahoo.vespa.applicationmodel.TenantId; +import com.yahoo.vespa.service.monitor.ServiceMonitor; import java.util.Collection; import java.util.List; @@ -84,26 +85,26 @@ public class OrchestratorUtil { return applicationInstanceReference.tenantId() + ":" + applicationInstanceReference.applicationInstanceId(); } - - public static ApplicationInstanceReference toApplicationInstanceReference(ApplicationId appId, - InstanceLookupService instanceLookupService) + public static ApplicationInstanceReference toApplicationInstanceReference( + ApplicationId applicationid, + ServiceMonitor serviceMonitor) throws ApplicationIdNotFoundException { - Set<ApplicationInstanceReference> appRefs = instanceLookupService.knownInstances(); - List<ApplicationInstanceReference> appRefList = appRefs.stream() - .filter(a -> OrchestratorUtil.toApplicationId(a).equals(appId)) + Set<ApplicationInstanceReference> references = serviceMonitor.getAllApplicationInstanceReferences(); + List<ApplicationInstanceReference> referencesWithId = references.stream() + .filter(a -> OrchestratorUtil.toApplicationId(a).equals(applicationid)) .collect(Collectors.toList()); - if (appRefList.size() > 1) { - String msg = String.format("ApplicationId '%s' was not unique but mapped to '%s'", appId, appRefList); + if (referencesWithId.size() > 1) { + String msg = String.format("ApplicationId '%s' was not unique but mapped to '%s'", applicationid, referencesWithId); throw new ApplicationIdNotFoundException(msg); } - if (appRefList.size() == 0) { + if (referencesWithId.size() == 0) { throw new ApplicationIdNotFoundException(); } - return appRefList.get(0); + return referencesWithId.get(0); } public static ApplicationId toApplicationId(ApplicationInstanceReference appRef) { diff --git a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/ServiceMonitorInstanceLookupService.java b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/ServiceMonitorInstanceLookupService.java deleted file mode 100644 index d7a630707b8..00000000000 --- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/ServiceMonitorInstanceLookupService.java +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.orchestrator; - -import com.google.inject.Inject; -import com.yahoo.vespa.applicationmodel.ApplicationInstance; -import com.yahoo.vespa.applicationmodel.ApplicationInstanceReference; -import com.yahoo.vespa.applicationmodel.HostName; -import com.yahoo.vespa.service.monitor.ServiceMonitor; - -import java.util.Optional; -import java.util.Set; - -/** - * Uses slobrok data (a.k.a. heartbeat) to implement {@link InstanceLookupService}. - * - * @author bakksjo - */ -public class ServiceMonitorInstanceLookupService implements InstanceLookupService { - - private final ServiceMonitor serviceMonitor; - - @Inject - public ServiceMonitorInstanceLookupService(ServiceMonitor serviceMonitor) { - this.serviceMonitor = serviceMonitor; - } - - @Override - public Optional<ApplicationInstance> findInstanceById(ApplicationInstanceReference applicationInstanceReference) { - return serviceMonitor.getApplication(applicationInstanceReference); - } - - @Override - public Optional<ApplicationInstance> findInstanceByHost(HostName hostname) { - return serviceMonitor.getApplication(hostname); - } - - @Override - public Set<ApplicationInstanceReference> knownInstances() { - return serviceMonitor.getAllApplicationInstanceReferences(); - } - - @Override - public Optional<ApplicationInstance> findInstancePossiblyNarrowedToHost(HostName hostname) { - return serviceMonitor.getApplicationNarrowedTo(hostname); - } -} diff --git a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/resources/InstanceResource.java b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/resources/InstanceResource.java index 2ade81ff0f5..1cf2a2a4965 100644 --- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/resources/InstanceResource.java +++ b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/resources/InstanceResource.java @@ -11,7 +11,6 @@ import com.yahoo.vespa.applicationmodel.ConfigId; import com.yahoo.vespa.applicationmodel.HostName; import com.yahoo.vespa.applicationmodel.ServiceStatusInfo; import com.yahoo.vespa.applicationmodel.ServiceType; -import com.yahoo.vespa.orchestrator.InstanceLookupService; import com.yahoo.vespa.orchestrator.OrchestratorUtil; import com.yahoo.vespa.orchestrator.restapi.wire.SlobrokEntryResponse; import com.yahoo.vespa.orchestrator.restapi.wire.WireHostInfo; @@ -20,6 +19,7 @@ import com.yahoo.vespa.orchestrator.status.HostInfos; import com.yahoo.vespa.orchestrator.status.StatusService; import com.yahoo.vespa.service.manager.MonitorManager; import com.yahoo.vespa.service.manager.UnionMonitorManager; +import com.yahoo.vespa.service.monitor.ServiceMonitor; import com.yahoo.vespa.service.monitor.SlobrokApi; import javax.inject.Inject; @@ -54,14 +54,14 @@ public class InstanceResource { private final StatusService statusService; private final SlobrokApi slobrokApi; private final MonitorManager rootManager; - private final InstanceLookupService instanceLookupService; + private final ServiceMonitor serviceMonitor; @Inject - public InstanceResource(@Component InstanceLookupService instanceLookupService, + public InstanceResource(@Component ServiceMonitor serviceMonitor, @Component StatusService statusService, @Component SlobrokApi slobrokApi, @Component UnionMonitorManager rootManager) { - this.instanceLookupService = instanceLookupService; + this.serviceMonitor = serviceMonitor; this.statusService = statusService; this.slobrokApi = slobrokApi; this.rootManager = rootManager; @@ -70,7 +70,7 @@ public class InstanceResource { @GET @Produces(MediaType.APPLICATION_JSON) public List<ApplicationInstanceReference> getAllInstances() { - return instanceLookupService.knownInstances().stream().sorted().collect(Collectors.toList()); + return serviceMonitor.getAllApplicationInstanceReferences().stream().sorted().collect(Collectors.toList()); } @GET @@ -80,7 +80,7 @@ public class InstanceResource { ApplicationInstanceReference instanceId = parseInstanceId(instanceIdString); ApplicationInstance applicationInstance - = instanceLookupService.findInstanceById(instanceId) + = serviceMonitor.getApplication(instanceId) .orElseThrow(() -> new WebApplicationException(Response.status(Response.Status.NOT_FOUND).build())); HostInfos hostInfos = statusService.getHostInfosByApplicationResolver().apply(applicationInstance.reference()); diff --git a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/status/ApplicationLock.java b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/status/ApplicationLock.java index 4f6c0547ed6..8883f78b693 100644 --- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/status/ApplicationLock.java +++ b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/status/ApplicationLock.java @@ -29,7 +29,7 @@ public interface ApplicationLock extends AutoCloseable { /** Sets the orchestration status for the application instance. */ void setApplicationInstanceStatus(ApplicationInstanceStatus applicationInstanceStatus); - /** implNote: Must not throw an exception. */ + /** WARNING: Must not throw an exception. */ @Override void close(); diff --git a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/status/ZkApplicationLock.java b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/status/ZkApplicationLock.java index 08cbe1f45d7..479dc5062a8 100644 --- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/status/ZkApplicationLock.java +++ b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/status/ZkApplicationLock.java @@ -10,6 +10,11 @@ import org.apache.zookeeper.KeeperException; import java.util.logging.Logger; +/** + * ZooKeeper implementation of {@link ApplicationLock}. + * + * @author hakonhall + */ class ZkApplicationLock implements ApplicationLock { private static final Logger log = Logger.getLogger(ZkApplicationLock.class.getName()); diff --git a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/DummyInstanceLookupService.java b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/DummyServiceMonitor.java index 7a62a29dff2..09fb6296866 100644 --- a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/DummyInstanceLookupService.java +++ b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/DummyServiceMonitor.java @@ -15,8 +15,12 @@ import com.yahoo.vespa.applicationmodel.ServiceType; import com.yahoo.vespa.applicationmodel.TenantId; import com.yahoo.vespa.orchestrator.model.NodeGroup; import com.yahoo.vespa.orchestrator.model.VespaModelUtil; +import com.yahoo.vespa.service.monitor.ServiceModel; +import com.yahoo.vespa.service.monitor.ServiceMonitor; import java.util.HashSet; +import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @@ -27,7 +31,7 @@ import java.util.stream.Collectors; * @author oyving * @author smorgrav */ -public class DummyInstanceLookupService implements InstanceLookupService { +public class DummyServiceMonitor implements ServiceMonitor { public static final HostName TEST1_HOST_NAME = new HostName("test1.hostname.tld"); public static final HostName TEST3_HOST_NAME = new HostName("test3.hostname.tld"); @@ -121,26 +125,27 @@ public class DummyInstanceLookupService implements InstanceLookupService { } // A node group is tied to an application, so we need to define them after we have populated the above applications. - public final static NodeGroup TEST1_NODE_GROUP = new NodeGroup(new DummyInstanceLookupService().findInstanceByHost(TEST1_HOST_NAME).get(), TEST1_HOST_NAME); - public final static NodeGroup TEST3_NODE_GROUP = new NodeGroup(new DummyInstanceLookupService().findInstanceByHost(TEST3_HOST_NAME).get(), TEST3_HOST_NAME); - public final static NodeGroup TEST6_NODE_GROUP = new NodeGroup(new DummyInstanceLookupService().findInstanceByHost(TEST6_HOST_NAME).get(), TEST6_HOST_NAME); + public final static NodeGroup TEST1_NODE_GROUP = new NodeGroup(new DummyServiceMonitor().getApplication(TEST1_HOST_NAME).get(), TEST1_HOST_NAME); + public final static NodeGroup TEST3_NODE_GROUP = new NodeGroup(new DummyServiceMonitor().getApplication(TEST3_HOST_NAME).get(), TEST3_HOST_NAME); + public final static NodeGroup TEST6_NODE_GROUP = new NodeGroup(new DummyServiceMonitor().getApplication(TEST6_HOST_NAME).get(), TEST6_HOST_NAME); + @Override + public ServiceModel getServiceModelSnapshot() { + throw new UnsupportedOperationException(); + } @Override - public Optional<ApplicationInstance> findInstanceById( - final ApplicationInstanceReference applicationInstanceReference) { - for (ApplicationInstance app : apps) { - if (app.reference().equals(applicationInstanceReference)) return Optional.of(app); - } - return Optional.empty(); + public Set<ApplicationInstanceReference> getAllApplicationInstanceReferences() { + return apps.stream().map(a -> + new ApplicationInstanceReference(a.tenantId(),a.applicationInstanceId())).collect(Collectors.toSet()); } @Override - public Optional<ApplicationInstance> findInstanceByHost(HostName hostName) { + public Optional<ApplicationInstance> getApplication(HostName hostname) { for (ApplicationInstance app : apps) { for (ServiceCluster cluster : app.serviceClusters()) { for (ServiceInstance service : cluster.serviceInstances()) { - if (hostName.equals(service.hostName())) return Optional.of(app); + if (hostname.equals(service.hostName())) return Optional.of(app); } } } @@ -148,15 +153,16 @@ public class DummyInstanceLookupService implements InstanceLookupService { } @Override - public Set<ApplicationInstanceReference> knownInstances() { - return apps.stream().map(a -> - new ApplicationInstanceReference(a.tenantId(),a.applicationInstanceId())).collect(Collectors.toSet()); - + public Optional<ApplicationInstance> getApplication(ApplicationInstanceReference reference) { + for (ApplicationInstance app : apps) { + if (app.reference().equals(reference)) return Optional.of(app); + } + return Optional.empty(); } @Override - public Optional<ApplicationInstance> findInstancePossiblyNarrowedToHost(HostName hostname) { - return findInstanceByHost(hostname); + public Map<HostName, List<ServiceInstance>> getServicesByHostname() { + throw new UnsupportedOperationException(); } public static Set<HostName> getContentHosts(ApplicationInstanceReference appRef) { diff --git a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/OrchestratorImplTest.java b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/OrchestratorImplTest.java index f7c5ab15927..9bcbdba074e 100644 --- a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/OrchestratorImplTest.java +++ b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/OrchestratorImplTest.java @@ -26,12 +26,13 @@ import com.yahoo.vespa.orchestrator.policy.BatchHostStateChangeDeniedException; import com.yahoo.vespa.orchestrator.policy.HostStateChangeDeniedException; import com.yahoo.vespa.orchestrator.policy.HostedVespaClusterPolicy; import com.yahoo.vespa.orchestrator.policy.HostedVespaPolicy; -import com.yahoo.vespa.orchestrator.status.HostStatus; import com.yahoo.vespa.orchestrator.status.ApplicationLock; +import com.yahoo.vespa.orchestrator.status.HostStatus; import com.yahoo.vespa.orchestrator.status.StatusService; import com.yahoo.vespa.orchestrator.status.ZkStatusService; import com.yahoo.vespa.service.model.ServiceModelCache; import com.yahoo.vespa.service.monitor.ServiceModel; +import com.yahoo.vespa.service.monitor.ServiceMonitor; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; @@ -86,17 +87,17 @@ public class OrchestratorImplTest { @Before public void setUp() { // Extract applications and hosts from dummy instance lookup service - Iterator<ApplicationInstance> iterator = DummyInstanceLookupService.getApplications().iterator(); + Iterator<ApplicationInstance> iterator = DummyServiceMonitor.getApplications().iterator(); ApplicationInstanceReference app1_ref = iterator.next().reference(); app1 = OrchestratorUtil.toApplicationId(app1_ref); - app1_host1 = DummyInstanceLookupService.getContentHosts(app1_ref).iterator().next(); + app1_host1 = DummyServiceMonitor.getContentHosts(app1_ref).iterator().next(); app2 = OrchestratorUtil.toApplicationId(iterator.next().reference()); clustercontroller = new ClusterControllerClientFactoryMock(); orchestrator = new OrchestratorImpl(new HostedVespaPolicy(new HostedVespaClusterPolicy(), clustercontroller, applicationApiFactory), clustercontroller, new ZkStatusService(new MockCurator(), mock(Metric.class), new TestTimer()), - new DummyInstanceLookupService(), + new DummyServiceMonitor(), 0, new ManualClock(), applicationApiFactory, @@ -242,8 +243,8 @@ public class OrchestratorImplTest { @Test public void applicationReferenceHasTenantAndAppInstance() { - InstanceLookupService service = new DummyInstanceLookupService(); - String applicationInstanceId = service.findInstanceByHost(DummyInstanceLookupService.TEST1_HOST_NAME).get() + ServiceMonitor service = new DummyServiceMonitor(); + String applicationInstanceId = service.getApplication(DummyServiceMonitor.TEST1_HOST_NAME).get() .reference().toString(); assertEquals("test-tenant-id:application:prod:utopia-1:instance", applicationInstanceId); } @@ -265,21 +266,21 @@ public class OrchestratorImplTest { orchestrator.suspendAll( new HostName("parentHostname"), Arrays.asList( - DummyInstanceLookupService.TEST1_HOST_NAME, - DummyInstanceLookupService.TEST3_HOST_NAME, - DummyInstanceLookupService.TEST6_HOST_NAME)); + DummyServiceMonitor.TEST1_HOST_NAME, + DummyServiceMonitor.TEST3_HOST_NAME, + DummyServiceMonitor.TEST6_HOST_NAME)); // As of 2016-06-07 the order of the node groups are as follows: // TEST3: mediasearch:imagesearch:default // TEST6: tenant-id-3:application-instance-3:default // TEST1: test-tenant-id:application:instance InOrder order = inOrder(orchestrator); - verifySuspendGroup(order, orchestrator, DummyInstanceLookupService.TEST3_NODE_GROUP, true); - verifySuspendGroup(order, orchestrator, DummyInstanceLookupService.TEST6_NODE_GROUP, true); - verifySuspendGroup(order, orchestrator, DummyInstanceLookupService.TEST1_NODE_GROUP, true); - verifySuspendGroup(order, orchestrator, DummyInstanceLookupService.TEST3_NODE_GROUP, false); - verifySuspendGroup(order, orchestrator, DummyInstanceLookupService.TEST6_NODE_GROUP, false); - verifySuspendGroup(order, orchestrator, DummyInstanceLookupService.TEST1_NODE_GROUP, false); + verifySuspendGroup(order, orchestrator, DummyServiceMonitor.TEST3_NODE_GROUP, true); + verifySuspendGroup(order, orchestrator, DummyServiceMonitor.TEST6_NODE_GROUP, true); + verifySuspendGroup(order, orchestrator, DummyServiceMonitor.TEST1_NODE_GROUP, true); + verifySuspendGroup(order, orchestrator, DummyServiceMonitor.TEST3_NODE_GROUP, false); + verifySuspendGroup(order, orchestrator, DummyServiceMonitor.TEST6_NODE_GROUP, false); + verifySuspendGroup(order, orchestrator, DummyServiceMonitor.TEST1_NODE_GROUP, false); order.verifyNoMoreInteractions(); } @@ -296,18 +297,18 @@ public class OrchestratorImplTest { OrchestratorImpl orchestrator = spy(this.orchestrator); Throwable supensionFailure = new HostStateChangeDeniedException( - DummyInstanceLookupService.TEST6_HOST_NAME, + DummyServiceMonitor.TEST6_HOST_NAME, "some-constraint", "error message"); - doThrow(supensionFailure).when(orchestrator).suspendGroup(any(), eq(DummyInstanceLookupService.TEST6_NODE_GROUP)); + doThrow(supensionFailure).when(orchestrator).suspendGroup(any(), eq(DummyServiceMonitor.TEST6_NODE_GROUP)); try { orchestrator.suspendAll( new HostName("parentHostname"), Arrays.asList( - DummyInstanceLookupService.TEST1_HOST_NAME, - DummyInstanceLookupService.TEST3_HOST_NAME, - DummyInstanceLookupService.TEST6_HOST_NAME)); + DummyServiceMonitor.TEST1_HOST_NAME, + DummyServiceMonitor.TEST3_HOST_NAME, + DummyServiceMonitor.TEST6_HOST_NAME)); fail(); } catch (BatchHostStateChangeDeniedException e) { assertEquals("Failed to suspend NodeGroup{application=tenant-id-3:application-instance-3:prod:utopia-1:default, " + @@ -318,8 +319,8 @@ public class OrchestratorImplTest { } InOrder order = inOrder(orchestrator); - order.verify(orchestrator).suspendGroup(any(), eq(DummyInstanceLookupService.TEST3_NODE_GROUP)); - order.verify(orchestrator).suspendGroup(any(), eq(DummyInstanceLookupService.TEST6_NODE_GROUP)); + order.verify(orchestrator).suspendGroup(any(), eq(DummyServiceMonitor.TEST3_NODE_GROUP)); + order.verify(orchestrator).suspendGroup(any(), eq(DummyServiceMonitor.TEST6_NODE_GROUP)); order.verifyNoMoreInteractions(); } @@ -331,14 +332,14 @@ public class OrchestratorImplTest { var policy = mock(HostedVespaPolicy.class); var zookeeperStatusService = mock(ZkStatusService.class); - var instanceLookupService = mock(InstanceLookupService.class); + var serviceMonitor = mock(ServiceMonitor.class); var applicationInstance = mock(ApplicationInstance.class); var clusterControllerClientFactory = mock(ClusterControllerClientFactory.class); var clock = new ManualClock(); var applicationApiFactory = mock(ApplicationApiFactory.class); var lock = mock(ApplicationLock.class); - when(instanceLookupService.findInstanceByHost(any())).thenReturn(Optional.of(applicationInstance)); + when(serviceMonitor.getApplication(any(HostName.class))).thenReturn(Optional.of(applicationInstance)); when(applicationInstance.reference()).thenReturn(applicationInstanceReference); when(zookeeperStatusService.lockApplication(any(), any())).thenReturn(lock); when(lock.getApplicationInstanceStatus()).thenReturn(NO_REMARKS); @@ -347,7 +348,7 @@ public class OrchestratorImplTest { policy, clusterControllerClientFactory, zookeeperStatusService, - instanceLookupService, + serviceMonitor, 20, clock, applicationApiFactory, @@ -370,7 +371,7 @@ public class OrchestratorImplTest { verify(applicationApiFactory, times(2)).create(any(), any(), any()); verify(policy, times(2)).grantSuspensionRequest(any(), any()); - verify(instanceLookupService, atLeastOnce()).findInstanceByHost(any()); + verify(serviceMonitor, atLeastOnce()).getApplication(any(HostName.class)); verify(lock, times(2)).getApplicationInstanceStatus(); // Each zookeeperStatusService that is created, is closed. @@ -382,7 +383,7 @@ public class OrchestratorImplTest { clusterControllerClientFactory, zookeeperStatusService, lock, - instanceLookupService, + serviceMonitor, applicationApiFactory); } @@ -415,13 +416,14 @@ public class OrchestratorImplTest { hostName, ServiceStatus.NOT_CHECKED))))); - InstanceLookupService lookupService = new ServiceMonitorInstanceLookupService( - new ServiceModelCache(() -> new ServiceModel(Map.of(reference, applicationInstance)), new TestTimer())); + ServiceMonitor serviceMonitor = new ServiceModelCache( + () -> new ServiceModel(Map.of(reference, applicationInstance)), + new TestTimer()); orchestrator = new OrchestratorImpl(new HostedVespaPolicy(new HostedVespaClusterPolicy(), clusterControllerClientFactory, applicationApiFactory), clusterControllerClientFactory, statusService, - lookupService, + serviceMonitor, 0, new ManualClock(), applicationApiFactory, @@ -438,8 +440,8 @@ public class OrchestratorImplTest { } private boolean isInMaintenance(ApplicationId appId, HostName hostName) throws ApplicationIdNotFoundException { - for (ApplicationInstance app : DummyInstanceLookupService.getApplications()) { - if (app.reference().equals(OrchestratorUtil.toApplicationInstanceReference(appId, new DummyInstanceLookupService()))) { + for (ApplicationInstance app : DummyServiceMonitor.getApplications()) { + if (app.reference().equals(OrchestratorUtil.toApplicationInstanceReference(appId, new DummyServiceMonitor()))) { return clustercontroller.isInMaintenance(app, hostName); } } diff --git a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/OrchestratorUtilTest.java b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/OrchestratorUtilTest.java index 230048f505d..76fbb5c9fe2 100644 --- a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/OrchestratorUtilTest.java +++ b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/OrchestratorUtilTest.java @@ -39,14 +39,14 @@ public class OrchestratorUtilTest { public void applicationid_conversion_are_symmetric() throws Exception { // From appId to appRef and back - ApplicationInstanceReference appRef = OrchestratorUtil.toApplicationInstanceReference(APPID_1, new DummyInstanceLookupService()); + ApplicationInstanceReference appRef = OrchestratorUtil.toApplicationInstanceReference(APPID_1, new DummyServiceMonitor()); ApplicationId appIdRoundTrip = OrchestratorUtil.toApplicationId(appRef); Assert.assertEquals(APPID_1, appIdRoundTrip); // From appRef to appId and back ApplicationId appId = OrchestratorUtil.toApplicationId(APPREF_1); - ApplicationInstanceReference appRefRoundTrip = OrchestratorUtil.toApplicationInstanceReference(appId, new DummyInstanceLookupService()); + ApplicationInstanceReference appRefRoundTrip = OrchestratorUtil.toApplicationInstanceReference(appId, new DummyServiceMonitor()); Assert.assertEquals(APPREF_1, appRefRoundTrip); } diff --git a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/controller/ClusterControllerClientFactoryMock.java b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/controller/ClusterControllerClientFactoryMock.java index 5c5ee7d2260..502e42481aa 100644 --- a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/controller/ClusterControllerClientFactoryMock.java +++ b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/controller/ClusterControllerClientFactoryMock.java @@ -4,7 +4,7 @@ package com.yahoo.vespa.orchestrator.controller; import com.yahoo.vespa.applicationmodel.ApplicationInstance; import com.yahoo.vespa.applicationmodel.ClusterId; import com.yahoo.vespa.applicationmodel.HostName; -import com.yahoo.vespa.orchestrator.DummyInstanceLookupService; +import com.yahoo.vespa.orchestrator.DummyServiceMonitor; import com.yahoo.vespa.orchestrator.OrchestratorContext; import com.yahoo.vespa.orchestrator.model.VespaModelUtil; @@ -37,8 +37,8 @@ public class ClusterControllerClientFactoryMock implements ClusterControllerClie } public void setAllDummyNodesAsUp() { - for (ApplicationInstance app : DummyInstanceLookupService.getApplications()) { - Set<HostName> hosts = DummyInstanceLookupService.getContentHosts(app.reference()); + for (ApplicationInstance app : DummyServiceMonitor.getApplications()) { + Set<HostName> hosts = DummyServiceMonitor.getContentHosts(app.reference()); for (HostName host : hosts) { ClusterId clusterName = VespaModelUtil.getContentClusterName(app, host); int storageNodeIndex = VespaModelUtil.getStorageNodeIndex(app, host); diff --git a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/model/ModelTestUtils.java b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/model/ModelTestUtils.java index 24a85bfa244..3d0746e5a36 100644 --- a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/model/ModelTestUtils.java +++ b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/model/ModelTestUtils.java @@ -21,15 +21,14 @@ import com.yahoo.vespa.orchestrator.OrchestrationException; import com.yahoo.vespa.orchestrator.Orchestrator; import com.yahoo.vespa.orchestrator.OrchestratorContext; import com.yahoo.vespa.orchestrator.OrchestratorImpl; -import com.yahoo.vespa.orchestrator.ServiceMonitorInstanceLookupService; import com.yahoo.vespa.orchestrator.controller.ClusterControllerClientFactory; import com.yahoo.vespa.orchestrator.controller.ClusterControllerClientFactoryMock; import com.yahoo.vespa.orchestrator.policy.HostedVespaClusterPolicy; import com.yahoo.vespa.orchestrator.policy.HostedVespaPolicy; +import com.yahoo.vespa.orchestrator.status.ApplicationLock; import com.yahoo.vespa.orchestrator.status.HostInfo; import com.yahoo.vespa.orchestrator.status.HostInfos; import com.yahoo.vespa.orchestrator.status.HostStatus; -import com.yahoo.vespa.orchestrator.status.ApplicationLock; import com.yahoo.vespa.orchestrator.status.StatusService; import com.yahoo.vespa.orchestrator.status.ZkStatusService; import com.yahoo.vespa.service.model.ServiceModelCache; @@ -65,7 +64,7 @@ class ModelTestUtils { private final Orchestrator orchestrator = new OrchestratorImpl(new HostedVespaPolicy(new HostedVespaClusterPolicy(), clusterControllerClientFactory, applicationApiFactory()), clusterControllerClientFactory, statusService, - new ServiceMonitorInstanceLookupService(serviceMonitor), + serviceMonitor, 0, new ManualClock(), applicationApiFactory(), diff --git a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/resources/ApplicationSuspensionResourceTest.java b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/resources/ApplicationSuspensionResourceTest.java index cedddf19d9e..1fff8f976bb 100644 --- a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/resources/ApplicationSuspensionResourceTest.java +++ b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/resources/ApplicationSuspensionResourceTest.java @@ -162,7 +162,7 @@ public class ApplicationSuspensionResourceTest { " <component id=\"com.yahoo.vespa.flags.InMemoryFlagSource\" bundle=\"flags\" />\n" + " <component id=\"com.yahoo.vespa.curator.mock.MockCurator\" bundle=\"zkfacade\" />\n" + " <component id=\"com.yahoo.vespa.orchestrator.status.ZkStatusService\" bundle=\"orchestrator\" />\n" + - " <component id=\"com.yahoo.vespa.orchestrator.DummyInstanceLookupService\" bundle=\"orchestrator\" />\n" + + " <component id=\"com.yahoo.vespa.orchestrator.DummyServiceMonitor\" bundle=\"orchestrator\" />\n" + " <component id=\"com.yahoo.vespa.orchestrator.OrchestratorImpl\" bundle=\"orchestrator\" />\n" + " <component id=\"com.yahoo.vespa.orchestrator.controller.ClusterControllerClientFactoryMock\" bundle=\"orchestrator\" />\n" + "\n" + diff --git a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/resources/HostResourceTest.java b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/resources/HostResourceTest.java index 9133a3bbf2c..b620b0798be 100644 --- a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/resources/HostResourceTest.java +++ b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/resources/HostResourceTest.java @@ -21,7 +21,6 @@ import com.yahoo.vespa.orchestrator.BatchHostNameNotFoundException; import com.yahoo.vespa.orchestrator.BatchInternalErrorException; import com.yahoo.vespa.orchestrator.Host; import com.yahoo.vespa.orchestrator.HostNameNotFoundException; -import com.yahoo.vespa.orchestrator.InstanceLookupService; import com.yahoo.vespa.orchestrator.OrchestrationException; import com.yahoo.vespa.orchestrator.Orchestrator; import com.yahoo.vespa.orchestrator.OrchestratorContext; @@ -37,11 +36,13 @@ import com.yahoo.vespa.orchestrator.restapi.wire.GetHostResponse; import com.yahoo.vespa.orchestrator.restapi.wire.PatchHostRequest; import com.yahoo.vespa.orchestrator.restapi.wire.PatchHostResponse; import com.yahoo.vespa.orchestrator.restapi.wire.UpdateHostResponse; +import com.yahoo.vespa.orchestrator.status.ApplicationLock; import com.yahoo.vespa.orchestrator.status.HostInfo; import com.yahoo.vespa.orchestrator.status.HostStatus; -import com.yahoo.vespa.orchestrator.status.ApplicationLock; import com.yahoo.vespa.orchestrator.status.StatusService; import com.yahoo.vespa.orchestrator.status.ZkStatusService; +import com.yahoo.vespa.service.monitor.ServiceModel; +import com.yahoo.vespa.service.monitor.ServiceMonitor; import org.junit.Before; import org.junit.Test; @@ -56,8 +57,8 @@ import java.time.Instant; import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.Optional; -import java.util.Set; import static com.yahoo.vespa.orchestrator.TestUtil.makeServiceClusterSet; import static org.junit.Assert.assertEquals; @@ -82,9 +83,9 @@ public class HostResourceTest { new MockCurator(), mock(Metric.class), new TestTimer()); private static final ApplicationApiFactory applicationApiFactory = new ApplicationApiFactory(3); - private static final InstanceLookupService mockInstanceLookupService = mock(InstanceLookupService.class); + private static final ServiceMonitor serviceMonitor = mock(ServiceMonitor.class); static { - when(mockInstanceLookupService.findInstanceByHost(any())) + when(serviceMonitor.getApplication(any(HostName.class))) .thenReturn(Optional.of( new ApplicationInstance( TENANT_ID, @@ -94,26 +95,12 @@ public class HostResourceTest { private final InMemoryFlagSource flagSource = new InMemoryFlagSource(); - private static final InstanceLookupService alwaysEmptyInstanceLookUpService = new InstanceLookupService() { - @Override - public Optional<ApplicationInstance> findInstanceById( - final ApplicationInstanceReference applicationInstanceReference) { - return Optional.empty(); - } - - @Override - public Optional<ApplicationInstance> findInstanceByHost(final HostName hostName) { - return Optional.empty(); - } - - @Override - public Set<ApplicationInstanceReference> knownInstances() { - return Collections.emptySet(); - } + private static final ServiceMonitor alwaysEmptyServiceMonitor = new ServiceMonitor() { + private final ServiceModel emptyServiceModel = new ServiceModel(Map.of()); @Override - public Optional<ApplicationInstance> findInstancePossiblyNarrowedToHost(HostName hostname) { - return Optional.empty(); + public ServiceModel getServiceModelSnapshot() { + return emptyServiceModel; } }; @@ -141,7 +128,7 @@ public class HostResourceTest { private final OrchestratorImpl alwaysAllowOrchestrator = new OrchestratorImpl( new AlwaysAllowPolicy(), new ClusterControllerClientFactoryMock(), - EVERY_HOST_IS_UP_HOST_STATUS_SERVICE, mockInstanceLookupService, + EVERY_HOST_IS_UP_HOST_STATUS_SERVICE, serviceMonitor, SERVICE_MONITOR_CONVERGENCE_LATENCY_SECONDS, clock, applicationApiFactory, @@ -150,7 +137,7 @@ public class HostResourceTest { private final OrchestratorImpl hostNotFoundOrchestrator = new OrchestratorImpl( new AlwaysAllowPolicy(), new ClusterControllerClientFactoryMock(), - EVERY_HOST_IS_UP_HOST_STATUS_SERVICE, alwaysEmptyInstanceLookUpService, + EVERY_HOST_IS_UP_HOST_STATUS_SERVICE, alwaysEmptyServiceMonitor, SERVICE_MONITOR_CONVERGENCE_LATENCY_SECONDS, clock, applicationApiFactory, @@ -253,7 +240,7 @@ public class HostResourceTest { final OrchestratorImpl alwaysRejectResolver = new OrchestratorImpl( new AlwaysFailPolicy(), new ClusterControllerClientFactoryMock(), - EVERY_HOST_IS_UP_HOST_STATUS_SERVICE,mockInstanceLookupService, + EVERY_HOST_IS_UP_HOST_STATUS_SERVICE, serviceMonitor, SERVICE_MONITOR_CONVERGENCE_LATENCY_SECONDS, clock, applicationApiFactory, @@ -274,7 +261,7 @@ public class HostResourceTest { new AlwaysFailPolicy(), new ClusterControllerClientFactoryMock(), EVERY_HOST_IS_UP_HOST_STATUS_SERVICE, - mockInstanceLookupService, + serviceMonitor, SERVICE_MONITOR_CONVERGENCE_LATENCY_SECONDS, clock, applicationApiFactory, |