mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-17 13:19:52 +01:00
Moved lifecycle management into briar-core and reconfigured executors.
CryptoExecutor and DatabaseExecutor now use bounded thread pools with unbounded queues, since running too many tasks in parallel is likely to harm performance; IncomingConnectionExecutor, PluginExecutor and ReliabilityExecutor use unbounded thread pools with direct handoff, since their tasks may run indefinitely. There are no longer any bounded executors, and all executors discard tasks when shutting down, which fixes issue #3612189. Responsibility for starting and stopping services has been moved from BriarService in briar-android to LifecycleManagerImpl in briar-core. However, BriarService is still responsible for stopping the Android-specific executors, which is ugly. It would be better if executors registered themselves with LifecycleManager.
This commit is contained in:
@@ -48,6 +48,9 @@ import net.sf.briar.lifecycle.LifecycleModule;
|
||||
import net.sf.briar.messaging.MessagingModule;
|
||||
import net.sf.briar.messaging.duplex.DuplexMessagingModule;
|
||||
import net.sf.briar.messaging.simplex.SimplexMessagingModule;
|
||||
import net.sf.briar.plugins.JavaSePluginsModule;
|
||||
import net.sf.briar.plugins.PluginsModule;
|
||||
import net.sf.briar.reliability.ReliabilityModule;
|
||||
import net.sf.briar.serial.SerialModule;
|
||||
import net.sf.briar.transport.TransportModule;
|
||||
|
||||
@@ -79,9 +82,11 @@ public class ProtocolIntegrationTest extends BriarTestCase {
|
||||
public ProtocolIntegrationTest() throws Exception {
|
||||
super();
|
||||
Injector i = Guice.createInjector(new TestDatabaseModule(),
|
||||
new ClockModule(), new CryptoModule(), new DatabaseModule(),
|
||||
new LifecycleModule(), new MessagingModule(),
|
||||
new DuplexMessagingModule(), new SimplexMessagingModule(),
|
||||
new TestUiModule(), new ClockModule(), new CryptoModule(),
|
||||
new DatabaseModule(), new LifecycleModule(),
|
||||
new MessagingModule(), new DuplexMessagingModule(),
|
||||
new SimplexMessagingModule(), new PluginsModule(),
|
||||
new JavaSePluginsModule(), new ReliabilityModule(),
|
||||
new SerialModule(), new TransportModule());
|
||||
connectionReaderFactory = i.getInstance(ConnectionReaderFactory.class);
|
||||
connectionWriterFactory = i.getInstance(ConnectionWriterFactory.class);
|
||||
|
||||
24
briar-tests/src/net/sf/briar/TestUiModule.java
Normal file
24
briar-tests/src/net/sf/briar/TestUiModule.java
Normal file
@@ -0,0 +1,24 @@
|
||||
package net.sf.briar;
|
||||
|
||||
import net.sf.briar.api.ui.UiCallback;
|
||||
|
||||
import com.google.inject.AbstractModule;
|
||||
|
||||
public class TestUiModule extends AbstractModule {
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(UiCallback.class).toInstance(new UiCallback() {
|
||||
|
||||
public int showChoice(String[] options, String... message) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
public boolean showConfirmationMessage(String... message) {
|
||||
return false;
|
||||
}
|
||||
|
||||
public void showMessage(String... message) {}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -9,6 +9,7 @@ import java.util.Random;
|
||||
|
||||
import net.sf.briar.BriarTestCase;
|
||||
import net.sf.briar.TestDatabaseModule;
|
||||
import net.sf.briar.TestUiModule;
|
||||
import net.sf.briar.TestUtils;
|
||||
import net.sf.briar.api.Author;
|
||||
import net.sf.briar.api.AuthorId;
|
||||
@@ -38,6 +39,9 @@ import net.sf.briar.lifecycle.LifecycleModule;
|
||||
import net.sf.briar.messaging.MessagingModule;
|
||||
import net.sf.briar.messaging.duplex.DuplexMessagingModule;
|
||||
import net.sf.briar.plugins.ImmediateExecutor;
|
||||
import net.sf.briar.plugins.JavaSePluginsModule;
|
||||
import net.sf.briar.plugins.PluginsModule;
|
||||
import net.sf.briar.reliability.ReliabilityModule;
|
||||
import net.sf.briar.serial.SerialModule;
|
||||
import net.sf.briar.transport.TransportModule;
|
||||
|
||||
@@ -80,11 +84,13 @@ public class SimplexMessagingIntegrationTest extends BriarTestCase {
|
||||
}
|
||||
|
||||
private Injector createInjector(File dir) {
|
||||
return Guice.createInjector(new ClockModule(), new CryptoModule(),
|
||||
return Guice.createInjector(new TestDatabaseModule(dir),
|
||||
new TestUiModule(), new ClockModule(), new CryptoModule(),
|
||||
new DatabaseModule(), new LifecycleModule(),
|
||||
new MessagingModule(), new SerialModule(),
|
||||
new TestDatabaseModule(dir), new SimplexMessagingModule(),
|
||||
new TransportModule(), new DuplexMessagingModule());
|
||||
new MessagingModule(), new DuplexMessagingModule(),
|
||||
new SimplexMessagingModule(), new PluginsModule(),
|
||||
new JavaSePluginsModule(), new ReliabilityModule(),
|
||||
new SerialModule(), new TransportModule());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
package net.sf.briar.plugins;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
import net.sf.briar.BriarTestCase;
|
||||
import net.sf.briar.TestUtils;
|
||||
import net.sf.briar.api.TransportId;
|
||||
import net.sf.briar.api.android.AndroidExecutor;
|
||||
import net.sf.briar.api.db.DatabaseComponent;
|
||||
import net.sf.briar.api.plugins.duplex.DuplexPlugin;
|
||||
import net.sf.briar.api.plugins.duplex.DuplexPluginCallback;
|
||||
@@ -29,9 +28,7 @@ public class PluginManagerImplTest extends BriarTestCase {
|
||||
@Test
|
||||
public void testStartAndStop() throws Exception {
|
||||
Mockery context = new Mockery();
|
||||
final ExecutorService pluginExecutor = Executors.newCachedThreadPool();
|
||||
final AndroidExecutor androidExecutor =
|
||||
context.mock(AndroidExecutor.class);
|
||||
final Executor pluginExecutor = Executors.newCachedThreadPool();
|
||||
final SimplexPluginConfig simplexPluginConfig =
|
||||
context.mock(SimplexPluginConfig.class);
|
||||
final DuplexPluginConfig duplexPluginConfig =
|
||||
@@ -119,12 +116,10 @@ public class PluginManagerImplTest extends BriarTestCase {
|
||||
// Stop the plugins
|
||||
oneOf(simplexPlugin).stop();
|
||||
oneOf(duplexPlugin).stop();
|
||||
// Shut down the executor
|
||||
oneOf(androidExecutor).shutdown();
|
||||
}});
|
||||
PluginManagerImpl p = new PluginManagerImpl(pluginExecutor,
|
||||
androidExecutor, simplexPluginConfig, duplexPluginConfig, db,
|
||||
poller, dispatcher, uiCallback);
|
||||
simplexPluginConfig, duplexPluginConfig, db, poller,
|
||||
dispatcher, uiCallback);
|
||||
// Two plugins should be started and stopped
|
||||
assertEquals(2, p.start());
|
||||
assertEquals(2, p.stop());
|
||||
|
||||
Reference in New Issue
Block a user