Use the MessagesManager to actually persist messages.

This commit is contained in:
Jon Chambers 2020-08-06 17:51:42 -04:00 committed by Jon Chambers
parent 5fad8f74b1
commit 0fcf28e7e7
3 changed files with 14 additions and 13 deletions

View File

@ -375,7 +375,7 @@ public class WhisperServerService extends Application<WhisperServerConfiguration
TurnTokenGenerator turnTokenGenerator = new TurnTokenGenerator(config.getTurnConfiguration()); TurnTokenGenerator turnTokenGenerator = new TurnTokenGenerator(config.getTurnConfiguration());
RecaptchaClient recaptchaClient = new RecaptchaClient(config.getRecaptchaConfiguration().getSecret()); RecaptchaClient recaptchaClient = new RecaptchaClient(config.getRecaptchaConfiguration().getSecret());
MessagePersister messagePersister = new MessagePersister(messagesCache, messagesClient, messages, pubSubManager, pushSender, accountsManager,config.getMessageCacheConfiguration().getPersistDelayMinutes(), TimeUnit.MINUTES); MessagePersister messagePersister = new MessagePersister(messagesClient, messagesManager, pubSubManager, pushSender, accountsManager,config.getMessageCacheConfiguration().getPersistDelayMinutes(), TimeUnit.MINUTES);
RedisClusterMessagePersister clusterMessagePersister = new RedisClusterMessagePersister(clusterMessagesCache, messages, pubSubManager, pushSender, accountsManager, Duration.ofMinutes(config.getMessageCacheConfiguration().getPersistDelayMinutes())); RedisClusterMessagePersister clusterMessagePersister = new RedisClusterMessagePersister(clusterMessagesCache, messages, pubSubManager, pushSender, accountsManager, Duration.ofMinutes(config.getMessageCacheConfiguration().getPersistDelayMinutes()));
DirectoryReconciliationClient directoryReconciliationClient = new DirectoryReconciliationClient(config.getDirectoryConfiguration().getDirectoryServerConfiguration()); DirectoryReconciliationClient directoryReconciliationClient = new DirectoryReconciliationClient(config.getDirectoryConfiguration().getDirectoryServerConfiguration());

View File

@ -33,7 +33,6 @@ import static com.codahale.metrics.MetricRegistry.name;
public class MessagePersister implements Managed, Runnable { public class MessagePersister implements Managed, Runnable {
private final MessagesCache messagesCache;
private final Logger logger = LoggerFactory.getLogger(MessagePersister.class); private final Logger logger = LoggerFactory.getLogger(MessagePersister.class);
private final MetricRegistry metricRegistry = SharedMetricRegistries.getOrCreate(Constants.METRICS_NAME); private final MetricRegistry metricRegistry = SharedMetricRegistries.getOrCreate(Constants.METRICS_NAME);
private final Timer getQueuesTimer = metricRegistry.timer(name(MessagesCache.class, "getQueues" )); private final Timer getQueuesTimer = metricRegistry.timer(name(MessagesCache.class, "getQueues" ));
@ -47,10 +46,10 @@ public class MessagePersister implements Managed, Runnable {
private final AtomicBoolean running = new AtomicBoolean(true); private final AtomicBoolean running = new AtomicBoolean(true);
private final ReplicatedJedisPool jedisPool; private final ReplicatedJedisPool jedisPool;
private final Messages database;
private final long delayTime; private final long delayTime;
private final TimeUnit delayTimeUnit; private final TimeUnit delayTimeUnit;
private final MessagesManager messagesManager;
private final PubSubManager pubSubManager; private final PubSubManager pubSubManager;
private final PushSender pushSender; private final PushSender pushSender;
private final AccountsManager accountsManager; private final AccountsManager accountsManager;
@ -59,9 +58,8 @@ public class MessagePersister implements Managed, Runnable {
private boolean finished = false; private boolean finished = false;
public MessagePersister(final MessagesCache messagesCache, public MessagePersister(final ReplicatedJedisPool jedisPool,
final ReplicatedJedisPool jedisPool, final MessagesManager messagesManager,
final Messages database,
final PubSubManager pubSubManager, final PubSubManager pubSubManager,
final PushSender pushSender, final PushSender pushSender,
final AccountsManager accountsManager, final AccountsManager accountsManager,
@ -69,10 +67,9 @@ public class MessagePersister implements Managed, Runnable {
final TimeUnit delayTimeUnit) final TimeUnit delayTimeUnit)
throws IOException throws IOException
{ {
this.messagesCache = messagesCache;
this.jedisPool = jedisPool; this.jedisPool = jedisPool;
this.database = database;
this.messagesManager = messagesManager;
this.pubSubManager = pubSubManager; this.pubSubManager = pubSubManager;
this.pushSender = pushSender; this.pushSender = pushSender;
this.accountsManager = accountsManager; this.accountsManager = accountsManager;
@ -160,12 +157,10 @@ public class MessagePersister implements Managed, Runnable {
envelope = envelope.toBuilder().clearServerGuid().build(); envelope = envelope.toBuilder().clearServerGuid().build();
database.store(guid, envelope, key.getAddress(), key.getDeviceId()); messagesManager.persistMessage(key.getAddress(), destinationUuid, envelope, guid, key.getDeviceId(), score);
} catch (InvalidProtocolBufferException e) { } catch (InvalidProtocolBufferException e) {
logger.error("Error parsing envelope", e); logger.error("Error parsing envelope", e);
} }
messagesCache.remove(key.getAddress(), destinationUuid, key.getDeviceId(), score);
} }
private List<byte[]> getQueuesToPersist() { private List<byte[]> getQueuesToPersist() {

View File

@ -121,4 +121,10 @@ public class MessagesManager {
} }
} }
public void persistMessage(String destination, UUID destinationUuid, Envelope envelope, UUID messageGuid, long deviceId, long id) {
messages.store(messageGuid, envelope, destination, deviceId);
final Optional<OutgoingMessageEntity> maybeRemovedMessage = messagesCache.remove(destination, destinationUuid, deviceId, id);
removeByIdExperiment.compareSupplierResultAsync(maybeRemovedMessage, () -> clusterMessagesCache.remove(destination, destinationUuid, deviceId, id), experimentExecutor);
}
} }