mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-12 10:49:06 +01:00
Converted plugin executor to ScheduledExecutorService.
No Thread.sleep() till Brooklyn.
This commit is contained in:
@@ -1,8 +1,9 @@
|
||||
package net.sf.briar.api.plugins;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
|
||||
public interface BatchPluginFactory {
|
||||
|
||||
BatchPlugin createPlugin(Executor e, BatchPluginCallback callback);
|
||||
BatchPlugin createPlugin(ScheduledExecutorService pluginExecutor,
|
||||
BatchPluginCallback callback);
|
||||
}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
package net.sf.briar.api.plugins;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
|
||||
public interface StreamPluginFactory {
|
||||
|
||||
StreamPlugin createPlugin(Executor e, StreamPluginCallback callback);
|
||||
StreamPlugin createPlugin(ScheduledExecutorService pluginExecutor,
|
||||
StreamPluginCallback callback);
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -51,7 +51,7 @@ class PluginManagerImpl implements PluginManager {
|
||||
"net.sf.briar.plugins.socket.SimpleSocketPluginFactory"
|
||||
};
|
||||
|
||||
private final Executor pluginExecutor;
|
||||
private final ScheduledExecutorService pluginExecutor;
|
||||
private final DatabaseComponent db;
|
||||
private final Poller poller;
|
||||
private final ConnectionDispatcher dispatcher;
|
||||
@@ -60,7 +60,7 @@ class PluginManagerImpl implements PluginManager {
|
||||
private final List<StreamPlugin> streamPlugins; // Locking: this
|
||||
|
||||
@Inject
|
||||
PluginManagerImpl(@PluginExecutor Executor pluginExecutor,
|
||||
PluginManagerImpl(@PluginExecutor ScheduledExecutorService pluginExecutor,
|
||||
DatabaseComponent db, Poller poller,
|
||||
ConnectionDispatcher dispatcher, UiCallback uiCallback) {
|
||||
this.pluginExecutor = pluginExecutor;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package net.sf.briar.plugins;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
|
||||
import net.sf.briar.api.plugins.PluginExecutor;
|
||||
import net.sf.briar.api.plugins.PluginManager;
|
||||
@@ -13,8 +13,9 @@ public class PluginsModule extends AbstractModule {
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(Executor.class).annotatedWith(PluginExecutor.class).toInstance(
|
||||
Executors.newCachedThreadPool());
|
||||
bind(ScheduledExecutorService.class).annotatedWith(
|
||||
PluginExecutor.class).toInstance(
|
||||
Executors.newScheduledThreadPool(1));
|
||||
bind(PluginManager.class).to(
|
||||
PluginManagerImpl.class).in(Singleton.class);
|
||||
bind(Poller.class).to(PollerImpl.class);
|
||||
|
||||
@@ -7,7 +7,8 @@ import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -38,7 +39,7 @@ class BluetoothPlugin implements StreamPlugin {
|
||||
private static final Logger LOG =
|
||||
Logger.getLogger(BluetoothPlugin.class.getName());
|
||||
|
||||
private final Executor pluginExecutor;
|
||||
private final ScheduledExecutorService pluginExecutor;
|
||||
private final StreamPluginCallback callback;
|
||||
private final long pollingInterval;
|
||||
private final Object discoveryLock = new Object();
|
||||
@@ -47,7 +48,7 @@ class BluetoothPlugin implements StreamPlugin {
|
||||
private LocalDevice localDevice = null; // Locking: this
|
||||
private StreamConnectionNotifier socket = null; // Locking: this
|
||||
|
||||
BluetoothPlugin(@PluginExecutor Executor pluginExecutor,
|
||||
BluetoothPlugin(@PluginExecutor ScheduledExecutorService pluginExecutor,
|
||||
StreamPluginCallback callback, long pollingInterval) {
|
||||
this.pluginExecutor = pluginExecutor;
|
||||
this.callback = callback;
|
||||
@@ -376,18 +377,11 @@ class BluetoothPlugin implements StreamPlugin {
|
||||
return;
|
||||
}
|
||||
// Close the socket when the invitation times out
|
||||
pluginExecutor.execute(new Runnable() {
|
||||
pluginExecutor.schedule(new Runnable() {
|
||||
public void run() {
|
||||
try {
|
||||
Thread.sleep(c.getTimeout());
|
||||
} catch(InterruptedException e) {
|
||||
if(LOG.isLoggable(Level.INFO))
|
||||
LOG.info("Interrupted while waiting for invitation");
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
tryToClose(scn);
|
||||
}
|
||||
});
|
||||
}, c.getTimeout(), TimeUnit.MILLISECONDS);
|
||||
try {
|
||||
StreamConnection s = scn.acceptAndOpen();
|
||||
c.addConnection(s);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package net.sf.briar.plugins.bluetooth;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
|
||||
import net.sf.briar.api.plugins.PluginExecutor;
|
||||
import net.sf.briar.api.plugins.StreamPlugin;
|
||||
@@ -11,7 +11,8 @@ public class BluetoothPluginFactory implements StreamPluginFactory {
|
||||
|
||||
private static final long POLLING_INTERVAL = 3L * 60L * 1000L; // 3 mins
|
||||
|
||||
public StreamPlugin createPlugin(@PluginExecutor Executor pluginExecutor,
|
||||
public StreamPlugin createPlugin(
|
||||
@PluginExecutor ScheduledExecutorService pluginExecutor,
|
||||
StreamPluginCallback callback) {
|
||||
return new BluetoothPlugin(pluginExecutor, callback, POLLING_INTERVAL);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package net.sf.briar.plugins.file;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
|
||||
import net.sf.briar.api.plugins.BatchPlugin;
|
||||
import net.sf.briar.api.plugins.BatchPluginCallback;
|
||||
@@ -12,7 +12,8 @@ public class RemovableDrivePluginFactory implements BatchPluginFactory {
|
||||
|
||||
private static final long POLLING_INTERVAL = 10L * 1000L; // 10 seconds
|
||||
|
||||
public BatchPlugin createPlugin(@PluginExecutor Executor pluginExecutor,
|
||||
public BatchPlugin createPlugin(
|
||||
@PluginExecutor ScheduledExecutorService pluginExecutor,
|
||||
BatchPluginCallback callback) {
|
||||
RemovableDriveFinder finder;
|
||||
RemovableDriveMonitor monitor;
|
||||
|
||||
@@ -10,7 +10,7 @@ import java.net.Socket;
|
||||
import java.net.SocketTimeoutException;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -25,7 +25,7 @@ class LanSocketPlugin extends SimpleSocketPlugin {
|
||||
private static final Logger LOG =
|
||||
Logger.getLogger(LanSocketPlugin.class.getName());
|
||||
|
||||
LanSocketPlugin(@PluginExecutor Executor pluginExecutor,
|
||||
LanSocketPlugin(@PluginExecutor ScheduledExecutorService pluginExecutor,
|
||||
StreamPluginCallback callback, long pollingInterval) {
|
||||
super(pluginExecutor, callback, pollingInterval);
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ import java.net.Socket;
|
||||
import java.net.SocketAddress;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -31,7 +31,7 @@ class SimpleSocketPlugin extends SocketPlugin {
|
||||
private static final Logger LOG =
|
||||
Logger.getLogger(SimpleSocketPlugin.class.getName());
|
||||
|
||||
SimpleSocketPlugin(@PluginExecutor Executor pluginExecutor,
|
||||
SimpleSocketPlugin(@PluginExecutor ScheduledExecutorService pluginExecutor,
|
||||
StreamPluginCallback callback, long pollingInterval) {
|
||||
super(pluginExecutor, callback, pollingInterval);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package net.sf.briar.plugins.socket;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
|
||||
import net.sf.briar.api.plugins.PluginExecutor;
|
||||
import net.sf.briar.api.plugins.StreamPlugin;
|
||||
@@ -11,7 +11,8 @@ public class SimpleSocketPluginFactory implements StreamPluginFactory {
|
||||
|
||||
private static final long POLLING_INTERVAL = 5L * 60L * 1000L; // 5 mins
|
||||
|
||||
public StreamPlugin createPlugin(@PluginExecutor Executor pluginExecutor,
|
||||
public StreamPlugin createPlugin(
|
||||
@PluginExecutor ScheduledExecutorService pluginExecutor,
|
||||
StreamPluginCallback callback) {
|
||||
return new SimpleSocketPlugin(pluginExecutor, callback,
|
||||
POLLING_INTERVAL);
|
||||
|
||||
@@ -6,7 +6,7 @@ import java.net.Socket;
|
||||
import java.net.SocketAddress;
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -22,7 +22,7 @@ abstract class SocketPlugin implements StreamPlugin {
|
||||
private static final Logger LOG =
|
||||
Logger.getLogger(SocketPlugin.class.getName());
|
||||
|
||||
protected final Executor pluginExecutor;
|
||||
protected final ScheduledExecutorService pluginExecutor;
|
||||
protected final StreamPluginCallback callback;
|
||||
|
||||
private final long pollingInterval;
|
||||
@@ -37,7 +37,8 @@ abstract class SocketPlugin implements StreamPlugin {
|
||||
protected abstract SocketAddress getLocalSocketAddress();
|
||||
protected abstract SocketAddress getRemoteSocketAddress(ContactId c);
|
||||
|
||||
protected SocketPlugin(@PluginExecutor Executor pluginExecutor,
|
||||
protected SocketPlugin(
|
||||
@PluginExecutor ScheduledExecutorService pluginExecutor,
|
||||
StreamPluginCallback callback, long pollingInterval) {
|
||||
this.pluginExecutor = pluginExecutor;
|
||||
this.callback = callback;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package net.sf.briar.plugins;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import net.sf.briar.BriarTestCase;
|
||||
@@ -43,7 +43,7 @@ public class PluginManagerImplTest extends BriarTestCase {
|
||||
with(any(TransportProperties.class)));
|
||||
oneOf(poller).stopPolling();
|
||||
}});
|
||||
Executor executor = Executors.newCachedThreadPool();
|
||||
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
|
||||
PluginManagerImpl p = new PluginManagerImpl(executor, db, poller,
|
||||
dispatcher, uiCallback);
|
||||
// We expect either 2 or 3 plugins to be started, depending on whether
|
||||
|
||||
@@ -2,8 +2,8 @@ package net.sf.briar.plugins.bluetooth;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
|
||||
import net.sf.briar.api.ContactId;
|
||||
import net.sf.briar.api.TransportConfig;
|
||||
@@ -24,8 +24,8 @@ public class BluetoothClientTest extends StreamClientTest {
|
||||
// Create the plugin
|
||||
callback = new ClientCallback(new TransportConfig(),
|
||||
new TransportProperties(), remote);
|
||||
Executor e = Executors.newCachedThreadPool();
|
||||
plugin = new BluetoothPlugin(e, callback, 0L);
|
||||
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
|
||||
plugin = new BluetoothPlugin(executor, callback, 0L);
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package net.sf.briar.plugins.bluetooth;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
|
||||
import net.sf.briar.api.TransportConfig;
|
||||
import net.sf.briar.api.TransportProperties;
|
||||
@@ -19,8 +19,8 @@ public class BluetoothServerTest extends StreamServerTest {
|
||||
// Create the plugin
|
||||
callback = new ServerCallback(new TransportConfig(), local,
|
||||
Collections.singletonMap(contactId, new TransportProperties()));
|
||||
Executor e = Executors.newCachedThreadPool();
|
||||
plugin = new BluetoothPlugin(e, callback, 0L);
|
||||
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
|
||||
plugin = new BluetoothPlugin(executor, callback, 0L);
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
|
||||
@@ -2,8 +2,8 @@ package net.sf.briar.plugins.socket;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
|
||||
import net.sf.briar.api.ContactId;
|
||||
import net.sf.briar.api.TransportConfig;
|
||||
@@ -24,8 +24,8 @@ public class LanSocketClientTest extends StreamClientTest {
|
||||
// Create the plugin
|
||||
callback = new ClientCallback(new TransportConfig(),
|
||||
new TransportProperties(), remote);
|
||||
Executor e = Executors.newCachedThreadPool();
|
||||
plugin = new LanSocketPlugin(e, callback, 0L);
|
||||
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
|
||||
plugin = new LanSocketPlugin(executor, callback, 0L);
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package net.sf.briar.plugins.socket;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
|
||||
import net.sf.briar.api.TransportConfig;
|
||||
import net.sf.briar.api.TransportProperties;
|
||||
@@ -16,8 +16,8 @@ public class LanSocketServerTest extends StreamServerTest {
|
||||
callback = new ServerCallback(new TransportConfig(),
|
||||
new TransportProperties(),
|
||||
Collections.singletonMap(contactId, new TransportProperties()));
|
||||
Executor e = Executors.newCachedThreadPool();
|
||||
plugin = new LanSocketPlugin(e, callback, 0L);
|
||||
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
|
||||
plugin = new LanSocketPlugin(executor, callback, 0L);
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
|
||||
@@ -8,6 +8,7 @@ import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
@@ -29,8 +30,8 @@ public class SimpleSocketPluginTest extends BriarTestCase {
|
||||
StreamCallback callback = new StreamCallback();
|
||||
callback.local.put("internal", "127.0.0.1");
|
||||
callback.local.put("port", "0");
|
||||
SimpleSocketPlugin plugin = new SimpleSocketPlugin(
|
||||
Executors.newCachedThreadPool(), callback, 0L);
|
||||
ScheduledExecutorService e = Executors.newScheduledThreadPool(1);
|
||||
SimpleSocketPlugin plugin = new SimpleSocketPlugin(e, callback, 0L);
|
||||
plugin.start();
|
||||
// The plugin should have bound a socket and stored the port number
|
||||
callback.latch.await(1, TimeUnit.SECONDS);
|
||||
@@ -63,8 +64,8 @@ public class SimpleSocketPluginTest extends BriarTestCase {
|
||||
@Test
|
||||
public void testOutgoingConnection() throws Exception {
|
||||
StreamCallback callback = new StreamCallback();
|
||||
SimpleSocketPlugin plugin = new SimpleSocketPlugin(
|
||||
Executors.newCachedThreadPool(), callback, 0L);
|
||||
ScheduledExecutorService e = Executors.newScheduledThreadPool(1);
|
||||
SimpleSocketPlugin plugin = new SimpleSocketPlugin(e, callback, 0L);
|
||||
plugin.start();
|
||||
// Listen on a local port
|
||||
final ServerSocket ss = new ServerSocket();
|
||||
|
||||
Reference in New Issue
Block a user