You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by "Cliff Jansen (JIRA)" <qp...@incubator.apache.org> on 2009/11/24 05:52:39 UTC

[jira] Updated: (QPID-2128) Transaction support for the WCF channel

     [ https://issues.apache.org/jira/browse/QPID-2128?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Cliff Jansen updated QPID-2128:
-------------------------------

    Attachment: qpid2128_1.patch

This patch provides distributed transaction support for the C++ based
WCF channel on Windows.

It basically consists of two new classes in the Interop DLL

  XaTransaction tracks the sessions that have enlisted in a particular
  System.Transaction and provides the COM glue to manage the 2PC
  stages with the Microsoft Distributed Transaction Coordinator.

  DtxResourceManager is responsible for creating XaTransactions as
  needed, maintaining the control session with the broker, and
  initiating and terminating the handshake with MSDTC.

and a DtcPlugin module whose purpose is to provide (solely) the
recovery functionality of an XA resource manager.  This latter DLL
runs in the process space of the MSDTC service itself.

The nature of this design is that resource manager components do not
maintain state between crashes.  The MSDTC maintains a log of broker
connections and potential in-doubt transactions.  It is responsible
for initiating recovery as needed.  The AMQP broker maintains its own
persistent list of transactions that are currently in the prepared
state.  Those combined logs are sufficient to ensure recovery.

1PC optimization is supported.  Promotable transactions cannot be
supported with this existing design, but could be with the
introduction of an additional log file on the client machine.


The AmqpSession class has been enhanced to provide the needed dtx
methods in managed space.

The remaining changes mainly allow for synchronizing the multiple
active sessions.  Connections wait on close for outstanding
transactions to complete.  Dtx "join" operations have to wait "long
enough" to be sure the broker sees the initial "start" (on another
session or connection) first.  A dtx "prepare" or 1PC must wait for
all dtx "ends" to be processed by the broker (internally referred to
as a "Phase 0 flush").

A set of NUnit tests for all this are coming real soon now.

Cliff


> Transaction support for the WCF channel
> ---------------------------------------
>
>                 Key: QPID-2128
>                 URL: https://issues.apache.org/jira/browse/QPID-2128
>             Project: Qpid
>          Issue Type: New Feature
>          Components: WCF/C++ Client
>    Affects Versions: 0.6
>         Environment: Windows
>            Reporter: Cliff Jansen
>         Attachments: qpid2128_1.patch
>
>
> Transaction support is currently lacking from the WCF channel.
> As an initial implementation, full distributed transaction support from within .NET is proposed using the dtx AMQP classes and creating a plugin to the MSDTC infrastructure to drive recovery.
> Added performance from promotable transaction enlistment is deferred to a later date.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:dev-subscribe@qpid.apache.org