summaryrefslogtreecommitdiff
path: root/qpid/java/bdbstore/src
diff options
context:
space:
mode:
authorKeith Wall <kwall@apache.org>2012-07-25 22:37:21 +0000
committerKeith Wall <kwall@apache.org>2012-07-25 22:37:21 +0000
commitf5707c7969f5bac6700c37c946dbfb0eb9a8d7ef (patch)
treeb2e517038b0ba438dc4283e8a94526ba7917d732 /qpid/java/bdbstore/src
parentb586c5f4159e5184cc37e6a53821d8360d223db8 (diff)
downloadqpid-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.java45
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