diff options
| author | Keith Wall <kwall@apache.org> | 2012-07-25 22:37:21 +0000 |
|---|---|---|
| committer | Keith Wall <kwall@apache.org> | 2012-07-25 22:37:21 +0000 |
| commit | f5707c7969f5bac6700c37c946dbfb0eb9a8d7ef (patch) | |
| tree | b2e517038b0ba438dc4283e8a94526ba7917d732 /qpid/java/bdbstore/src | |
| parent | b586c5f4159e5184cc37e6a53821d8360d223db8 (diff) | |
| download | qpid-python-f5707c7969f5bac6700c37c946dbfb0eb9a8d7ef.tar.gz | |
QPID-4164: Prevent the erroneous re-storing of recovered messages during move/copyMessage management functions.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1365832 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/bdbstore/src')
| -rw-r--r-- | qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java | 45 |
1 files changed, 18 insertions, 27 deletions
diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java index a812436f34..755cb9c89e 100644 --- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java @@ -546,7 +546,7 @@ public abstract class AbstractBDBMessageStore implements MessageStore long messageId = LongBinding.entryToLong(key); StorableMessageMetaData metaData = valueBinding.entryToObject(value); - StoredBDBMessage message = new StoredBDBMessage(messageId, metaData, false); + StoredBDBMessage message = new StoredBDBMessage(messageId, metaData, true); mrh.message(message); @@ -1576,34 +1576,26 @@ public abstract class AbstractBDBMessageStore implements MessageStore { private final long _messageId; - private volatile SoftReference<StorableMessageMetaData> _metaDataRef; + private final boolean _isRecovered; private StorableMessageMetaData _metaData; - private volatile SoftReference<byte[]> _dataRef; + private volatile SoftReference<StorableMessageMetaData> _metaDataRef; + private byte[] _data; + private volatile SoftReference<byte[]> _dataRef; StoredBDBMessage(long messageId, StorableMessageMetaData metaData) { - this(messageId, metaData, true); + this(messageId, metaData, false); } - - StoredBDBMessage(long messageId, - StorableMessageMetaData metaData, boolean persist) + StoredBDBMessage(long messageId, StorableMessageMetaData metaData, boolean isRecovered) { - try - { - _messageId = messageId; - _metaData = metaData; - - _metaDataRef = new SoftReference<StorableMessageMetaData>(metaData); - - } - catch (DatabaseException e) - { - throw new RuntimeException(e); - } + _messageId = messageId; + _isRecovered = isRecovered; + _metaData = metaData; + _metaDataRef = new SoftReference<StorableMessageMetaData>(metaData); } public StorableMessageMetaData getMetaData() @@ -1693,8 +1685,7 @@ public abstract class AbstractBDBMessageStore implements MessageStore synchronized void store(com.sleepycat.je.Transaction txn) { - - if(unstored()) + if (!stored()) { try { @@ -1724,14 +1715,9 @@ public abstract class AbstractBDBMessageStore implements MessageStore } } - private boolean unstored() - { - return _metaData != null; - } - public synchronized StoreFuture flushToStore() { - if(unstored()) + if(!stored()) { com.sleepycat.je.Transaction txn = _environment.beginTransaction(null, null); store(txn); @@ -1755,6 +1741,11 @@ public abstract class AbstractBDBMessageStore implements MessageStore throw new RuntimeException(e); } } + + private boolean stored() + { + return _metaData == null || _isRecovered; + } } private class BDBTransaction implements org.apache.qpid.server.store.Transaction |
