[DB-SIG] Any standard for two phase commit APIs?

M.-A. Lemburg mal at egenix.com
Fri Jan 18 13:28:17 CET 2008


On 2008-01-18 13:05, James Henstridge wrote:
> On 18/01/2008, M.-A. Lemburg <mal at egenix.com> wrote:
>> While this would seem desirable, it is not how the Zope TM
>> works.
>>
>> Phase 1 is implemented by doing a vote on the success
>> of the transaction. Phase 2 then finishes or aborts the transaction
>> depending on the vote.
>>
>> If something fails in phase 2, there's no guarantee that partial
>> commits can be undone.
>>
>> The .commit()/.rollback() calls on the database interface would
>> be implemented in the phase 2 part.
>>
>> To avoid your scenario, the ZODB would have to detect the conflict
>> during phase 1 (ie. the voting phase).
> 
> Looking at the IDataManager API, it looks like it looks like the
> correct way to implement two phase commit would be:
> 
> 1. if tpc_begin() is called, note that two-phase commit is being used.
> 2. in commit(), simply prepare the transaction if the two-phase commit
> flag is set, rather than actually committing.  If this fails, the
> transaction obviously fails.
> 3. make tpc_vote() a no-op.
> 4. tpc_finish() commits the prepared transaction
> 5. abort() and tpc_abort() roll back the prepared transaction (if one
> was prepared).

Agreed, but at least for Zope database adapters, that's not what's
implemented (have a look at ZRDB/TM.py).

-- 
Marc-Andre Lemburg
eGenix.com

Professional Python Services directly from the Source  (#1, Jan 18 2008)
>>> Python/Zope Consulting and Support ...        http://www.egenix.com/
>>> mxODBC.Zope.Database.Adapter ...             http://zope.egenix.com/
>>> mxODBC, mxDateTime, mxTextTools ...        http://python.egenix.com/
________________________________________________________________________

:::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,MacOSX for free ! ::::


   eGenix.com Software, Skills and Services GmbH  Pastor-Loeh-Str.48
    D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
           Registered at Amtsgericht Duesseldorf: HRB 46611


More information about the DB-SIG mailing list