From 08291502eb217d3cce1ff3cf3f135effcbb30c01 Mon Sep 17 00:00:00 2001 From: Moxie Marlinspike Date: Sat, 3 Jan 2015 17:24:35 -0800 Subject: [PATCH] Expire in-memory queues after 30 days of inactivity. // FREEBIE --- .../textsecuregcm/storage/StoredMessages.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/StoredMessages.java b/src/main/java/org/whispersystems/textsecuregcm/storage/StoredMessages.java index 909aac599..d72f03487 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/storage/StoredMessages.java +++ b/src/main/java/org/whispersystems/textsecuregcm/storage/StoredMessages.java @@ -27,6 +27,7 @@ import org.whispersystems.textsecuregcm.websocket.WebsocketAddress; import java.util.LinkedList; import java.util.List; +import java.util.concurrent.TimeUnit; import static com.codahale.metrics.MetricRegistry.name; import static org.whispersystems.textsecuregcm.entities.MessageProtos.OutgoingMessageSignal; @@ -57,14 +58,17 @@ public class StoredMessages { public void insert(WebsocketAddress address, OutgoingMessageSignal message) { try (Jedis jedis = jedisPool.getResource()) { + byte[] queue = getKey(address); StoredMessage storedMessage = StoredMessage.newBuilder() .setType(StoredMessage.Type.MESSAGE) .setContent(message.toByteString()) .build(); - long queueSize = jedis.lpush(getKey(address), storedMessage.toByteArray()); + long queueSize = jedis.lpush(queue, storedMessage.toByteArray()); queueSizeHistogram.update(queueSize); + jedis.expireAt(queue, (System.currentTimeMillis() / 1000) + TimeUnit.DAYS.toSeconds(30)); + if (queueSize > 1000) { jedis.ltrim(getKey(address), 0, 999); }