Fixed drop messages in clean session phase, introduced ref counter
This commit is contained in:
@@ -99,8 +99,16 @@ class MapDBMessagesStore implements IMessagesStore {
|
||||
|
||||
@Override
|
||||
public void dropMessagesInSession(String clientID) {
|
||||
m_db.getHashMap(MapDBSessionsStore.messageId2GuidsMapName(clientID)).clear();
|
||||
m_persistentMessageStore.remove(clientID);
|
||||
ConcurrentMap<Integer, String> messageIdToGuid = m_db.getHashMap(MapDBSessionsStore.messageId2GuidsMapName(clientID));
|
||||
for (String guid : messageIdToGuid.values()) {
|
||||
//remove only the not retained and no more referenced
|
||||
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();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -112,4 +120,18 @@ class MapDBMessagesStore implements IMessagesStore {
|
||||
public void cleanRetained(String topic) {
|
||||
m_retainedStore.remove(topic);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void incUsageCounter(String guid) {
|
||||
IMessagesStore.StoredMessage storedMessage = m_persistentMessageStore.get(guid);
|
||||
storedMessage.incReferenceCounter();
|
||||
m_persistentMessageStore.replace(guid, storedMessage);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void decUsageCounter(String guid) {
|
||||
IMessagesStore.StoredMessage storedMessage = m_persistentMessageStore.get(guid);
|
||||
storedMessage.decReferenceCounter();
|
||||
m_persistentMessageStore.replace(guid, storedMessage);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -203,6 +203,7 @@ class MapDBSessionsStore implements ISessionsStore {
|
||||
List<String> guids = Utils.defaultGet(m_enqueuedStore, clientID, new ArrayList<String>());
|
||||
guids.add(guid);
|
||||
m_enqueuedStore.put(clientID, guids);
|
||||
m_messagesStore.incUsageCounter(guid);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -215,6 +216,8 @@ class MapDBSessionsStore implements ISessionsStore {
|
||||
List<String> guids = Utils.defaultGet(m_enqueuedStore, clientID, new ArrayList<String>());
|
||||
guids.remove(guid);
|
||||
m_enqueuedStore.put(clientID, guids);
|
||||
m_messagesStore.decUsageCounter(guid);
|
||||
//TODO if counter gets to 0 then remove from storage
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user