From d668cdfbdeec89d2e8d32c068a4ff64fd36a5a75 Mon Sep 17 00:00:00 2001 From: chenson42 Date: Fri, 26 Jun 2015 13:58:48 +0000 Subject: [PATCH] 0002335: Make the ISyncUrlExtension more flexible by always calling a registered ISyncUrlExtension --- .../transport/AbstractTransportManager.java | 29 +++++------ .../http/HttpBandwidthUrlSelector.java | 49 ++++++++++--------- .../transport/http/HttpTransportManager.java | 2 - 3 files changed, 37 insertions(+), 43 deletions(-) diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/transport/AbstractTransportManager.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/transport/AbstractTransportManager.java index d67e82558c..0befc0c58e 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/transport/AbstractTransportManager.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/transport/AbstractTransportManager.java @@ -65,26 +65,19 @@ public String resolveURL(String syncUrl, String registrationUrl) { if (StringUtils.isBlank(syncUrl) || syncUrl.startsWith(Constants.PROTOCOL_NONE)) { log.debug("Using the registration URL to contact the remote node because the syncURL for the node is blank"); return registrationUrl; - } else if (syncUrl.startsWith(Constants.PROTOCOL_EXT)) { - try { - URI uri = new URI(syncUrl); - ISyncUrlExtension handler = null; - if (extensionService != null) { - handler = extensionService.getExtensionPointMap(ISyncUrlExtension.class).get(uri.getHost()); - } - if (handler == null) { - log.error("Could not find a registered extension sync url handler with the name of {} using the url {}", uri.getHost(), syncUrl); - return syncUrl; - } else { - return handler.resolveUrl(uri); - } - } catch (URISyntaxException e) { - log.error(e.getMessage(),e); - return syncUrl; + } + + try { + URI uri = new URI(syncUrl); + + for (ISyncUrlExtension handler : extensionService.getExtensionPointList(ISyncUrlExtension.class)) { + syncUrl = handler.resolveUrl(uri); + uri = new URI(syncUrl); } - } else { - return syncUrl; + } catch (URISyntaxException e) { + log.error(e.getMessage(),e); } + return syncUrl; } protected String getAcknowledgementData(boolean requires13Format, String nodeId, diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/transport/http/HttpBandwidthUrlSelector.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/transport/http/HttpBandwidthUrlSelector.java index 9b61b7c5e6..2f6d255488 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/transport/http/HttpBandwidthUrlSelector.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/transport/http/HttpBandwidthUrlSelector.java @@ -29,6 +29,7 @@ import java.util.Map; import org.jumpmind.extension.IBuiltInExtensionPoint; +import org.jumpmind.symmetric.common.Constants; import org.jumpmind.symmetric.service.IBandwidthService; import org.jumpmind.symmetric.service.INodeService; import org.jumpmind.symmetric.transport.ISyncUrlExtension; @@ -70,32 +71,34 @@ public HttpBandwidthUrlSelector(INodeService nodeService, } public String resolveUrl(URI uri) { - Map params = getParameters(uri); - List urls = null; - if (!cachedUrls.containsKey(uri)) { - urls = getUrls(params); - cachedUrls.put(uri, urls); - } else { - urls = cachedUrls.get(uri); - } - - boolean initialLoadOnly = isInitialLoadOnly(params); - if ((initialLoadOnly && nodeService != null && !nodeService.isDataLoadCompleted()) || !initialLoadOnly) { - long ts = System.currentTimeMillis(); - if (ts - getSampleTTL(params) > lastSampleTs) { - for (SyncUrl syncUrl : urls) { - syncUrl.kbps = bandwidthService.getDownloadKbpsFor(syncUrl.url, getSampleSize(params), - getMaxSampleDuration(params)); + if (uri.toString().startsWith(Constants.PROTOCOL_EXT)) { + Map params = getParameters(uri); + List urls = null; + if (!cachedUrls.containsKey(uri)) { + urls = getUrls(params); + cachedUrls.put(uri, urls); + } else { + urls = cachedUrls.get(uri); + } + + boolean initialLoadOnly = isInitialLoadOnly(params); + if ((initialLoadOnly && nodeService != null && !nodeService.isDataLoadCompleted()) || !initialLoadOnly) { + long ts = System.currentTimeMillis(); + if (ts - getSampleTTL(params) > lastSampleTs) { + for (SyncUrl syncUrl : urls) { + syncUrl.kbps = bandwidthService.getDownloadKbpsFor(syncUrl.url, getSampleSize(params), + getMaxSampleDuration(params)); + } + lastSampleTs = ts; + Collections.sort(urls, new BestBandwidthSorter()); } - lastSampleTs = ts; - Collections.sort(urls, new BestBandwidthSorter()); + return urls.get(0).url; + } else { + Collections.sort(urls, new ListOrderSorter()); + return urls.get(0).url; } - return urls.get(0).url; - } else { - Collections.sort(urls, new ListOrderSorter()); - return urls.get(0).url; } - + else return uri.toString(); } protected long getSampleSize(Map params) { diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/transport/http/HttpTransportManager.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/transport/http/HttpTransportManager.java index 5ae189d4ad..28c17259ba 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/transport/http/HttpTransportManager.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/transport/http/HttpTransportManager.java @@ -67,8 +67,6 @@ public HttpTransportManager() { public HttpTransportManager(ISymmetricEngine engine) { super(engine.getExtensionService()); this.engine = engine; - engine.getExtensionService().addExtensionPoint("httpBandwidthUrlSelector", new HttpBandwidthUrlSelector( - engine.getNodeService(), engine.getBandwidthService())); } public int sendCopyRequest(Node local) throws IOException {