From 15140318eaa550dad1da413a210e793c44b8618b Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Thu, 21 Jul 2022 16:57:08 +0200 Subject: [PATCH] Backported service instance predictive URL --- .../ResourceRegistryContextClientFactory.java | 79 +------------------ .../ResourceRegistryContextClientImpl.java | 1 - 2 files changed, 3 insertions(+), 77 deletions(-) diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/contexts/ResourceRegistryContextClientFactory.java b/src/main/java/org/gcube/informationsystem/resourceregistry/contexts/ResourceRegistryContextClientFactory.java index eeeeb7e..0bad8a7 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/contexts/ResourceRegistryContextClientFactory.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/contexts/ResourceRegistryContextClientFactory.java @@ -1,17 +1,10 @@ package org.gcube.informationsystem.resourceregistry.contexts; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - import org.gcube.common.authorization.library.AuthorizationEntry; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; -import org.gcube.common.resources.gcore.GCoreEndpoint; -import org.gcube.common.resources.gcore.ServiceEndpoint; import org.gcube.common.scope.api.ScopeProvider; import org.gcube.informationsystem.resourceregistry.api.Constants; -import org.gcube.resources.discovery.client.queries.api.SimpleQuery; -import org.gcube.resources.discovery.icclient.ICFactory; +import org.gcube.informationsystem.resourceregistry.api.rest.ServiceInstance; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -22,27 +15,11 @@ public class ResourceRegistryContextClientFactory { private static final Logger logger = LoggerFactory.getLogger(ResourceRegistryContextClientFactory.class); - protected static List addresses; - - static { - addresses = new ArrayList<>(); - } - private static String FORCED_URL = null; protected static void forceToURL(String url){ FORCED_URL = url; } - - private static String classFormat = "$resource/Profile/ServiceClass/text() eq '%1s'"; - private static String nameFormat = "$resource/Profile/ServiceName/text() eq '%1s'"; - private static String statusFormat = "$resource/Profile/DeploymentData/Status/text() eq 'ready'"; - private static String containsFormat = "$entry/@EntryName eq '%1s'"; - - - private static String serviceEndpointCategoryFormat = "$resource/Profile/Category/text() eq '%1s'"; - private static String serviceEndpointNameFormat = "$resource/Profile/Name/text() eq '%1s'"; - private static String serviceEndpointstatusFormat = "$resource/Profile/RunTime/Status/text() eq 'READY'"; public static String getCurrentContextFullName() { String token = SecurityTokenProvider.instance.get(); @@ -55,66 +32,16 @@ public class ResourceRegistryContextClientFactory { return authorizationEntry.getContext(); } - private static SimpleQuery queryForService(){ - return ICFactory.queryFor(GCoreEndpoint.class) - .addCondition(String.format(classFormat, Constants.SERVICE_CLASS)) - .addCondition(String.format(nameFormat, Constants.SERVICE_NAME)) - .addCondition(String.format(statusFormat)) - .addVariable("$entry","$resource/Profile/AccessPoint/RunningInstanceInterfaces/Endpoint") - .addCondition(String.format(containsFormat, Constants.SERVICE_ENTRY_NAME)) - .setResult("$entry/text()"); - } - - private static SimpleQuery queryForProxy(){ - return ICFactory.queryFor(ServiceEndpoint.class) - .addCondition(String.format(serviceEndpointCategoryFormat, Constants.SERVICE_CLASS)) - .addCondition(String.format(serviceEndpointNameFormat, Constants.SERVICE_NAME)) - .addCondition(String.format(serviceEndpointstatusFormat)) - .addVariable("$entry","$resource/Profile/AccessPoint/Interface/Endpoint") - .addCondition(String.format(containsFormat, Constants.SERVICE_ENTRY_NAME)) - .setResult("$entry/text()"); - } - - - protected static List getAddresses(){ - List addresses = new ArrayList<>(); - - try { - SimpleQuery proxyQuery = queryForProxy(); - addresses = ICFactory.client().submit(proxyQuery); - if(addresses==null || addresses.isEmpty()){ - throw new Exception("No ResourceRegistry Proxy Found"); - } - } catch (Exception e) { - logger.debug("{}. Looking for RunningInstance.", e.getMessage()); - SimpleQuery serviceQuery = queryForService(); - addresses = ICFactory.client().submit(serviceQuery); - } - - return addresses; - } - public static ResourceRegistryContextClient create() { String address = null; if(FORCED_URL!=null){ address = FORCED_URL; }else { - - if(addresses==null || addresses.isEmpty()) { - addresses = getAddresses(); - } - - if(addresses==null || addresses.isEmpty()){ - String error = String.format("No %s:%s found in the current context %s", Constants.SERVICE_CLASS, Constants.SERVICE_NAME, getCurrentContextFullName()); - throw new RuntimeException(error); - } - - Random random = new Random(); - int index = random.nextInt(addresses.size()); - address = addresses.get(index); + address = String.format("%s/%s", ServiceInstance.getServiceURL(),Constants.SERVICE_NAME); } + logger.trace("The {} will be contacted at {}", Constants.SERVICE_NAME, address); return new ResourceRegistryContextClientImpl(address); } diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/contexts/ResourceRegistryContextClientImpl.java b/src/main/java/org/gcube/informationsystem/resourceregistry/contexts/ResourceRegistryContextClientImpl.java index 76acc7f..ff45124 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/contexts/ResourceRegistryContextClientImpl.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/contexts/ResourceRegistryContextClientImpl.java @@ -17,7 +17,6 @@ import org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundExcep import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException; import org.gcube.informationsystem.resourceregistry.api.exceptions.contexts.ContextAlreadyPresentException; import org.gcube.informationsystem.resourceregistry.api.exceptions.contexts.ContextNotFoundException; -import org.gcube.informationsystem.resourceregistry.api.rest.AccessPath; import org.gcube.informationsystem.resourceregistry.api.rest.ContextPath; import org.gcube.informationsystem.resourceregistry.api.rest.httputils.HTTPUtility; import org.gcube.informationsystem.utils.ElementMapper;