summaryrefslogtreecommitdiffstats
path: root/orchestrator
diff options
context:
space:
mode:
authortoby <smorgrav@yahoo-inc.com>2016-06-16 11:12:38 +0200
committertoby <smorgrav@yahoo-inc.com>2016-06-17 09:27:17 +0200
commit9f07d67364961cb0e3c5cc9095fc3e1e081900ec (patch)
tree3395ffc9d6c2a76bffbc24c9885c0a26308bb068 /orchestrator
parentb7cecaa625d81ccacbb1d1330631b7a2c9a0eb15 (diff)
Lookup ApplicationInstanceReference matching an ApplicationId. The
previous behavoir only worked for ApplicationInstanceReferences with a certain format.
Diffstat (limited to 'orchestrator')
-rw-r--r--orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorImpl.java5
-rw-r--r--orchestrator/src/main/java/com/yahoo/vespa/orchestrator/OrchestratorUtil.java24
-rw-r--r--orchestrator/src/test/java/com/yahoo/vespa/orchestrator/OrchestratorImplTest.java2
-rw-r--r--orchestrator/src/test/java/com/yahoo/vespa/orchestrator/OrchestratorUtilTest.java4
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);
}