Uploaded image for project: 'ActiveMQ'
  1. ActiveMQ
  2. AMQ-3305

Implement "exactly once" delivery with kahaDB and XA in the event of a failure post prepare

Attach filesAttach ScreenshotVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 5.5.0
    • 5.6.0
    • Message Store
    • XA (with Geronimo for TM in the camel route test)

    Description

      With XA 2PC, a camel route, jms 'to' jdbc should ensure exactly once delivery to jdbc. In the event of a failure after prepare, where commit to jdbc is done, the jms message must remain with a pending ack till the commit outcome is relayed from the transaction manager.
      Current versions of geronimo will correctly retry the commit in a timer thread, so activemq eventually gets the commit outcome after recovery. (btw: it looks like howl will not persist a commit outcome per NamedXAResource, so after a failure of the TM it may consier the transaction completed and the message may still be pending, need to check that!)

      At the moment, ActiveMQ does a heuristic rollback after recovery which leads to message redelivery in error.
      With the fix, an acked message remains pending awaiting the outcome. On commit, the message is acked. On rollback the message is available for redelivery.

      Attachments

        Issue Links

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            gtully Gary Tully
            gtully Gary Tully
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment