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
@@ -24,6 +24,7 @@ import io.moquette.spi.IMessagesStore;
import io.moquette.spi.ISessionsStore;
import io.moquette.spi.ISessionsStore.ClientTopicCouple;
import io.moquette.parser.proto.messages.AbstractMessage;
import io.moquette.spi.MessageGUID;
import io.moquette.spi.impl.subscriptions.Subscription;
import org.junit.After;
import org.junit.Before;
@@ -108,7 +109,7 @@ public class MapDBPersistentStoreTest {
//request a first ID
int packetId = m_sessionsStore.nextPacketID("CLIENT");
m_sessionsStore.inFlight("CLIENT", packetId, "ABCDE"); //simulate an inflight
m_sessionsStore.inFlight("CLIENT", packetId, new MessageGUID("ABCDE")); //simulate an inflight
assertEquals(1, packetId);
//release the ID
@@ -137,7 +138,7 @@ public class MapDBPersistentStoreTest {
publishToStore.setClientID(TEST_CLIENT);
publishToStore.setMessageID(1);
publishToStore.setRetained(false);
String guid = m_messagesStore.storePublishForFuture(publishToStore);
MessageGUID guid = m_messagesStore.storePublishForFuture(publishToStore);
//Exercise
m_messagesStore.dropMessagesInSession("TestClient");
@@ -155,7 +156,7 @@ public class MapDBPersistentStoreTest {
publishToStore.setClientID(TEST_CLIENT);
publishToStore.setMessageID(1);
publishToStore.setRetained(true);
String guid = m_messagesStore.storePublishForFuture(publishToStore);
MessageGUID guid = m_messagesStore.storePublishForFuture(publishToStore);
//Exercise
m_messagesStore.dropMessagesInSession("TestClient");
@@ -19,6 +19,7 @@ import io.moquette.spi.ClientSession;
import io.moquette.spi.IMessagesStore;
import io.moquette.spi.IMessagesStore.StoredMessage;
import io.moquette.spi.ISessionsStore;
import io.moquette.spi.MessageGUID;
import io.moquette.spi.impl.Utils;
import io.moquette.spi.impl.subscriptions.Subscription;
@@ -39,17 +40,17 @@ public class MemorySessionStore implements ISessionsStore {
private Map<String, MapDBPersistentStore.PersistentSession> m_persistentSessions = new HashMap<>();
//maps clientID->[MessageId -> guid]
private Map<String, Map<Integer, String>> m_inflightStore = new HashMap<>();
private Map<String, Map<Integer, MessageGUID>> m_inflightStore = new HashMap<>();
// private Map<String, Set<Integer>> m_inflightIDs = new HashMap<>();
//maps clientID->[guid*]
private Map<String, Set<String>> m_enqueuedStore = new HashMap<>();
private Map<String, Set<MessageGUID>> m_enqueuedStore = new HashMap<>();
//maps clientID->[MessageId -> guid]
private Map<String, Map<Integer, String>> m_secondPhaseStore = new HashMap<>();
private Map<String, Map<Integer, MessageGUID>> m_secondPhaseStore = new HashMap<>();
private Map<String, Map<Integer, String>> m_messageToGuids;
private Map<String, Map<Integer, MessageGUID>> m_messageToGuids;
private final IMessagesStore m_messagesStore;
public MemorySessionStore(IMessagesStore messagesStore, Map<String, Map<Integer, String>> messageToGuids) {
public MemorySessionStore(IMessagesStore messagesStore, Map<String, Map<Integer, MessageGUID>> messageToGuids) {
m_messageToGuids = messageToGuids;
this.m_messagesStore = messagesStore;
}
@@ -158,7 +159,7 @@ public class MemorySessionStore implements ISessionsStore {
@Override
public void inFlightAck(String clientID, int messageID) {
Map<Integer, String> m = this.m_inflightStore.get(clientID);
Map<Integer, MessageGUID> m = this.m_inflightStore.get(clientID);
if (m == null) {
LOG.error("Can't find the inFlight record for client <{}>", clientID);
return;
@@ -167,8 +168,8 @@ public class MemorySessionStore implements ISessionsStore {
}
@Override
public void inFlight(String clientID, int messageID, String guid) {
Map<Integer, String> m = this.m_inflightStore.get(clientID);
public void inFlight(String clientID, int messageID, MessageGUID guid) {
Map<Integer, MessageGUID> m = this.m_inflightStore.get(clientID);
if (m == null) {
m = new HashMap<>();
}
@@ -181,7 +182,7 @@ public class MemorySessionStore implements ISessionsStore {
* */
@Override
public int nextPacketID(String clientID) {
Map<Integer, String> m = this.m_inflightStore.get(clientID);
Map<Integer, MessageGUID> m = this.m_inflightStore.get(clientID);
if (m == null) {
m = new HashMap<>();
int nextPacketId = 1;
@@ -195,20 +196,20 @@ public class MemorySessionStore implements ISessionsStore {
}
@Override
public void bindToDeliver(String guid, String clientID) {
Set<String> guids = Utils.defaultGet(m_enqueuedStore, clientID, new HashSet<String>());
public void bindToDeliver(MessageGUID guid, String clientID) {
Set<MessageGUID> guids = Utils.defaultGet(m_enqueuedStore, clientID, new HashSet<MessageGUID>());
guids.add(guid);
m_enqueuedStore.put(clientID, guids);
}
@Override
public Collection<String> enqueued(String clientID) {
return Utils.defaultGet(m_enqueuedStore, clientID, new HashSet<String>());
public Collection<MessageGUID> enqueued(String clientID) {
return Utils.defaultGet(m_enqueuedStore, clientID, new HashSet<MessageGUID>());
}
@Override
public void removeEnqueued(String clientID, String guid) {
Set<String> guids = Utils.defaultGet(m_enqueuedStore, clientID, new HashSet<String>());
public void removeEnqueued(String clientID, MessageGUID guid) {
Set<MessageGUID> guids = Utils.defaultGet(m_enqueuedStore, clientID, new HashSet<MessageGUID>());
guids.remove(guid);
m_enqueuedStore.put(clientID, guids);
}
@@ -216,31 +217,31 @@ public class MemorySessionStore implements ISessionsStore {
@Override
public void moveInFlightToSecondPhaseAckWaiting(String clientID, int messageID) {
LOG.info("acknowledging inflight clientID <{}> messageID {}", clientID, messageID);
Map<Integer, String> m = this.m_inflightStore.get(clientID);
Map<Integer, MessageGUID> m = this.m_inflightStore.get(clientID);
if (m == null) {
LOG.error("Can't find the inFlight record for client <{}>", clientID);
return;
}
String guid = m.remove(messageID);
MessageGUID guid = m.remove(messageID);
LOG.info("Moving to second phase store");
Map<Integer, String> messageIDs = Utils.defaultGet(m_secondPhaseStore, clientID, new HashMap<Integer, String>());
Map<Integer, MessageGUID> messageIDs = Utils.defaultGet(m_secondPhaseStore, clientID, new HashMap<Integer, MessageGUID>());
messageIDs.put(messageID, guid);
m_secondPhaseStore.put(clientID, messageIDs);
}
@Override
public String secondPhaseAcknowledged(String clientID, int messageID) {
Map<Integer, String> messageIDs = Utils.defaultGet(m_secondPhaseStore, clientID, new HashMap<Integer, String>());
String guid = messageIDs.remove(messageID);
public MessageGUID secondPhaseAcknowledged(String clientID, int messageID) {
Map<Integer, MessageGUID> messageIDs = Utils.defaultGet(m_secondPhaseStore, clientID, new HashMap<Integer, MessageGUID>());
MessageGUID guid = messageIDs.remove(messageID);
m_secondPhaseStore.put(clientID, messageIDs);
return guid;
}
@Override
public String mapToGuid(String clientID, int messageID) {
HashMap<Integer, String> guids = (HashMap<Integer, String>) Utils.defaultGet(m_messageToGuids,
clientID, new HashMap<Integer, String>());
public MessageGUID mapToGuid(String clientID, int messageID) {
HashMap<Integer, MessageGUID> guids = (HashMap<Integer, MessageGUID>) Utils.defaultGet(m_messageToGuids,
clientID, new HashMap<Integer, MessageGUID>());
return guids.get(messageID);
}