Merge pull request #231 from windbender/master
implement #227, use of atomicintegers on reference counter
This commit is contained in:
@@ -21,6 +21,7 @@ import io.moquette.parser.proto.messages.AbstractMessage;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
/**
|
||||
* Defines the SPI to be implemented by a StorageService that handle persistence of messages
|
||||
@@ -36,7 +37,7 @@ public interface IMessagesStore {
|
||||
//Optional attribute, available only fo QoS 1 and 2
|
||||
private Integer m_msgID;
|
||||
private MessageGUID m_guid;
|
||||
private int referenceCounter = 0;
|
||||
private AtomicInteger referenceCounter = new AtomicInteger(0);
|
||||
|
||||
public StoredMessage(byte[] message, AbstractMessage.QOSType qos, String topic) {
|
||||
m_qos = qos;
|
||||
@@ -93,15 +94,15 @@ public interface IMessagesStore {
|
||||
}
|
||||
|
||||
public void incReferenceCounter() {
|
||||
this.referenceCounter++;
|
||||
this.referenceCounter.incrementAndGet();
|
||||
}
|
||||
|
||||
public void decReferenceCounter() {
|
||||
this.referenceCounter--;
|
||||
this.referenceCounter.decrementAndGet();
|
||||
}
|
||||
|
||||
public int getReferenceCounter() {
|
||||
return this.referenceCounter;
|
||||
return this.referenceCounter.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -110,7 +110,10 @@ class MapDBMessagesStore implements IMessagesStore {
|
||||
void removeStoredMessage(MessageGUID guid) {
|
||||
//remove only the not retained and no more referenced
|
||||
StoredMessage storedMessage = m_persistentMessageStore.get(guid);
|
||||
if (!storedMessage.isRetained() && storedMessage.getReferenceCounter() == 0) {
|
||||
if (!storedMessage.isRetained() && storedMessage.getReferenceCounter() <= 0) {
|
||||
if(storedMessage.getReferenceCounter() < 0) {
|
||||
LOG.error("we should never have gotten a reference count less than zero");
|
||||
}
|
||||
LOG.debug("Cleaning not retained message guid {}", guid);
|
||||
m_persistentMessageStore.remove(guid);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user