Drop the message when the ref counter reaches 0

This commit is contained in:
andsel
2016-09-23 10:16:24 +02:00
parent ac5a4daa6f
commit ac419adbd6
2 changed files with 12 additions and 8 deletions
@@ -101,16 +101,20 @@ class MapDBMessagesStore implements IMessagesStore {
public void dropMessagesInSession(String clientID) { public void dropMessagesInSession(String clientID) {
ConcurrentMap<Integer, String> messageIdToGuid = m_db.getHashMap(MapDBSessionsStore.messageId2GuidsMapName(clientID)); ConcurrentMap<Integer, String> messageIdToGuid = m_db.getHashMap(MapDBSessionsStore.messageId2GuidsMapName(clientID));
for (String guid : messageIdToGuid.values()) { for (String guid : messageIdToGuid.values()) {
//remove only the not retained and no more referenced removeStoredMessage(guid);
IMessagesStore.StoredMessage storedMessage = m_persistentMessageStore.get(guid);
if (!storedMessage.isRetained() && storedMessage.getReferenceCounter() == 0) {
LOG.debug("Cleaning not retained message guid {}", guid);
m_persistentMessageStore.remove(guid);
}
} }
messageIdToGuid.clear(); messageIdToGuid.clear();
} }
void removeStoredMessage(String guid) {
//remove only the not retained and no more referenced
StoredMessage storedMessage = m_persistentMessageStore.get(guid);
if (!storedMessage.isRetained() && storedMessage.getReferenceCounter() == 0) {
LOG.debug("Cleaning not retained message guid {}", guid);
m_persistentMessageStore.remove(guid);
}
}
@Override @Override
public StoredMessage getMessageByGuid(String guid) { public StoredMessage getMessageByGuid(String guid) {
return m_persistentMessageStore.get(guid); return m_persistentMessageStore.get(guid);
@@ -16,7 +16,6 @@
package io.moquette.spi.persistence; package io.moquette.spi.persistence;
import io.moquette.spi.ClientSession; import io.moquette.spi.ClientSession;
import io.moquette.spi.IMessagesStore;
import io.moquette.spi.IMessagesStore.StoredMessage; import io.moquette.spi.IMessagesStore.StoredMessage;
import io.moquette.spi.ISessionsStore; import io.moquette.spi.ISessionsStore;
import io.moquette.spi.impl.Utils; import io.moquette.spi.impl.Utils;
@@ -217,7 +216,8 @@ class MapDBSessionsStore implements ISessionsStore {
guids.remove(guid); guids.remove(guid);
m_enqueuedStore.put(clientID, guids); m_enqueuedStore.put(clientID, guids);
m_messagesStore.decUsageCounter(guid); m_messagesStore.decUsageCounter(guid);
//TODO if counter gets to 0 then remove from storage //if counter gets to 0 then remove from storage
m_messagesStore.removeStoredMessage(guid);
} }
@Override @Override