mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-18 21:59:54 +01:00
Use a single-threaded executor for the database.
This ensures that if two DatabaseExecutor tasks update the database and broadcast events, the events are broadcast in the same order as the updates occurred.
This commit is contained in:
@@ -25,9 +25,6 @@ import com.google.inject.Provides;
|
|||||||
|
|
||||||
public class DatabaseModule extends AbstractModule {
|
public class DatabaseModule extends AbstractModule {
|
||||||
|
|
||||||
/** The maximum number of executor threads. */
|
|
||||||
private static final int MAX_EXECUTOR_THREADS = 10;
|
|
||||||
|
|
||||||
private final ExecutorService databaseExecutor;
|
private final ExecutorService databaseExecutor;
|
||||||
|
|
||||||
public DatabaseModule() {
|
public DatabaseModule() {
|
||||||
@@ -36,9 +33,9 @@ public class DatabaseModule extends AbstractModule {
|
|||||||
// Discard tasks that are submitted during shutdown
|
// Discard tasks that are submitted during shutdown
|
||||||
RejectedExecutionHandler policy =
|
RejectedExecutionHandler policy =
|
||||||
new ThreadPoolExecutor.DiscardPolicy();
|
new ThreadPoolExecutor.DiscardPolicy();
|
||||||
// Create a limited # of threads and keep them in the pool for 60 secs
|
// Use a single thread and keep it in the pool for 60 secs
|
||||||
databaseExecutor = new ThreadPoolExecutor(0, MAX_EXECUTOR_THREADS,
|
databaseExecutor = new ThreadPoolExecutor(0, 1, 60, SECONDS, queue,
|
||||||
60, SECONDS, queue, policy);
|
policy);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void configure() {
|
protected void configure() {
|
||||||
|
|||||||
@@ -276,7 +276,7 @@ abstract class DuplexConnection implements EventListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This task runs on a database thread
|
// This task runs on the database thread
|
||||||
private class ReceiveAck implements Runnable {
|
private class ReceiveAck implements Runnable {
|
||||||
|
|
||||||
private final Ack ack;
|
private final Ack ack;
|
||||||
@@ -315,7 +315,7 @@ abstract class DuplexConnection implements EventListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This task runs on a database thread
|
// This task runs on the database thread
|
||||||
private class ReceiveMessage implements Runnable {
|
private class ReceiveMessage implements Runnable {
|
||||||
|
|
||||||
private final Message message;
|
private final Message message;
|
||||||
@@ -334,7 +334,7 @@ abstract class DuplexConnection implements EventListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This task runs on a database thread
|
// This task runs on the database thread
|
||||||
private class ReceiveOffer implements Runnable {
|
private class ReceiveOffer implements Runnable {
|
||||||
|
|
||||||
private final Offer offer;
|
private final Offer offer;
|
||||||
@@ -353,7 +353,7 @@ abstract class DuplexConnection implements EventListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This task runs on a database thread
|
// This task runs on the database thread
|
||||||
private class ReceiveRequest implements Runnable {
|
private class ReceiveRequest implements Runnable {
|
||||||
|
|
||||||
private final Request request;
|
private final Request request;
|
||||||
@@ -372,7 +372,7 @@ abstract class DuplexConnection implements EventListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This task runs on a database thread
|
// This task runs on the database thread
|
||||||
private class ReceiveRetentionAck implements Runnable {
|
private class ReceiveRetentionAck implements Runnable {
|
||||||
|
|
||||||
private final RetentionAck ack;
|
private final RetentionAck ack;
|
||||||
@@ -391,7 +391,7 @@ abstract class DuplexConnection implements EventListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This task runs on a database thread
|
// This task runs on the database thread
|
||||||
private class ReceiveRetentionUpdate implements Runnable {
|
private class ReceiveRetentionUpdate implements Runnable {
|
||||||
|
|
||||||
private final RetentionUpdate update;
|
private final RetentionUpdate update;
|
||||||
@@ -410,7 +410,7 @@ abstract class DuplexConnection implements EventListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This task runs on a database thread
|
// This task runs on the database thread
|
||||||
private class ReceiveSubscriptionAck implements Runnable {
|
private class ReceiveSubscriptionAck implements Runnable {
|
||||||
|
|
||||||
private final SubscriptionAck ack;
|
private final SubscriptionAck ack;
|
||||||
@@ -429,7 +429,7 @@ abstract class DuplexConnection implements EventListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This task runs on a database thread
|
// This task runs on the database thread
|
||||||
private class ReceiveSubscriptionUpdate implements Runnable {
|
private class ReceiveSubscriptionUpdate implements Runnable {
|
||||||
|
|
||||||
private final SubscriptionUpdate update;
|
private final SubscriptionUpdate update;
|
||||||
@@ -448,7 +448,7 @@ abstract class DuplexConnection implements EventListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This task runs on a database thread
|
// This task runs on the database thread
|
||||||
private class ReceiveTransportAck implements Runnable {
|
private class ReceiveTransportAck implements Runnable {
|
||||||
|
|
||||||
private final TransportAck ack;
|
private final TransportAck ack;
|
||||||
@@ -467,7 +467,7 @@ abstract class DuplexConnection implements EventListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This task runs on a database thread
|
// This task runs on the database thread
|
||||||
private class ReceiveTransportUpdate implements Runnable {
|
private class ReceiveTransportUpdate implements Runnable {
|
||||||
|
|
||||||
private final TransportUpdate update;
|
private final TransportUpdate update;
|
||||||
@@ -486,7 +486,7 @@ abstract class DuplexConnection implements EventListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This task runs on a database thread
|
// This task runs on the database thread
|
||||||
private class GenerateAck implements Runnable {
|
private class GenerateAck implements Runnable {
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
@@ -525,7 +525,7 @@ abstract class DuplexConnection implements EventListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This task runs on a database thread
|
// This task runs on the database thread
|
||||||
private class GenerateBatch implements Runnable {
|
private class GenerateBatch implements Runnable {
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
@@ -564,7 +564,7 @@ abstract class DuplexConnection implements EventListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This task runs on a database thread
|
// This task runs on the database thread
|
||||||
private class GenerateOffer implements Runnable {
|
private class GenerateOffer implements Runnable {
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
@@ -603,7 +603,7 @@ abstract class DuplexConnection implements EventListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This task runs on a database thread
|
// This task runs on the database thread
|
||||||
private class GenerateRequest implements Runnable {
|
private class GenerateRequest implements Runnable {
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
@@ -642,7 +642,7 @@ abstract class DuplexConnection implements EventListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This task runs on a database thread
|
// This task runs on the database thread
|
||||||
private class GenerateRetentionAck implements Runnable {
|
private class GenerateRetentionAck implements Runnable {
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
@@ -679,7 +679,7 @@ abstract class DuplexConnection implements EventListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This task runs on a database thread
|
// This task runs on the database thread
|
||||||
private class GenerateRetentionUpdate implements Runnable {
|
private class GenerateRetentionUpdate implements Runnable {
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
@@ -717,7 +717,7 @@ abstract class DuplexConnection implements EventListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This task runs on a database thread
|
// This task runs on the database thread
|
||||||
private class GenerateSubscriptionAck implements Runnable {
|
private class GenerateSubscriptionAck implements Runnable {
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
@@ -754,7 +754,7 @@ abstract class DuplexConnection implements EventListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This task runs on a database thread
|
// This task runs on the database thread
|
||||||
private class GenerateSubscriptionUpdate implements Runnable {
|
private class GenerateSubscriptionUpdate implements Runnable {
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
@@ -792,7 +792,7 @@ abstract class DuplexConnection implements EventListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This task runs on a database thread
|
// This task runs on the database thread
|
||||||
private class GenerateTransportAcks implements Runnable {
|
private class GenerateTransportAcks implements Runnable {
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
@@ -830,7 +830,7 @@ abstract class DuplexConnection implements EventListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This task runs on a database thread
|
// This task runs on the database thread
|
||||||
private class GenerateTransportUpdates implements Runnable {
|
private class GenerateTransportUpdates implements Runnable {
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
|
|||||||
Reference in New Issue
Block a user