diff options
Diffstat (limited to 'orchestrator/src/main/java/com/yahoo/vespa/orchestrator/resources/InstanceRequestHandler.java')
-rw-r--r-- | orchestrator/src/main/java/com/yahoo/vespa/orchestrator/resources/InstanceRequestHandler.java | 33 |
1 files changed, 27 insertions, 6 deletions
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 67899849def..3b3e3ce7eea 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 @@ -7,6 +7,7 @@ import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.yahoo.component.annotation.Inject; import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.Zone; import com.yahoo.container.jdisc.ThreadedHttpRequestHandler; import com.yahoo.jrt.slobrok.api.Mirror; import com.yahoo.restapi.RestApi; @@ -27,6 +28,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.model.ApplicationInstanceGenerator; import com.yahoo.vespa.service.monitor.ServiceMonitor; import com.yahoo.vespa.service.monitor.SlobrokApi; @@ -54,18 +56,21 @@ public class InstanceRequestHandler extends RestApiRequestHandler<InstanceReques private final SlobrokApi slobrokApi; private final MonitorManager rootManager; private final ServiceMonitor serviceMonitor; + private final Zone zone; @Inject public InstanceRequestHandler(ThreadedHttpRequestHandler.Context context, ServiceMonitor serviceMonitor, StatusService statusService, SlobrokApi slobrokApi, - UnionMonitorManager rootManager) { + UnionMonitorManager rootManager, + Zone zone) { super(context, InstanceRequestHandler::createRestApiDefinition); this.statusService = statusService; this.slobrokApi = slobrokApi; this.rootManager = rootManager; this.serviceMonitor = serviceMonitor; + this.zone = zone; } private static RestApi createRestApiDefinition(InstanceRequestHandler self) { @@ -89,13 +94,16 @@ public class InstanceRequestHandler extends RestApiRequestHandler<InstanceReques .build(); } - private List<ApplicationInstanceReference> getAllInstances(RestApi.RequestContext context) { - return serviceMonitor.getAllApplicationInstanceReferences().stream().sorted().toList(); + private List<ApplicationId> getAllInstances(RestApi.RequestContext context) { + return serviceMonitor.getAllApplicationInstanceReferences().stream() + .map(OrchestratorUtil::toApplicationId) + .sorted() + .toList(); } private InstanceStatusResponse getInstance(RestApi.RequestContext context) { String instanceIdString = context.pathParameters().getStringOrThrow("instanceId"); - ApplicationInstanceReference instanceId = parseInstanceId(instanceIdString); + ApplicationInstanceReference instanceId = getApplicationInstanceReference(instanceIdString); ApplicationInstance applicationInstance = serviceMonitor.getApplication(OrchestratorUtil.toApplicationId(instanceId)) @@ -113,6 +121,19 @@ public class InstanceRequestHandler extends RestApiRequestHandler<InstanceReques return InstanceStatusResponse.create(applicationInstance, hostStatusMap); } + // Gets ApplicationInstanceReference when string might be an ApplicationId (tenant:application:instance) or + // an ApplicationInstanceReference (tenant:application:instance:environment:region:instance). + // TODO: Accept only strings on the form tenant:application:instance when all users have been + // updated and return ApplicationId instead of ApplicationInstanceReference. + private ApplicationInstanceReference getApplicationInstanceReference(String instanceIdString) { + try { + ApplicationId applicationId = ApplicationId.fromSerializedForm(instanceIdString); + return ApplicationInstanceGenerator.toApplicationInstanceReference(applicationId, zone); + } catch (IllegalArgumentException e) { + return parseInstanceId(instanceIdString); + } + } + private WireHostInfo hostInfoToWire(HostInfo hostInfo) { String hostStatusString = hostInfo.status().asString(); String suspendedSinceUtcOrNull = hostInfo.suspendedSince().map(Instant::toString).orElse(null); @@ -122,7 +143,7 @@ public class InstanceRequestHandler extends RestApiRequestHandler<InstanceReques private List<SlobrokEntryResponse> getSlobrokEntries(RestApi.RequestContext context) { String instanceId = context.pathParameters().getStringOrThrow("instanceId"); String pattern = context.queryParameters().getString("pattern").orElse(null); - ApplicationInstanceReference reference = parseInstanceId(instanceId); + ApplicationInstanceReference reference = getApplicationInstanceReference(instanceId); ApplicationId applicationId = OrchestratorUtil.toApplicationId(reference); if (pattern == null) { @@ -140,7 +161,7 @@ public class InstanceRequestHandler extends RestApiRequestHandler<InstanceReques String clusterIdString = context.queryParameters().getStringOrThrow("clusterId"); String serviceTypeString = context.queryParameters().getStringOrThrow("serviceType"); String configIdString = context.queryParameters().getStringOrThrow("configId"); - ApplicationInstanceReference reference = parseInstanceId(instanceId); + ApplicationInstanceReference reference = getApplicationInstanceReference(instanceId); ApplicationId applicationId = OrchestratorUtil.toApplicationId(reference); ClusterId clusterId = new ClusterId(clusterIdString); |