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:
akwizgran
2014-07-04 11:34:40 +01:00
parent 7d9ce4c973
commit f90f7c5e7b
2 changed files with 23 additions and 26 deletions

View File

@@ -25,9 +25,6 @@ import com.google.inject.Provides;
public class DatabaseModule extends AbstractModule {
/** The maximum number of executor threads. */
private static final int MAX_EXECUTOR_THREADS = 10;
private final ExecutorService databaseExecutor;
public DatabaseModule() {
@@ -36,9 +33,9 @@ public class DatabaseModule extends AbstractModule {
// Discard tasks that are submitted during shutdown
RejectedExecutionHandler policy =
new ThreadPoolExecutor.DiscardPolicy();
// Create a limited # of threads and keep them in the pool for 60 secs
databaseExecutor = new ThreadPoolExecutor(0, MAX_EXECUTOR_THREADS,
60, SECONDS, queue, policy);
// Use a single thread and keep it in the pool for 60 secs
databaseExecutor = new ThreadPoolExecutor(0, 1, 60, SECONDS, queue,
policy);
}
protected void configure() {

View File

@@ -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 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 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 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 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 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 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 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 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 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 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 {
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 {
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 {
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 {
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 {
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 {
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 {
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 {
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 {
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 {
public void run() {