You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2020/10/08 21:52:09 UTC
[qpid-broker-j] 03/03: QPID-8470: Added retrying logic for storing
metadata
This is an automated email from the ASF dual-hosted git repository.
orudyy pushed a commit to branch 8.0.x
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git
commit 3f6305503b9b29da54cef31c0c8e4aa2b09e61a9
Author: aw924 <da...@deutsche-boerse.com>
AuthorDate: Fri Sep 25 11:23:03 2020 +0200
QPID-8470: Added retrying logic for storing metadata
---
.../store/berkeleydb/AbstractBDBMessageStore.java | 38 ++++++++++++++--------
1 file changed, 25 insertions(+), 13 deletions(-)
diff --git a/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java b/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java
index 867a2a1..94d6fb1 100644
--- a/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java
+++ b/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java
@@ -573,12 +573,11 @@ public abstract class AbstractBDBMessageStore implements MessageStore
*
* @throws org.apache.qpid.server.store.StoreException If the operation fails for any reason, or if the specified message does not exist.
*/
- private void storeMetaData(final Transaction tx, long messageId,
- StorableMessageMetaData messageMetaData)
+ private void storeMetaData(final Transaction tx, long messageId, StorableMessageMetaData messageMetaData)
throws StoreException
{
getLogger().debug("storeMetaData called for transaction {}, messageId {}, messageMetaData {} ",
- tx, messageId, messageMetaData);
+ tx, messageId, messageMetaData);
DatabaseEntry key = new DatabaseEntry();
LongBinding.longToEntry(messageId, key);
@@ -586,19 +585,32 @@ public abstract class AbstractBDBMessageStore implements MessageStore
MessageMetaDataBinding messageBinding = MessageMetaDataBinding.getInstance();
messageBinding.objectToEntry(messageMetaData, value);
- try
- {
- getMessageMetaDataDb().put(tx, key, value);
- getLogger().debug("Storing message metadata for message id {} in transaction {}", messageId, tx);
- }
- catch (RuntimeException e)
+ boolean complete = false;
+ int attempts = 0;
+
+ do
{
- throw getEnvironmentFacade().handleDatabaseException("Error writing message metadata with id "
- + messageId
- + " to database: "
- + e.getMessage(), e);
+ try
+ {
+ getMessageMetaDataDb().put(tx, key, value);
+ getLogger().debug("Storing message metadata for message id {} in transaction {}", messageId, tx);
+ complete = true;
+
+ }
+ catch (LockConflictException e)
+ {
+ sleepOrThrowOnLockConflict(attempts++, "Cannot store metadata", e);
+ }
+ catch (RuntimeException e)
+ {
+ throw getEnvironmentFacade().handleDatabaseException("Error writing message metadata with id "
+ + messageId
+ + " to database: "
+ + e.getMessage(), e);
+ }
}
+ while(!complete);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org