Repository: aries-rsa Updated Branches: refs/heads/master 0ea1c0c37 -> a0dc13349
[ARIES-1759] Fastbin fails to bind on config change FastBinProvider#close now waits for the server to actually shutdown before returning (timeout of 30s) Project: http://git-wip-us.apache.org/repos/asf/aries-rsa/repo Commit: http://git-wip-us.apache.org/repos/asf/aries-rsa/commit/a0dc1334 Tree: http://git-wip-us.apache.org/repos/asf/aries-rsa/tree/a0dc1334 Diff: http://git-wip-us.apache.org/repos/asf/aries-rsa/diff/a0dc1334 Branch: refs/heads/master Commit: a0dc133494058704c25f6455d30faeecd0189d4b Parents: 0ea1c0c Author: Johannes Utzig <[email protected]> Authored: Mon Nov 20 20:59:27 2017 +0100 Committer: Johannes Utzig <[email protected]> Committed: Mon Nov 20 20:59:27 2017 +0100 ---------------------------------------------------------------------- .../aries/rsa/provider/fastbin/Activator.java | 5 +++++ .../rsa/provider/fastbin/FastBinProvider.java | 20 ++++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/a0dc1334/provider/fastbin/src/main/java/org/apache/aries/rsa/provider/fastbin/Activator.java ---------------------------------------------------------------------- diff --git a/provider/fastbin/src/main/java/org/apache/aries/rsa/provider/fastbin/Activator.java b/provider/fastbin/src/main/java/org/apache/aries/rsa/provider/fastbin/Activator.java index e93e873..65c03d0 100644 --- a/provider/fastbin/src/main/java/org/apache/aries/rsa/provider/fastbin/Activator.java +++ b/provider/fastbin/src/main/java/org/apache/aries/rsa/provider/fastbin/Activator.java @@ -28,13 +28,17 @@ import org.apache.aries.rsa.provider.fastbin.util.UuidGenerator; import org.apache.aries.rsa.spi.DistributionProvider; import org.osgi.service.cm.ManagedService; import org.osgi.service.remoteserviceadmin.RemoteConstants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class Activator extends BaseActivator implements ManagedService { + private static final Logger LOG = LoggerFactory.getLogger(Activator.class); static Activator INSTANCE; FastBinProvider provider; ClientInvoker client; ServerInvoker server; + @Override protected void doOpen() throws Exception { @@ -45,6 +49,7 @@ public class Activator extends BaseActivator implements ManagedService { protected void doStart() throws Exception { INSTANCE = this; String uri = getString("uri", "tcp://0.0.0.0:2543"); + LOG.info("Binding Fastbin Server to {}",uri); String exportedAddress = getString("exportedAddress", null); if (exportedAddress == null) { exportedAddress = UuidGenerator.getHostName(); http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/a0dc1334/provider/fastbin/src/main/java/org/apache/aries/rsa/provider/fastbin/FastBinProvider.java ---------------------------------------------------------------------- diff --git a/provider/fastbin/src/main/java/org/apache/aries/rsa/provider/fastbin/FastBinProvider.java b/provider/fastbin/src/main/java/org/apache/aries/rsa/provider/fastbin/FastBinProvider.java index 4cf3be7..e9808b2 100644 --- a/provider/fastbin/src/main/java/org/apache/aries/rsa/provider/fastbin/FastBinProvider.java +++ b/provider/fastbin/src/main/java/org/apache/aries/rsa/provider/fastbin/FastBinProvider.java @@ -24,6 +24,8 @@ import java.lang.reflect.Proxy; import java.net.URI; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.Semaphore; +import java.util.concurrent.TimeUnit; import org.apache.aries.rsa.provider.fastbin.api.SerializationStrategy; import org.apache.aries.rsa.provider.fastbin.io.ClientInvoker; @@ -39,9 +41,13 @@ import org.fusesource.hawtdispatch.DispatchQueue; import org.osgi.framework.BundleContext; import org.osgi.service.remoteserviceadmin.EndpointDescription; import org.osgi.service.remoteserviceadmin.RemoteConstants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class FastBinProvider implements DistributionProvider { + private static final Logger LOG = LoggerFactory.getLogger(FastBinProvider.class); + public static final String FASTBIN_CONFIG_TYPE = "aries.fastbin"; public static final String FASTBIN_ADDRESS = FASTBIN_CONFIG_TYPE + ".address"; @@ -68,8 +74,18 @@ public class FastBinProvider implements DistributionProvider { } public void close() { - client.stop(); - server.stop(); + client.stop(); + final Semaphore counter = new Semaphore(0); + server.stop(() -> { + counter.release(1); + }); + try { + if(!counter.tryAcquire(1, 30, TimeUnit.SECONDS)) { + LOG.warn("Server/Client failed to shut down in time. Proceeding shutdown anyway..."); + } + } catch(InterruptedException e) { + LOG.warn("Interrupted while waiting for Server/Client shutdown"); + } } public ClientInvoker getClient() {
