diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java index 85d0e8036..8ce287f0d 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java @@ -344,7 +344,7 @@ public class WhisperServerService extends Application accountDatabaseCrawlerListeners = new ArrayList<>(); accountDatabaseCrawlerListeners.add(new PushFeedbackProcessor(accountsManager, directoryQueue)); diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/MessagePersister.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/MessagePersister.java index 3dc8db775..fd8142083 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/MessagePersister.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/MessagePersister.java @@ -28,9 +28,10 @@ import static com.codahale.metrics.MetricRegistry.name; public class MessagePersister implements Managed { - private final MessagesCache messagesCache; - private final MessagesManager messagesManager; - private final AccountsManager accountsManager; + private final MessagesCache messagesCache; + private final MessagesManager messagesManager; + private final AccountsManager accountsManager; + private final FeatureFlagsManager featureFlagsManager; private final Duration persistDelay; @@ -52,24 +53,29 @@ public class MessagePersister implements Managed { private static final Logger logger = LoggerFactory.getLogger(MessagePersister.class); - public MessagePersister(final MessagesCache messagesCache, final MessagesManager messagesManager, final AccountsManager accountsManager, final Duration persistDelay) { - this.messagesCache = messagesCache; - this.messagesManager = messagesManager; - this.accountsManager = accountsManager; - this.persistDelay = persistDelay; + public MessagePersister(final MessagesCache messagesCache, final MessagesManager messagesManager, final AccountsManager accountsManager, final FeatureFlagsManager featureFlagsManager, final Duration persistDelay) { + this.messagesCache = messagesCache; + this.messagesManager = messagesManager; + this.accountsManager = accountsManager; + this.featureFlagsManager = featureFlagsManager; + this.persistDelay = persistDelay; for (int i = 0; i < workerThreads.length; i++) { workerThreads[i] = new Thread(() -> { while (running) { - try { - final int queuesPersisted = persistNextQueues(Instant.now()); - queueCountHistogram.update(queuesPersisted); + if (featureFlagsManager.isFeatureFlagActive("DISABLE_MESSAGE_PERSISTER")) { + Util.sleep(1000); + } else { + try { + final int queuesPersisted = persistNextQueues(Instant.now()); + queueCountHistogram.update(queuesPersisted); - if (queuesPersisted == 0) { - Util.sleep(100); + if (queuesPersisted == 0) { + Util.sleep(100); + } + } catch (final Throwable t) { + logger.warn("Failed to persist queues", t); } - } catch (final Throwable t) { - logger.warn("Failed to persist queues", t); } } }, "MessagePersisterWorker-" + i); diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/storage/MessagePersisterIntegrationTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/storage/MessagePersisterIntegrationTest.java index 714dc9cde..a6c078f2e 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/storage/MessagePersisterIntegrationTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/storage/MessagePersisterIntegrationTest.java @@ -67,7 +67,7 @@ public class MessagePersisterIntegrationTest extends AbstractRedisClusterTest { notificationExecutorService = Executors.newSingleThreadExecutor(); messagesCache = new MessagesCache(getRedisCluster(), getRedisCluster(), notificationExecutorService); messagesManager = new MessagesManager(messages, messagesCache, mock(PushLatencyManager.class)); - messagePersister = new MessagePersister(messagesCache, messagesManager, accountsManager, PERSIST_DELAY); + messagePersister = new MessagePersister(messagesCache, messagesManager, accountsManager, mock(FeatureFlagsManager.class), PERSIST_DELAY); account = mock(Account.class); diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/storage/MessagePersisterTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/storage/MessagePersisterTest.java index a63b49dc2..4af7e66f3 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/storage/MessagePersisterTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/storage/MessagePersisterTest.java @@ -68,7 +68,7 @@ public class MessagePersisterTest extends AbstractRedisClusterTest { notificationExecutorService = Executors.newSingleThreadExecutor(); messagesCache = new MessagesCache(getRedisCluster(), getRedisCluster(), notificationExecutorService); - messagePersister = new MessagePersister(messagesCache, messagesManager, accountsManager, PERSIST_DELAY); + messagePersister = new MessagePersister(messagesCache, messagesManager, accountsManager, mock(FeatureFlagsManager.class), PERSIST_DELAY); doAnswer(invocation -> { final String destination = invocation.getArgument(0, String.class);