Changed String for guids to its value object

This commit is contained in:
andsel
2016-09-23 11:51:25 +02:00
parent ac419adbd6
commit 8215e89d77
12 changed files with 174 additions and 117 deletions
@@ -17,6 +17,7 @@ package io.moquette.spi.impl;
import io.moquette.spi.IMessagesStore;
import io.moquette.spi.IMatchingCondition;
import io.moquette.spi.MessageGUID;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -31,11 +32,11 @@ public class MemoryMessagesStore implements IMessagesStore {
private static final Logger LOG = LoggerFactory.getLogger(MemoryMessagesStore.class);
private Map<String, String> m_retainedStore = new HashMap<>();
private Map<String, StoredMessage> m_persistentMessageStore = new HashMap<>();
private Map<String, Map<Integer, String>> m_messageToGuids;
private Map<String, MessageGUID> m_retainedStore = new HashMap<>();
private Map<MessageGUID, StoredMessage> m_persistentMessageStore = new HashMap<>();
private Map<String, Map<Integer, MessageGUID>> m_messageToGuids;
MemoryMessagesStore(Map<String, Map<Integer, String>> messageToGuids) {
MemoryMessagesStore(Map<String, Map<Integer, MessageGUID>> messageToGuids) {
m_messageToGuids = messageToGuids;
}
@@ -44,7 +45,7 @@ public class MemoryMessagesStore implements IMessagesStore {
}
@Override
public void storeRetained(String topic, String guid) {
public void storeRetained(String topic, MessageGUID guid) {
m_retainedStore.put(topic, guid);
}
@@ -54,8 +55,8 @@ public class MemoryMessagesStore implements IMessagesStore {
List<StoredMessage> results = new ArrayList<>();
for (Map.Entry<String, String> entry : m_retainedStore.entrySet()) {
final String guid = entry.getValue();
for (Map.Entry<String, MessageGUID> entry : m_retainedStore.entrySet()) {
final MessageGUID guid = entry.getValue();
StoredMessage storedMsg = m_persistentMessageStore.get(guid);
if (condition.match(entry.getKey())) {
results.add(storedMsg);
@@ -66,21 +67,21 @@ public class MemoryMessagesStore implements IMessagesStore {
}
@Override
public String storePublishForFuture(StoredMessage evt) {
public MessageGUID storePublishForFuture(StoredMessage evt) {
LOG.debug("storePublishForFuture store evt {}", evt);
String guid = UUID.randomUUID().toString();
MessageGUID guid = new MessageGUID(UUID.randomUUID().toString());
evt.setGuid(guid);
m_persistentMessageStore.put(guid, evt);
HashMap<Integer, String> guids = (HashMap<Integer, String>) defaultGet(m_messageToGuids,
evt.getClientID(), new HashMap<Integer, String>());
HashMap<Integer, MessageGUID> guids = (HashMap<Integer, MessageGUID>) defaultGet(m_messageToGuids,
evt.getClientID(), new HashMap<Integer, MessageGUID>());
guids.put(evt.getMessageID(), guid);
return guid;
}
@Override
public List<StoredMessage> listMessagesInSession(Collection<String> guids) {
public List<StoredMessage> listMessagesInSession(Collection<MessageGUID> guids) {
List<StoredMessage> ret = new ArrayList<>();
for (String guid : guids) {
for (MessageGUID guid : guids) {
ret.add(m_persistentMessageStore.get(guid));
}
return ret;
@@ -88,11 +89,17 @@ public class MemoryMessagesStore implements IMessagesStore {
@Override
public void dropMessagesInSession(String clientID) {
m_persistentMessageStore.remove(clientID);
Map<Integer, MessageGUID> messageGUIDMap = m_messageToGuids.get(clientID);
if (messageGUIDMap == null || messageGUIDMap.isEmpty()) {
return;
}
for (MessageGUID guid : messageGUIDMap.values()) {
m_persistentMessageStore.remove(guid);
}
}
@Override
public StoredMessage getMessageByGuid(String guid) {
public StoredMessage getMessageByGuid(MessageGUID guid) {
return m_persistentMessageStore.get(guid);
}
@@ -102,14 +109,14 @@ public class MemoryMessagesStore implements IMessagesStore {
}
@Override
public void incUsageCounter(String guid) {
public void incUsageCounter(MessageGUID guid) {
IMessagesStore.StoredMessage storedMessage = m_persistentMessageStore.get(guid);
storedMessage.incReferenceCounter();
m_persistentMessageStore.replace(guid, storedMessage);
}
@Override
public void decUsageCounter(String guid) {
public void decUsageCounter(MessageGUID guid) {
IMessagesStore.StoredMessage storedMessage = m_persistentMessageStore.get(guid);
storedMessage.decReferenceCounter();
m_persistentMessageStore.replace(guid, storedMessage);
@@ -17,6 +17,7 @@ package io.moquette.spi.impl;
import io.moquette.spi.IMessagesStore;
import io.moquette.spi.ISessionsStore;
import io.moquette.spi.MessageGUID;
import io.moquette.spi.persistence.MemorySessionStore;
import java.util.HashMap;
@@ -28,7 +29,7 @@ public class MemoryStorageService {
private MemoryMessagesStore m_messagesStore;
public void initStore() {
Map<String, Map<Integer, String>> messageToGuids = new HashMap<>();
Map<String, Map<Integer, MessageGUID>> messageToGuids = new HashMap<>();
m_messagesStore = new MemoryMessagesStore(messageToGuids);
m_sessionsStore = new MemorySessionStore(m_messagesStore, messageToGuids);
}
@@ -20,11 +20,8 @@ import io.moquette.interception.InterceptHandler;
import io.moquette.parser.proto.messages.AbstractMessage.QOSType;
import io.moquette.server.ConnectionDescriptor;
import io.moquette.server.netty.NettyUtils;
import io.moquette.spi.ClientSession;
import io.moquette.spi.IMatchingCondition;
import io.moquette.spi.IMessagesStore;
import io.moquette.spi.*;
import io.moquette.spi.IMessagesStore.StoredMessage;
import io.moquette.spi.ISessionsStore;
import io.moquette.spi.impl.security.PermitAllAuthorizator;
import io.moquette.spi.impl.subscriptions.Subscription;
import io.moquette.spi.impl.subscriptions.SubscriptionsStore;
@@ -378,7 +375,7 @@ public class ProtocolProcessorTest {
m_processor.processConnect(m_channel, connectMessage);
//Verify no messages are still stored
Collection<String> guids = m_sessionStore.enqueued(FAKE_PUBLISHER_ID);
Collection<MessageGUID> guids = m_sessionStore.enqueued(FAKE_PUBLISHER_ID);
assertTrue(m_messagesStore.listMessagesInSession(guids).isEmpty());
}