[DB-SIG] Two-phase commit API proposal (was Re: Any standard for two phase commit APIs?)
Federico Di Gregorio
fog at initd.org
Mon Jan 21 11:28:55 CET 2008
I agree with your analisys, I'll add some comments about the proposal
below.
Il giorno lun, 21/01/2008 alle 19.08 +0900, James Henstridge ha scritto:
> 1. Add a Connection.begin(...) method that explicitly starts a
> transaction. Some argument (possibly the transaction ID) causes
> the transaction to use two-phase commit. May raise
> NotSupportedError if two-phase commit is not supported.
DBAPI always had implicit transaction begin (for backends supporting
transactions) and adding an explicit begin() method would just add
confusion onto the user. "Should I always call begin()? Or just when I
want to start a two-phase?". I'd better like the two-phase begin method
named otherwise. Let's call it xa_begin() in this discussion.
> 2. Add a Connection.prepare() method that peforms the first stage of
> two-phase commit. May raise NotSupportedError if two-phase commit
> is not supported, or the transaction was not started in two-phase
> mode.
>
Ok. (Should be named accordingly with the begin method.)
> 3. Calling commit() or rollback() on the connection after prepare()
> performs the second stage of the commit.
>
Ok.
> 4. Calling commit() or rollback() on the connection prior to
> prepare() performs a one-phase commit or rollback.
>
IMHO, it should raise an error if the transaction was started for
two-phase. Otherwise I don't see any reason for (1).
> 5. Executing statements after prepare() but before commit() or
> rollback() results in an error (ProgrammingError?)
>
Ok.
> 6. Closing a connection with a prepared but uncommitted transaction
> rolls back that transaction.
>
Stuart's comment on psycopg ML made me think about this one. Maybe we
want an option added to xa_begin() to keep the prepared transaction open
even if the connection drops.
federico
--
Federico Di Gregorio http://people.initd.org/fog
DISCLAIMER. If I receive a message from you, you are agreeing that:
1. I am by definition, "the intended recipient".
2. All information in the email is mine to do with as I see fit and
make such financial profit, political mileage, or good joke as it lends
itself to. In particular, I may quote it on USENET or the WWW.
3. I may take the contents as representing the views of your company.
4. This overrides any disclaimer or statement of confidentiality that
may be included on your message.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Questa =?ISO-8859-1?Q?=E8?= una parte del messaggio
firmata digitalmente
Url : http://mail.python.org/pipermail/db-sig/attachments/20080121/d4c155eb/attachment.pgp
More information about the DB-SIG
mailing list