diff --git a/broker/src/main/java/org/eclipse/moquette/spi/impl/MemoryStorageService.java b/broker/src/main/java/org/eclipse/moquette/spi/impl/MemoryStorageService.java index 4f004e20..4fa0bb77 100644 --- a/broker/src/main/java/org/eclipse/moquette/spi/impl/MemoryStorageService.java +++ b/broker/src/main/java/org/eclipse/moquette/spi/impl/MemoryStorageService.java @@ -28,6 +28,8 @@ import org.eclipse.moquette.spi.ISessionsStore; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static org.eclipse.moquette.spi.impl.Utils.defaultGet; + /** */ public class MemoryStorageService implements IMessagesStore, ISessionsStore { @@ -81,20 +83,21 @@ public class MemoryStorageService implements IMessagesStore, ISessionsStore { @Override public void storePublishForFuture(PublishEvent evt) { LOG.debug("storePublishForFuture store evt {}", evt); - List storedEvents; +// List storedEvents; String clientID = evt.getClientID(); - if (!m_persistentMessageStore.containsKey(clientID)) { - storedEvents = new ArrayList(); - } else { - storedEvents = m_persistentMessageStore.get(clientID); - } +// if (!m_persistentMessageStore.containsKey(clientID)) { +// storedEvents = new ArrayList(); +// } else { +// storedEvents = m_persistentMessageStore.get(clientID); +// } + List storedEvents = defaultGet(m_persistentMessageStore, clientID, new ArrayList()); storedEvents.add(evt); m_persistentMessageStore.put(clientID, storedEvents); } @Override public List listMessagesInSession(String clientID) { - return new ArrayList<>(m_persistentMessageStore.get(clientID)); + return new ArrayList<>(defaultGet(m_persistentMessageStore, clientID, Collections.emptyList())); } @Override diff --git a/broker/src/main/java/org/eclipse/moquette/spi/impl/ProtocolProcessor.java b/broker/src/main/java/org/eclipse/moquette/spi/impl/ProtocolProcessor.java index 6648ae75..2e972f02 100644 --- a/broker/src/main/java/org/eclipse/moquette/spi/impl/ProtocolProcessor.java +++ b/broker/src/main/java/org/eclipse/moquette/spi/impl/ProtocolProcessor.java @@ -242,7 +242,7 @@ class ProtocolProcessor implements EventHandler { private void republishStoredInSession(String clientID) { LOG.trace("republishStoredInSession invoked"); List publishedEvents = m_messagesStore.listMessagesInSession(clientID); - if (publishedEvents == null) { + if (publishedEvents.isEmpty()) { LOG.info("No stored messages for client <{}>", clientID); return; } diff --git a/broker/src/main/java/org/eclipse/moquette/spi/impl/Utils.java b/broker/src/main/java/org/eclipse/moquette/spi/impl/Utils.java new file mode 100644 index 00000000..4ebdc3d7 --- /dev/null +++ b/broker/src/main/java/org/eclipse/moquette/spi/impl/Utils.java @@ -0,0 +1,16 @@ +package org.eclipse.moquette.spi.impl; + +import java.util.Map; + +/** + * Utility static methods, like Map get with default value, or elvis operator. + */ +public class Utils { + public static T defaultGet(Map map, K key, T defaultValue) { + T value = map.get(key); + if (value != null) { + return value; + } + return defaultValue; + } +} diff --git a/broker/src/main/java/org/eclipse/moquette/spi/persistence/MapDBPersistentStore.java b/broker/src/main/java/org/eclipse/moquette/spi/persistence/MapDBPersistentStore.java index 4c27f29d..c46cfc43 100644 --- a/broker/src/main/java/org/eclipse/moquette/spi/persistence/MapDBPersistentStore.java +++ b/broker/src/main/java/org/eclipse/moquette/spi/persistence/MapDBPersistentStore.java @@ -25,6 +25,8 @@ import org.eclipse.moquette.spi.impl.storage.StoredPublishEvent; import org.eclipse.moquette.spi.impl.subscriptions.Subscription; import org.eclipse.moquette.proto.messages.AbstractMessage; import static org.eclipse.moquette.server.Server.STORAGE_FILE_PATH; +import static org.eclipse.moquette.spi.impl.Utils.defaultGet; + import org.mapdb.DB; import org.mapdb.DBMaker; import org.slf4j.Logger; @@ -126,11 +128,9 @@ public class MapDBPersistentStore implements IMessagesStore, ISessionsStore { @Override public List listMessagesInSession(String clientID) { - List storedEvts = m_persistentMessageStore.get(clientID); - if (storedEvts == null) { - return null; - } - List liveEvts = new ArrayList(); + List liveEvts = new ArrayList<>(); + List storedEvts = defaultGet(m_persistentMessageStore, clientID, Collections.emptyList()); + for (StoredPublishEvent storedEvt : storedEvts) { liveEvts.add(convertFromStored(storedEvt)); }