Drop the message when the ref counter reaches 0
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user