mirror of
https://github.com/signalapp/Signal-Server
synced 2026-04-21 09:10:35 +01:00
Return queues to the "to persist" list if something goes wrong during persistence.
This commit is contained in:
committed by
Jon Chambers
parent
a97e0982e3
commit
57d2ef8740
@@ -94,7 +94,15 @@ public class MessagePersister implements Managed {
|
||||
}
|
||||
|
||||
for (final String queue : queuesToPersist) {
|
||||
persistQueue(queue);
|
||||
final UUID accountUuid = MessagesCache.getAccountUuidFromQueueName(queue);
|
||||
final long deviceId = MessagesCache.getDeviceIdFromQueueName(queue);
|
||||
|
||||
try {
|
||||
persistQueue(accountUuid, deviceId);
|
||||
} catch (final Exception e) {
|
||||
logger.warn("Failed to persist queue {}::{}; will schedule for retry", accountUuid, deviceId);
|
||||
messagesCache.addQueueToPersist(accountUuid, deviceId);
|
||||
}
|
||||
}
|
||||
|
||||
queuesPersisted += queuesToPersist.size();
|
||||
@@ -104,10 +112,7 @@ public class MessagePersister implements Managed {
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
void persistQueue(final String queue) {
|
||||
final UUID accountUuid = MessagesCache.getAccountUuidFromQueueName(queue);
|
||||
final long deviceId = MessagesCache.getDeviceIdFromQueueName(queue);
|
||||
|
||||
void persistQueue(final UUID accountUuid, final long deviceId) {
|
||||
final Optional<Account> maybeAccount = accountsManager.get(accountUuid);
|
||||
|
||||
final String accountNumber;
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.google.protobuf.InvalidProtocolBufferException;
|
||||
import io.dropwizard.lifecycle.Managed;
|
||||
import io.lettuce.core.ScoredValue;
|
||||
import io.lettuce.core.ScriptOutputType;
|
||||
import io.lettuce.core.ZAddArgs;
|
||||
import io.lettuce.core.cluster.SlotHash;
|
||||
import io.lettuce.core.cluster.event.ClusterTopologyChangedEvent;
|
||||
import io.lettuce.core.cluster.models.partitions.RedisClusterNode;
|
||||
@@ -322,6 +323,10 @@ public class MessagesCache extends RedisClusterPubSubAdapter<String, String> imp
|
||||
String.valueOf(limit)));
|
||||
}
|
||||
|
||||
void addQueueToPersist(final UUID accountUuid, final long deviceId) {
|
||||
redisCluster.useBinaryCluster(connection -> connection.sync().zadd(getQueueIndexKey(accountUuid, deviceId), ZAddArgs.Builder.nx(), System.currentTimeMillis(), getMessageQueueKey(accountUuid, deviceId)));
|
||||
}
|
||||
|
||||
void lockQueueForPersistence(final UUID accountUuid, final long deviceId) {
|
||||
redisCluster.useBinaryCluster(connection -> connection.sync().setex(getPersistInProgressKey(accountUuid, deviceId), 30, LOCK_VALUE));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user