X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=cadi%2Faaf%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Faaf%2Fcadi%2Faaf%2Fv2_0%2FAAFLocator.java;h=38f6bcea3987d274fc7582064f4dcbfd88fe4f6b;hb=988fd491d52a9074fe75ebe86e024c6889a46cc3;hp=16fdb79c410e8e3ae2e266cef2df977cceb2975c;hpb=12414fe43077e12d7ef711951b1633ad31d73573;p=aaf%2Fauthz.git diff --git a/cadi/aaf/src/main/java/org/onap/aaf/cadi/aaf/v2_0/AAFLocator.java b/cadi/aaf/src/main/java/org/onap/aaf/cadi/aaf/v2_0/AAFLocator.java index 16fdb79c..38f6bcea 100644 --- a/cadi/aaf/src/main/java/org/onap/aaf/cadi/aaf/v2_0/AAFLocator.java +++ b/cadi/aaf/src/main/java/org/onap/aaf/cadi/aaf/v2_0/AAFLocator.java @@ -29,6 +29,7 @@ import java.util.LinkedList; import java.util.List; import org.onap.aaf.cadi.Access; +import org.onap.aaf.cadi.Access.Level; import org.onap.aaf.cadi.CadiException; import org.onap.aaf.cadi.LocatorException; import org.onap.aaf.cadi.SecuritySetter; @@ -36,6 +37,9 @@ import org.onap.aaf.cadi.client.Future; import org.onap.aaf.cadi.config.Config; import org.onap.aaf.cadi.config.SecurityInfoC; import org.onap.aaf.cadi.http.HClient; +import org.onap.aaf.cadi.locator.DNSLocator; +import org.onap.aaf.cadi.locator.SingleEndpointLocator; +import org.onap.aaf.cadi.locator.SizedLocator; import org.onap.aaf.cadi.util.FixURIinfo; import org.onap.aaf.cadi.util.Split; import org.onap.aaf.misc.env.APIException; @@ -49,8 +53,12 @@ import locate.v1_0.Endpoints; public class AAFLocator extends AbsAAFLocator { private static RosettaEnv env; - HClient client; + private HClient client; + private HClient lclient; private RosettaDF epsDF; + private SizedLocator locatorLocator; + private Item locatorItem; + public AAFLocator(SecurityInfoC si, URI locatorURI) throws LocatorException { super(si.access, nameFromLocatorURI(locatorURI), 10000L /* Wait at least 10 seconds between refreshes */); @@ -73,13 +81,6 @@ public class AAFLocator extends AbsAAFLocator { sb.append(path[i]); } setPathInfo(sb.toString()); -// URI uri = new URI( -// locatorURI.getScheme(), -// locatorURI.getAuthority(), -// locatorURI.getPath(), -// null, -// null -// ); client = createClient(si.defSS, locatorURI, connectTimeout); } else { client = new HClient(si.defSS, locatorURI, connectTimeout); @@ -89,19 +90,78 @@ public class AAFLocator extends AbsAAFLocator { } catch (APIException /*| URISyntaxException*/ e) { throw new LocatorException(e); } + lclient = new HClient(si.defSS, locatorURI, connectTimeout); if(si.access.willLog(Access.Level.DEBUG)) { - si.access.log(Access.Level.DEBUG, "Root URI:",client.getURI()); + si.access.log(Access.Level.DEBUG, "Root URI:",client.getURI()); + } + + String dnsString; + if(locatorURI.getPort()<0) { + dnsString=locatorURI.getScheme() + "://" + locatorURI.getHost(); + } else { + dnsString=locatorURI.getScheme() + "://" +locatorURI.getHost()+':'+locatorURI.getPort(); } + if(dnsString.contains("null")) { // for Testing Purposes, mostly. + locatorLocator = null; + } else { + locatorLocator = new DNSLocator(access, dnsString); + if(locatorLocator.hasItems()) { + locatorItem = locatorLocator.best(); + } else { + // For when DNS doesn't work, including some K8s Installations + locatorLocator = new SingleEndpointLocator(dnsString); + } + } + } + + private URI locatorFail(URI uri) throws LocatorException, URISyntaxException { + locatorLocator.invalidate(locatorItem); + locatorItem = locatorLocator.best(); + URI newURI = locatorLocator.get(locatorItem); + return new URI(uri.getScheme(), + uri.getUserInfo(), + newURI.getHost(), + newURI.getPort(), + uri.getPath(), + uri.getQuery(), + uri.getFragment()); } + protected final int maxIters() { + + return locatorLocator.size(); + } + + @Override public boolean refresh() { try { - client.setMethod("GET"); - client.send(); - Future fr = client.futureRead(epsDF, TYPE.JSON); - if (fr.get(client.timeout())) { + int max = locatorLocator.size(); + for(int i=0;i fr = lclient.futureRead(epsDF, TYPE.JSON); + if (fr.get(lclient.timeout())) { List epl = new LinkedList<>(); for (Endpoint endpoint : fr.value.getEndpoint()) { epl.add(new EP(endpoint,latitude,longitude)); @@ -130,4 +190,5 @@ public class AAFLocator extends AbsAAFLocator { protected HClient createClient(SecuritySetter ss, URI uri, int connectTimeout) throws LocatorException { return new HClient(ss, uri, connectTimeout); } + }