diff --git a/briar-core/src/org/briarproject/lifecycle/LifecycleManagerImpl.java b/briar-core/src/org/briarproject/lifecycle/LifecycleManagerImpl.java index 0e7810eb56904b37c93f631af2791e0f01097af0..b227943116e713cd5a277e7ad2699583b3149a7d 100644 --- a/briar-core/src/org/briarproject/lifecycle/LifecycleManagerImpl.java +++ b/briar-core/src/org/briarproject/lifecycle/LifecycleManagerImpl.java @@ -50,24 +50,27 @@ class LifecycleManagerImpl implements LifecycleManager { executors = new CopyOnWriteArrayList<ExecutorService>(); } + @Override public void registerService(Service s) { if (LOG.isLoggable(INFO)) LOG.info("Registering service " + s.getClass().getName()); services.add(s); } + @Override public void registerClient(Client c) { if (LOG.isLoggable(INFO)) LOG.info("Registering client " + c.getClass().getName()); clients.add(c); } + @Override public void registerForShutdown(ExecutorService e) { - if (LOG.isLoggable(INFO)) - LOG.info("Registering executor " + e.getClass().getName()); + LOG.info("Registering executor"); executors.add(e); } + @Override public StartResult startServices() { if (!startStopSemaphore.tryAcquire()) { LOG.info("Already starting or stopping"); @@ -91,7 +94,7 @@ class LifecycleManagerImpl implements LifecycleManager { c.createLocalState(txn); duration = System.currentTimeMillis() - start; if (LOG.isLoggable(INFO)) { - LOG.info("Starting " + c.getClass().getName() + LOG.info("Starting client " + c.getClass().getName() + " took " + duration + " ms"); } } @@ -104,7 +107,7 @@ class LifecycleManagerImpl implements LifecycleManager { s.startService(); duration = System.currentTimeMillis() - start; if (LOG.isLoggable(INFO)) { - LOG.info("Starting " + s.getClass().getName() + LOG.info("Starting service " + s.getClass().getName() + " took " + duration + " ms"); } } @@ -121,6 +124,7 @@ class LifecycleManagerImpl implements LifecycleManager { } } + @Override public void stopServices() { try { startStopSemaphore.acquire(); @@ -132,15 +136,22 @@ class LifecycleManagerImpl implements LifecycleManager { LOG.info("Stopping services"); eventBus.broadcast(new ShutdownEvent()); for (Service s : services) { + long start = System.currentTimeMillis(); s.stopService(); - if (LOG.isLoggable(INFO)) - LOG.info("Service stopped: " + s.getClass().getName()); + long duration = System.currentTimeMillis() - start; + if (LOG.isLoggable(INFO)) { + LOG.info("Stopping service " + s.getClass().getName() + + " took " + duration + " ms"); + } } for (ExecutorService e : executors) e.shutdownNow(); if (LOG.isLoggable(INFO)) LOG.info(executors.size() + " executors shut down"); + long start = System.currentTimeMillis(); db.close(); - LOG.info("Database closed"); + long duration = System.currentTimeMillis() - start; + if (LOG.isLoggable(INFO)) + LOG.info("Closing database took " + duration + " ms"); shutdownLatch.countDown(); } catch (DbException e) { if (LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e); @@ -151,14 +162,17 @@ class LifecycleManagerImpl implements LifecycleManager { } } + @Override public void waitForDatabase() throws InterruptedException { dbLatch.await(); } + @Override public void waitForStartup() throws InterruptedException { startupLatch.await(); } + @Override public void waitForShutdown() throws InterruptedException { shutdownLatch.await(); } diff --git a/briar-core/src/org/briarproject/plugins/PluginManagerImpl.java b/briar-core/src/org/briarproject/plugins/PluginManagerImpl.java index ebd6f6c017678c9843d60cc4b23fe1afbb77fb48..b93756b18bac6bb411d71afe1730fa3847857e71 100644 --- a/briar-core/src/org/briarproject/plugins/PluginManagerImpl.java +++ b/briar-core/src/org/briarproject/plugins/PluginManagerImpl.java @@ -92,8 +92,7 @@ class PluginManagerImpl implements PluginManager, Service { LOG.info("Starting simplex plugins"); for (SimplexPluginFactory f : simplexFactories) { TransportId t = f.getId(); - SimplexPluginCallback c = new SimplexCallback(t); - SimplexPlugin s = f.createPlugin(c); + SimplexPlugin s = f.createPlugin(new SimplexCallback(t)); if (s == null) { if (LOG.isLoggable(WARNING)) LOG.warning("Could not create plugin for " + t); @@ -108,8 +107,7 @@ class PluginManagerImpl implements PluginManager, Service { LOG.info("Starting duplex plugins"); for (DuplexPluginFactory f : duplexFactories) { TransportId t = f.getId(); - DuplexPluginCallback c = new DuplexCallback(t); - DuplexPlugin d = f.createPlugin(c); + DuplexPlugin d = f.createPlugin(new DuplexCallback(t)); if (d == null) { if (LOG.isLoggable(WARNING)) LOG.warning("Could not create plugin for " + t); @@ -154,14 +152,12 @@ class PluginManagerImpl implements PluginManager, Service { @Override public Collection<SimplexPlugin> getSimplexPlugins() { - List<SimplexPlugin> copy = new ArrayList<SimplexPlugin>(simplexPlugins); - return Collections.unmodifiableList(copy); + return Collections.unmodifiableList(simplexPlugins); } @Override public Collection<DuplexPlugin> getDuplexPlugins() { - List<DuplexPlugin> copy = new ArrayList<DuplexPlugin>(duplexPlugins); - return Collections.unmodifiableList(copy); + return Collections.unmodifiableList(duplexPlugins); } @Override @@ -199,14 +195,13 @@ class PluginManagerImpl implements PluginManager, Service { long duration = System.currentTimeMillis() - start; if (started) { if (LOG.isLoggable(INFO)) { - String name = plugin.getClass().getSimpleName(); - LOG.info("Starting " + name + " took " + - duration + " ms"); + LOG.info("Starting plugin " + plugin.getId() + + " took " + duration + " ms"); } } else { if (LOG.isLoggable(WARNING)) { - String name = plugin.getClass().getSimpleName(); - LOG.warning(name + " did not start"); + LOG.warning("Plugin" + plugin.getId() + + " did not start"); } } } catch (IOException e) { @@ -236,8 +231,8 @@ class PluginManagerImpl implements PluginManager, Service { plugin.stop(); long duration = System.currentTimeMillis() - start; if (LOG.isLoggable(INFO)) { - String name = plugin.getClass().getSimpleName(); - LOG.info("Stopping " + name + " took " + duration + " ms"); + LOG.info("Stopping plugin " + plugin.getId() + + " took " + duration + " ms"); } } catch (IOException e) { if (LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e); diff --git a/briar-core/src/org/briarproject/plugins/Poller.java b/briar-core/src/org/briarproject/plugins/Poller.java index 57f19a3544c8132408baf33896bca31e7670bbc7..20643e43e5c33f2106b056d91ea30b9d6fbdc385 100644 --- a/briar-core/src/org/briarproject/plugins/Poller.java +++ b/briar-core/src/org/briarproject/plugins/Poller.java @@ -53,11 +53,11 @@ class Poller implements EventListener { ConnectionRegistry connectionRegistry, PluginManager pluginManager, SecureRandom random, Clock clock) { this.ioExecutor = ioExecutor; + this.scheduler = scheduler; this.connectionManager = connectionManager; this.connectionRegistry = connectionRegistry; this.pluginManager = pluginManager; this.random = random; - this.scheduler = scheduler; this.clock = clock; lock = new ReentrantLock(); tasks = new HashMap<TransportId, PollTask>(); @@ -147,9 +147,9 @@ class Poller implements EventListener { private void schedule(Plugin p, int delay, boolean randomiseNext) { // Replace any later scheduled task for this plugin long due = clock.currentTimeMillis() + delay; + TransportId t = p.getId(); lock.lock(); try { - TransportId t = p.getId(); PollTask scheduled = tasks.get(t); if (scheduled == null || due < scheduled.due) { PollTask task = new PollTask(p, due, randomiseNext); @@ -165,9 +165,9 @@ class Poller implements EventListener { ioExecutor.execute(new Runnable() { @Override public void run() { - if (LOG.isLoggable(INFO)) - LOG.info("Polling " + p.getClass().getSimpleName()); - p.poll(connectionRegistry.getConnectedContacts(p.getId())); + TransportId t = p.getId(); + if (LOG.isLoggable(INFO)) LOG.info("Polling plugin " + t); + p.poll(connectionRegistry.getConnectedContacts(t)); } }); } diff --git a/briar-tests/src/org/briarproject/plugins/PluginManagerImplTest.java b/briar-tests/src/org/briarproject/plugins/PluginManagerImplTest.java index c186a170013628b51c3378d8c30a02a0ed140ac1..b8c9e4f6a2e5c470047b3c9686a678943ed66634 100644 --- a/briar-tests/src/org/briarproject/plugins/PluginManagerImplTest.java +++ b/briar-tests/src/org/briarproject/plugins/PluginManagerImplTest.java @@ -62,6 +62,12 @@ public class PluginManagerImplTest extends BriarTestCase { final TransportId duplexFailId = new TransportId("duplex1"); context.checking(new Expectations() {{ + allowing(simplexPlugin).getId(); + will(returnValue(simplexId)); + allowing(simplexFailPlugin).getId(); + will(returnValue(simplexFailId)); + allowing(duplexPlugin).getId(); + will(returnValue(duplexId)); // start() // First simplex plugin oneOf(pluginConfig).getSimplexFactories();