diff options
13 files changed, 34 insertions, 41 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/ServiceMonitorStub.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/ServiceMonitorStub.java index e0b8fcc5feb..8c57027d0a4 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/ServiceMonitorStub.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/ServiceMonitorStub.java @@ -3,6 +3,7 @@ package com.yahoo.vespa.hosted.provision.testutils; import com.yahoo.component.annotation.Inject; import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.Zone; import com.yahoo.vespa.applicationmodel.ApplicationInstance; import com.yahoo.vespa.applicationmodel.ApplicationInstanceId; import com.yahoo.vespa.applicationmodel.ApplicationInstanceReference; @@ -62,7 +63,7 @@ public class ServiceMonitorStub implements ServiceMonitor { @Override public ServiceModel getServiceModelSnapshot() { - return new ServiceModel(getAllApplicationInstances()); + return new ServiceModel(getAllApplicationInstances(), Zone.defaultZone()); } private Map<ApplicationInstanceReference, ApplicationInstance> getAllApplicationInstances() { 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 49fab7522ba..99c2fa11825 100644 --- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorImpl.java +++ b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorImpl.java @@ -380,7 +380,7 @@ public class OrchestratorImpl implements Orchestrator { OrchestratorContext context = OrchestratorContext.createContextForSingleAppOp(clock); ApplicationInstanceReference reference = OrchestratorUtil.toApplicationInstanceReference(appId, serviceMonitor); - ApplicationInstance application = serviceMonitor.getApplication(reference) + ApplicationInstance application = serviceMonitor.getApplication(appId) .orElseThrow(ApplicationIdNotFoundException::new); try (ApplicationLock lock = statusService.lockApplication(context, reference)) { @@ -412,7 +412,7 @@ public class OrchestratorImpl implements Orchestrator { @Override public boolean isQuiescent(ApplicationId id) { try { - ApplicationInstance application = serviceMonitor.getApplication(OrchestratorUtil.toApplicationInstanceReference(id, serviceMonitor)) + ApplicationInstance application = serviceMonitor.getApplication(id) .orElseThrow(ApplicationIdNotFoundException::new); List<ServiceCluster> contentClusters = application.serviceClusters().stream() 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 3093a2a9828..c232cd95a2f 100644 --- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorUtil.java +++ b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorUtil.java @@ -14,13 +14,10 @@ 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; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.util.stream.Collectors; -import java.util.stream.Stream; import static java.util.stream.Collectors.toSet; @@ -91,7 +88,6 @@ public class OrchestratorUtil { } public static ApplicationId toApplicationId(ApplicationInstanceReference appRef) { - String appNameStr = appRef.asString(); String[] appNameParts = appNameStr.split(":"); @@ -99,8 +95,8 @@ public class OrchestratorUtil { // Assume here that first two are tenant and application name. if (appNameParts.length == 2) { return ApplicationId.from(TenantName.from(appNameParts[0]), - ApplicationName.from(appNameParts[1]), - InstanceName.defaultName()); + ApplicationName.from(appNameParts[1]), + InstanceName.defaultName()); } // Other normal application should have 5 parts. @@ -109,8 +105,8 @@ public class OrchestratorUtil { } return ApplicationId.from(TenantName.from(appNameParts[0]), - ApplicationName.from(appNameParts[1]), - InstanceName.from(appNameParts[4])); + ApplicationName.from(appNameParts[1]), + InstanceName.from(appNameParts[4])); } } diff --git a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/resources/InstanceRequestHandler.java b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/resources/InstanceRequestHandler.java index 0964a3f7dd5..67899849def 100644 --- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/resources/InstanceRequestHandler.java +++ b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/resources/InstanceRequestHandler.java @@ -98,7 +98,7 @@ public class InstanceRequestHandler extends RestApiRequestHandler<InstanceReques ApplicationInstanceReference instanceId = parseInstanceId(instanceIdString); ApplicationInstance applicationInstance - = serviceMonitor.getApplication(instanceId) + = serviceMonitor.getApplication(OrchestratorUtil.toApplicationId(instanceId)) .orElseThrow(RestApiException.NotFound::new); HostInfos hostInfos = statusService.getHostInfosByApplicationResolver().apply(applicationInstance.reference()); diff --git a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/DummyServiceMonitor.java b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/DummyServiceMonitor.java index 853dc17a3fc..689bc32ca6a 100644 --- a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/DummyServiceMonitor.java +++ b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/DummyServiceMonitor.java @@ -153,14 +153,6 @@ public class DummyServiceMonitor implements ServiceMonitor, AntiServiceMonitor { } @Override - public Optional<ApplicationInstance> getApplication(ApplicationInstanceReference reference) { - for (ApplicationInstance app : apps) { - if (app.reference().equals(reference)) return Optional.of(app); - } - return Optional.empty(); - } - - @Override public CriticalRegion disallowDuperModelLockAcquisition(String regionDescription) { return () -> {}; } 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 70a8381c9ac..b82ea245261 100644 --- a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/OrchestratorImplTest.java +++ b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/OrchestratorImplTest.java @@ -442,7 +442,7 @@ public class OrchestratorImplTest { ccHost, ServiceStatus.UP))))); - ServiceMonitor serviceMonitor = () -> new ServiceModel(Map.of(reference, applicationInstance)); + ServiceMonitor serviceMonitor = () -> new ServiceModel(Map.of(reference, applicationInstance), zone); ClusterControllerClientFactory clusterControllerClientFactory = mock(ClusterControllerClientFactory.class); ClusterControllerClient fooClient = mock(ClusterControllerClient.class); @@ -508,7 +508,7 @@ public class OrchestratorImplTest { hostName, ServiceStatus.NOT_CHECKED))))); - ServiceMonitor serviceMonitor = () -> new ServiceModel(Map.of(reference, applicationInstance)); + ServiceMonitor serviceMonitor = () -> new ServiceModel(Map.of(reference, applicationInstance), zone); orchestrator = new OrchestratorImpl(new HostedVespaPolicy(new HostedVespaClusterPolicy(flagSource, zone), clusterControllerClientFactory, 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 f2e2972ae9f..d93a8353fa3 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 @@ -74,7 +74,7 @@ class ModelTestUtils { private final Map<ApplicationInstanceReference, ApplicationInstance> applications = new HashMap<>(); private final ClusterControllerClientFactory clusterControllerClientFactory = new ClusterControllerClientFactoryMock(); private final Map<HostName, HostStatus> hostStatusMap = new HashMap<>(); - private final ServiceMonitor serviceMonitor = () -> new ServiceModel(applications); + private final ServiceMonitor serviceMonitor = () -> new ServiceModel(applications, Zone.defaultZone()); private final StatusService statusService = new ZkStatusService( new MockCurator(), mock(Metric.class), diff --git a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/resources/HostRequestHandlerTest.java b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/resources/HostRequestHandlerTest.java index b9dab4b3aeb..f3f2bb18400 100644 --- a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/resources/HostRequestHandlerTest.java +++ b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/resources/HostRequestHandlerTest.java @@ -2,6 +2,7 @@ package com.yahoo.vespa.orchestrator.resources; import com.yahoo.concurrent.UncheckedTimeoutException; +import com.yahoo.config.provision.Zone; import com.yahoo.container.jdisc.HttpRequestBuilder; import com.yahoo.container.jdisc.HttpResponse; import com.yahoo.jdisc.Metric; @@ -91,7 +92,7 @@ class HostRequestHandlerTest { } private static final ServiceMonitor alwaysEmptyServiceMonitor = new ServiceMonitor() { - private final ServiceModel emptyServiceModel = new ServiceModel(Map.of()); + private final ServiceModel emptyServiceModel = new ServiceModel(Map.of(), Zone.defaultZone()); @Override public ServiceModel getServiceModelSnapshot() { diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/model/ApplicationInstanceGenerator.java b/service-monitor/src/main/java/com/yahoo/vespa/service/model/ApplicationInstanceGenerator.java index ac62ee4bdab..24677061334 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/model/ApplicationInstanceGenerator.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/model/ApplicationInstanceGenerator.java @@ -28,7 +28,6 @@ import com.yahoo.vespa.service.monitor.ServiceStatusProvider; import java.util.HashMap; import java.util.HashSet; import java.util.Map; -import java.util.Objects; import java.util.Set; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -61,18 +60,12 @@ public class ApplicationInstanceGenerator { return toApplicationInstanceReference(applicationInfo.getApplicationId(), zone); } - static ApplicationInstanceReference toApplicationInstanceReference(ApplicationId applicationId, Zone zone) { + public static ApplicationInstanceReference toApplicationInstanceReference(ApplicationId applicationId, Zone zone) { TenantId tenantId = new TenantId(applicationId.tenant().toString()); ApplicationInstanceId applicationInstanceId = toApplicationInstanceId(applicationId, zone); return new ApplicationInstanceReference(tenantId, applicationInstanceId); } - public boolean containsHostname(HostName hostname) { - return applicationInfo.getModel().getHosts().stream() - .map(HostInfo::getHostname) - .anyMatch(hostnameString -> Objects.equals(hostnameString, hostname.s())); - } - public ApplicationInstance makeApplicationInstanceLimitedTo( HostName hostname, ServiceStatusProvider serviceStatusProvider) { return makeApplicationInstanceLimitedToHosts( diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/model/ModelGenerator.java b/service-monitor/src/main/java/com/yahoo/vespa/service/model/ModelGenerator.java index 043e4a186d3..3acd4cd1102 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/model/ModelGenerator.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/model/ModelGenerator.java @@ -41,7 +41,7 @@ public class ModelGenerator { .makeApplicationInstance(serviceStatusProvider)) .collect(Collectors.toMap(ApplicationInstance::reference, Function.identity())); - return new ServiceModel(applicationInstances); + return new ServiceModel(applicationInstances, zone); } public Set<ApplicationInstanceReference> toApplicationInstanceReferenceSet(List<ApplicationInfo> infos) { diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/model/ServiceMonitorImpl.java b/service-monitor/src/main/java/com/yahoo/vespa/service/model/ServiceMonitorImpl.java index 53db7cc135c..c4a3123db57 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/model/ServiceMonitorImpl.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/model/ServiceMonitorImpl.java @@ -81,8 +81,8 @@ public class ServiceMonitorImpl implements ServiceMonitor, AntiServiceMonitor { } @Override - public Optional<ApplicationInstance> getApplication(ApplicationInstanceReference reference) { - return getApplicationInfo(reference) + public Optional<ApplicationInstance> getApplication(ApplicationId applicationId) { + return getApplicationInfo(applicationId) .map(applicationInfo -> modelGenerator.toApplicationInstance(applicationInfo, serviceStatusProvider)); } @@ -108,8 +108,7 @@ public class ServiceMonitorImpl implements ServiceMonitor, AntiServiceMonitor { return duperModelManager.disallowDuperModelLockAcquisition(regionDescription); } - private Optional<ApplicationInfo> getApplicationInfo(ApplicationInstanceReference reference) { - ApplicationId applicationId = ApplicationInstanceGenerator.toApplicationId(reference); + private Optional<ApplicationInfo> getApplicationInfo(ApplicationId applicationId) { return duperModelManager.getApplicationInfo(applicationId); } diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ServiceModel.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ServiceModel.java index 6079c76519f..8e3bee7bc7e 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ServiceModel.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ServiceModel.java @@ -2,6 +2,8 @@ package com.yahoo.vespa.service.monitor; import com.yahoo.config.model.api.ApplicationInfo; +import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.Zone; import com.yahoo.vespa.applicationmodel.ApplicationInstance; import com.yahoo.vespa.applicationmodel.ApplicationInstanceReference; import com.yahoo.vespa.applicationmodel.HostName; @@ -16,6 +18,8 @@ import java.util.List; import java.util.Map; import java.util.Optional; +import static com.yahoo.vespa.service.model.ApplicationInstanceGenerator.toApplicationInstanceReference; + /** * The service model is the union of the duper model and the service monitor, and presented * as classes from the {@code application-model} module. @@ -31,12 +35,14 @@ import java.util.Optional; public class ServiceModel { private final Map<ApplicationInstanceReference, ApplicationInstance> applicationsByReference; + private final Zone zone; private Map<HostName, ApplicationInstance> applicationsByHostName = null; private Map<HostName, List<ServiceInstance>> servicesByHostName = null; - public ServiceModel(Map<ApplicationInstanceReference, ApplicationInstance> applicationsByReference) { - this.applicationsByReference = Collections.unmodifiableMap(Map.copyOf(applicationsByReference)); + public ServiceModel(Map<ApplicationInstanceReference, ApplicationInstance> applicationsByReference, Zone zone) { + this.applicationsByReference = Map.copyOf(applicationsByReference); + this.zone = zone; } public Map<ApplicationInstanceReference, ApplicationInstance> getAllApplicationInstances() { @@ -47,6 +53,10 @@ public class ServiceModel { return Optional.ofNullable(applicationsByReference.get(reference)); } + public Optional<ApplicationInstance> getApplicationInstance(ApplicationId applicationId) { + return Optional.ofNullable(applicationsByReference.get(toApplicationInstanceReference(applicationId, zone))); + } + public Optional<ApplicationInstance> getApplication(HostName hostname) { if (applicationsByHostName == null) { fillMaps(); diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ServiceMonitor.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ServiceMonitor.java index b3f77b3ef7b..570e0948499 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ServiceMonitor.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/ServiceMonitor.java @@ -1,6 +1,7 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.service.monitor; +import com.yahoo.config.provision.ApplicationId; import com.yahoo.vespa.applicationmodel.ApplicationInstance; import com.yahoo.vespa.applicationmodel.ApplicationInstanceReference; import com.yahoo.vespa.applicationmodel.HostName; @@ -36,8 +37,8 @@ public interface ServiceMonitor { return getServiceModelSnapshot().getApplication(hostname); } - default Optional<ApplicationInstance> getApplication(ApplicationInstanceReference reference) { - return getServiceModelSnapshot().getApplicationInstance(reference); + default Optional<ApplicationInstance> getApplication(ApplicationId applicationId) { + return getServiceModelSnapshot().getApplicationInstance(applicationId); } default Optional<ApplicationInstance> getApplicationNarrowedTo(HostName hostname) { |