diff options
author | toby <smorgrav@yahoo-inc.com> | 2016-06-16 11:12:38 +0200 |
---|---|---|
committer | toby <smorgrav@yahoo-inc.com> | 2016-06-17 09:27:17 +0200 |
commit | 9f07d67364961cb0e3c5cc9095fc3e1e081900ec (patch) | |
tree | 3395ffc9d6c2a76bffbc24c9885c0a26308bb068 /orchestrator | |
parent | b7cecaa625d81ccacbb1d1330631b7a2c9a0eb15 (diff) |
Lookup ApplicationInstanceReference matching an ApplicationId. The
previous behavoir only worked for ApplicationInstanceReferences with a
certain format.
Diffstat (limited to 'orchestrator')
4 files changed, 19 insertions, 16 deletions
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 ad72a43ff72..7d38c515048 100644 --- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorImpl.java +++ b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorImpl.java @@ -136,7 +136,7 @@ public class OrchestratorImpl implements Orchestrator { @Override public ApplicationInstanceStatus getApplicationInstanceStatus( final ApplicationId appId) throws ApplicationIdNotFoundException { - ApplicationInstanceReference appRef = OrchestratorUtil.toApplicationInstanceReference(appId); + ApplicationInstanceReference appRef = OrchestratorUtil.toApplicationInstanceReference(appId,instanceLookupService); return statusService.forApplicationInstance(appRef).getApplicationInstanceStatus(); } @@ -271,7 +271,8 @@ public class OrchestratorImpl implements Orchestrator { final ApplicationId appId, final ApplicationInstanceStatus status) throws ApplicationStateChangeDeniedException, ApplicationIdNotFoundException{ - ApplicationInstanceReference appRef = OrchestratorUtil.toApplicationInstanceReference(appId); + + ApplicationInstanceReference appRef = OrchestratorUtil.toApplicationInstanceReference(appId, instanceLookupService); try (MutableStatusRegistry statusRegistry = statusService.lockApplicationInstance_forCurrentThreadOnly(appRef)) { 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 ca7bd058169..7782702995d 100644 --- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorUtil.java +++ b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorUtil.java @@ -5,8 +5,6 @@ import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ApplicationName; import com.yahoo.config.provision.InstanceName; import com.yahoo.config.provision.TenantName; -import com.yahoo.vespa.orchestrator.status.HostStatus; -import com.yahoo.vespa.orchestrator.status.ReadOnlyStatusRegistry; import com.yahoo.vespa.applicationmodel.ApplicationInstance; import com.yahoo.vespa.applicationmodel.ApplicationInstanceId; import com.yahoo.vespa.applicationmodel.ApplicationInstanceReference; @@ -14,9 +12,12 @@ 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.orchestrator.status.HostStatus; +import com.yahoo.vespa.orchestrator.status.ReadOnlyStatusRegistry; import java.util.Collection; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.function.Function; import java.util.regex.Matcher; @@ -108,14 +109,17 @@ public class OrchestratorUtil { } - public static ApplicationInstanceReference toApplicationInstanceReference(ApplicationId appId) { - TenantId tenantId = new TenantId(appId.tenant().toString()); - - String appName = appId.application().toString(); - String instanceName = appId.instance().toString(); - ApplicationInstanceId appInstanceId = new ApplicationInstanceId(appName + ":" + instanceName); + public static ApplicationInstanceReference toApplicationInstanceReference(ApplicationId appId, + InstanceLookupService instanceLookupService) + throws ApplicationIdNotFoundException { - return new ApplicationInstanceReference(tenantId,appInstanceId); + String appRegex = String.format("^%s:.*:.*:%s$",appId.application().toString(), appId.instance().toString()); + Set<ApplicationInstanceReference> appRefs = instanceLookupService.knownInstances(); + Optional<ApplicationInstanceReference> appRef = appRefs.stream() + .filter(a -> a.tenantId().equals(appId.tenant())) + .filter(a -> a.applicationInstanceId().toString().matches(appRegex)) + .findFirst(); + return appRef.orElseThrow(() -> new ApplicationIdNotFoundException()); } public static ApplicationId toApplicationId(ApplicationInstanceReference appRef) { @@ -126,9 +130,7 @@ public class OrchestratorUtil { String[] appNameParts = appNameStr.split(":"); // We assume a valid application reference has at lest two parts appname:instancename - // TODO is this assumption valid? if (appNameParts.length < 2) { - // TODO Since this is used internally we should perhapes use another exception type? throw new IllegalArgumentException("Application reference not valid: " + 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 5c1d9bd45be..7f414dbfbc2 100644 --- a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/OrchestratorImplTest.java +++ b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/OrchestratorImplTest.java @@ -291,7 +291,7 @@ public class OrchestratorImplTest { private boolean isInMaintenance(ApplicationId appId, HostName hostName) throws ApplicationIdNotFoundException { for (ApplicationInstance<ServiceMonitorStatus> app : DummyInstanceLookupService.getApplications()) { - if (app.reference().equals(OrchestratorUtil.toApplicationInstanceReference(appId))) { + if (app.reference().equals(OrchestratorUtil.toApplicationInstanceReference(appId,new DummyInstanceLookupService()))) { 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 0626bf72e60..178e39f6e5e 100644 --- a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/OrchestratorUtilTest.java +++ b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/OrchestratorUtilTest.java @@ -35,14 +35,14 @@ public class OrchestratorUtilTest { public void applicationid_conversion_are_symmetric() throws Exception { // From appId to appRef and back - ApplicationInstanceReference appRef = OrchestratorUtil.toApplicationInstanceReference(APPID_1); + ApplicationInstanceReference appRef = OrchestratorUtil.toApplicationInstanceReference(APPID_1, new DummyInstanceLookupService()); 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); + ApplicationInstanceReference appRefRoundTrip = OrchestratorUtil.toApplicationInstanceReference(appId, new DummyInstanceLookupService()); Assert.assertEquals(APPREF_1, appRefRoundTrip); } |