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