Repair queue metadata before persisting queues.

This commit is contained in:
Jon Chambers
2020-10-04 12:50:24 -04:00
committed by Jon Chambers
parent df7f209ebc
commit 952cfae4e6
5 changed files with 71 additions and 1 deletions

View File

@@ -27,6 +27,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@RunWith(JUnitParamsRunner.class)
@@ -71,6 +72,41 @@ public class MessagesCacheTest extends AbstractRedisClusterTest {
assertTrue(messagesCache.insert(messageGuid, DESTINATION_UUID, DESTINATION_DEVICE_ID, generateRandomMessage(messageGuid, sealedSender)) > 0);
}
@Test
public void testRepairMetadata() {
final int distinctUuidCount = 17;
for (int i = 0; i < distinctUuidCount; i++) {
final UUID messageGuid = UUID.randomUUID();
messagesCache.insert(messageGuid, DESTINATION_UUID, DESTINATION_DEVICE_ID, generateRandomMessage(messageGuid, false));
}
assertEquals(distinctUuidCount, messagesCache.getMessagesToPersist(DESTINATION_UUID, DESTINATION_DEVICE_ID, 100).size());
final int duplicateGuidCount = 5;
final UUID messageGuid = UUID.randomUUID();
final MessageProtos.Envelope duplicatedMessage = generateRandomMessage(messageGuid, false);
for (int i = 0; i < duplicateGuidCount; i++) {
messagesCache.insert(messageGuid, DESTINATION_UUID, DESTINATION_DEVICE_ID, duplicatedMessage);
}
assertEquals(distinctUuidCount + 1, messagesCache.getMessagesToPersist(DESTINATION_UUID, DESTINATION_DEVICE_ID, 100).size());
assertFalse(messagesCache.remove(DESTINATION_UUID, DESTINATION_DEVICE_ID, messageGuid).isPresent());
messagesCache.repairMetadata(DESTINATION_UUID, DESTINATION_DEVICE_ID);
assertTrue(messagesCache.remove(DESTINATION_UUID, DESTINATION_DEVICE_ID, messageGuid).isPresent());
final List<MessageProtos.Envelope> messagesToPersist = messagesCache.getMessagesToPersist(DESTINATION_UUID, DESTINATION_DEVICE_ID, 100);
assertEquals(distinctUuidCount, messagesToPersist.size());
messagesCache.remove(DESTINATION_UUID, DESTINATION_DEVICE_ID, messagesToPersist.stream().map(message -> UUID.fromString(message.getServerGuid())).collect(Collectors.toList()));
assertTrue(messagesCache.getMessagesToPersist(DESTINATION_UUID, DESTINATION_DEVICE_ID, 100).isEmpty());
}
@Test
@Parameters({"true", "false"})
public void testRemoveById(final boolean sealedSender) {