[ZODB-Dev] Explicit two-phase commit

JohnD.Heintz JohnD.Heintz
Wed, 5 Sep 2001 12:42:16 -0500


--------------Boundary-00=_GIA7ZE1AA11K02U1J3PI
Content-Type: text/plain;
  charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Attached is the code that I use to accomplish this.  This is part of ZCF =
from=20
my members page on Zope.org.

John

Note that this doesn't play well with sub-transactions yet.  If someone=20
really wants this then I'll add it.

On Wednesday 05 September 2001 05:45, Itamar Shtull-Trauring wrote:
> Hey everyone,
>
> How can I access ZODB's two-phase commit manually? I want to integrate =
ZODB
> into my system, so I need to be able to separate out the two stages of =
the
> two-phase commit, e.g.:
>
>    class MyClass:
>
>      def prepare():
>        return get_transaction().prepare() # first stage of TPC
>
>      def commit():
>        return get_transaction().commit()  # second stage of TPC
>
>
> Whereas now the two stages are called together from the transaction's
> commit() command.
>
>
> _______________________________________________
> For more information about ZODB, see the ZODB Wiki:
> http://www.zope.org/Wikis/ZODB/
>
> ZODB-Dev mailing list  -  ZODB-Dev@zope.org
> http://lists.zope.org/mailman/listinfo/zodb-dev

--=20
=2E . . . . . . . . . . . . . . . . . . . . . . .

John D. Heintz | Senior Engineer

1016 La Posada Dr. | Suite 240 | Austin TX 78752
T 512.633.1198 | jheintz@isogen.com

w w w . d a t a c h a n n e l . c o m

--------------Boundary-00=_GIA7ZE1AA11K02U1J3PI
Content-Type: text/x-java;
  charset="iso-8859-1";
  name="TransactionManagement.py"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="TransactionManagement.py"

Iy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIENvcHlyaWdo
dCAoYykgMjAwMSBEYXRhQ2hhbm5lbCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgojCiMgTEdQ
TCAyLjEKIwojICRJZDokCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KCmZyb20gX19tYWluX18gaW1wb3J0IF9fYnVpbHRpbnNfXwppbXBvcnQgc3lzCmltcG9y
dCB0aHJlYWQKaW1wb3J0IFpPREIuVHJhbnNhY3Rpb24KZnJvbSB6TE9HIGltcG9ydCBMT0csIFRS
QUNFLCBERUJVRywgQkxBVEhFUiwgSU5GTywgUFJPQkxFTSwgRVJST1IsIFBBTklDCgpfaWRUb1Ry
YW5zYWN0aW9uTWFwID0ge30KX2lkVG9UcmFuc2FjdGlvbk1hcExvY2sgPSB0aHJlYWQuYWxsb2Nh
dGVfbG9jaygpCgpfYXV0b0NyZWF0ZVRyYW5zYWN0aW9ucyA9IDEKZGVmIGF1dG9DcmVhdGVUcmFu
c2FjdGlvbnMob25vZmYpOgogICAgZ2xvYmFsIF9hdXRvQ3JlYXRlVHJhbnNhY3Rpb25zCiAgICBf
YXV0b0NyZWF0ZVRyYW5zYWN0aW9ucyA9IG9ub2ZmCgpkZWYgZ2V0X3RyYW5zYWN0aW9uKF9pZD10
aHJlYWQuZ2V0X2lkZW50KToKICAgIGlkID0gX2lkKCkKICAgIHJlc3VsdCA9IF9pZFRvVHJhbnNh
Y3Rpb25NYXAuZ2V0KGlkLCBOb25lKQogICAgaWYgbm90IHJlc3VsdDoKICAgICAgICBpZiBfYXV0
b0NyZWF0ZVRyYW5zYWN0aW9uczoKICAgICAgICAgICAgcmVzdWx0ID0gVHJhbnNhY3Rpb24oaWQp
CiAgICAgICAgICAgIHByaW50ICJhdXRvY3JlYXRpbmcgdHJhbnNhY3Rpb246JXMiICUgcmVzdWx0
CiAgICAgICAgICAgIHJlc3VsdC5hdHRhY2goX2lkKQogICAgICAgIGVsc2U6CiAgICAgICAgICAg
IHJhaXNlIEtleUVycm9yKGlkKQogICAgcmV0dXJuIHJlc3VsdAoKIyBSZXBsYWNlIGdsb2JhbCBk
ZWZpbml0aW9uIG9mIGdldF90cmFuc2FjdGlvbgpfX2J1aWx0aW5zX18uZ2V0X3RyYW5zYWN0aW9u
ID0gZ2V0X3RyYW5zYWN0aW9uCgpjbGFzcyBUcmFuc2FjdGlvbihaT0RCLlRyYW5zYWN0aW9uLlRy
YW5zYWN0aW9uKToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpZD1Ob25lKToKICAgICAgICBaT0RC
LlRyYW5zYWN0aW9uLlRyYW5zYWN0aW9uLl9faW5pdF9fKHNlbGYsIGlkKQogICAgICAgIHNlbGYu
X29uQ29tbWl0Q2FsbGJhY2tzID0gTm9uZQoKICAgIGRlZiBhdHRhY2goc2VsZiwgX2lkPXRocmVh
ZC5nZXRfaWRlbnQsIGZvcmNlPTApOgogICAgICAgIGlkID0gX2lkKCkKICAgICAgICBfaWRUb1Ry
YW5zYWN0aW9uTWFwTG9jay5hY3F1aXJlKCkKICAgICAgICB0cnk6CiAgICAgICAgICAgIGlmIG5v
dCBfaWRUb1RyYW5zYWN0aW9uTWFwLmhhc19rZXkoaWQpIG9yIGZvcmNlOgogICAgICAgICAgICAg
ICAgX2lkVG9UcmFuc2FjdGlvbk1hcFtpZF0gPSBzZWxmCiAgICAgICAgICAgIGVsc2U6CiAgICAg
ICAgICAgICAgICByYWlzZSBLZXlFcnJvcigiJXMgYWxyZWFkeSByZWdpc3RlciB0byAlcyIgJSBc
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWQsIF9pZFRvVHJhbnNhY3Rpb25NYXAu
Z2V0KGlkLCBOb25lKSkpCiAgICAgICAgZmluYWxseToKICAgICAgICAgICAgX2lkVG9UcmFuc2Fj
dGlvbk1hcExvY2sucmVsZWFzZSgpCgogICAgZGVmIGRldGFjaChzZWxmLCBfaWQ9dGhyZWFkLmdl
dF9pZGVudCk6CiAgICAgICAgaWQgPSBfaWQoKQogICAgICAgIHRyeToKICAgICAgICAgICAgZGVs
IF9pZFRvVHJhbnNhY3Rpb25NYXBbaWRdCiAgICAgICAgZmluYWxseToKICAgICAgICAgICAgcGFz
cwoKICAgIGRlZiByZWdpc3RlckNvbW1pdENhbGxiYWNrKHNlbGYsIGZ1bmMsICphcmdzLCAqKmt3
KToKICAgICAgICBpZiBzZWxmLl9vbkNvbW1pdENhbGxiYWNrcyBpcyBOb25lOgogICAgICAgICAg
ICBzZWxmLl9vbkNvbW1pdENhbGxiYWNrcyA9IFtdCiAgICAgICAgc2VsZi5fb25Db21taXRDYWxs
YmFja3MuYXBwZW5kKChmdW5jLCBhcmdzLCBrdykpCgogICAgZGVmIGFib3J0KHNlbGYsIHN1YnRy
YW5zYWN0aW9uPTAsIGZyZWVtZT0xKToKICAgICAgICBaT0RCLlRyYW5zYWN0aW9uLlRyYW5zYWN0
aW9uLmFib3J0KHNlbGYsIHN1YnRyYW5zYWN0aW9uLCBmcmVlbWUpCiAgICAgICAgc2VsZi5fb25D
b21taXRDYWxsYmFja3MgPSBOb25lCiAgICAgICAgCiAgICBkZWYgY29tbWl0KHNlbGYsIHN1YnRy
YW5zYWN0aW9uPU5vbmUpOgogICAgICAgIFpPREIuVHJhbnNhY3Rpb24uVHJhbnNhY3Rpb24uY29t
bWl0KHNlbGYsIHN1YnRyYW5zYWN0aW9uKQogICAgICAgIGlmIHN1YnRyYW5zYWN0aW9uIGlzIE5v
bmUgYW5kIHNlbGYuX29uQ29tbWl0Q2FsbGJhY2tzIGlzIG5vdCBOb25lOgogICAgICAgICAgICBm
b3IgY2FsbGJhY2ssIGFyZ3MsIGt3IGluIHNlbGYuX29uQ29tbWl0Q2FsbGJhY2tzOgogICAgICAg
ICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgIGFwcGx5KGNhbGxiYWNrLCBhcmdzLCBr
dykKICAgICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICAgICBMT0coJ1Rob3JU
cmFuc2FjdGlvbicsRVJST1IsICdFcnJvciBwcm9jZXNzaW5nIGNhbGxiYWNrcycsCiAgICAgICAg
ICAgICAgICAgICAgICAgIGVycm9yPXN5cy5leGNfaW5mbygpKQogICAgICAgICAgICBzZWxmLl9v
bkNvbW1pdENhbGxiYWNrcyA9IE5vbmUKCmNsYXNzIENvbW1pdEFjdGl2aXR5OgogICAgIiIiTWl4
LWluIGNsYXNzIHRoYXQgcHJvdmlkZXMgdHJhbnNhY3Rpb24gbWFuYWdlbWVudCBzdXBwb3J0Cgog
ICAgQSBzdWIgY2xhc3Mgc2hvdWxkIGNhbGwgc2VsZi5fcmVnaXN0ZXIoKSB3aGVuZXZlciBpdCBw
ZXJmb3JtcwogICAgYW55IHRyYW5zYWN0aW9uLWRlcGVuZGVudCBvcGVyYXRpb25zIChlLmcuIHNx
bCBzdGF0ZW1lbnRzKS4KCiAgICBUaGUgc3ViIGNsYXNzIHdpbGwgbmVlZCB0byBvdmVycmlkZToK
ICAgICAgYmVnaW4gaWYgbmVjZXNzYXJ5CiAgICAgIHZvdGUgdG8gcmFpc2UgYW4gZXhjZXB0IGlm
IG5lY2Vzc2FyeQogICAgICBmaW5pc2ggdG8gZmluYWxsaXplIHdvcmssCiAgICAgIGFib3J0IHRv
IHJvbGwtYmFjayB3b3JrCiAgICAiIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBz
ZWxmLl9iZWdpbkNhbGxlZCA9IDAKICAgICAgICBzZWxmLl92b3RlQ2FsbGVkID0gMAogICAgICAg
IHNlbGYuX2Fib3J0Q2FsbGVkID0gMAogICAgICAgIHNlbGYuX2ZpbmlzaENhbGxlZCA9IDAKICAg
ICAgICBzZWxmLl9yZWdpc3RlcigpCgogICAgX3JlZ2lzdGVyZWQ9Tm9uZQoKICAgIGRlZiBfYmVn
aW4oc2VsZik6CiAgICAgICAgIiIiSG9vayBtZXRob2QgdG8gYmVnaW4gZXh0ZXJuYWwgdHJhbnNh
Y3Rpb24uCiAgICAgICAgVGhpcyBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLCIiIgogICAg
ICAgIHBhc3MKCiAgICBkZWYgX3ZvdGUoc2VsZik6CiAgICAgICAgIiIiSG9vayBtZXRob2QgdG8g
dm90ZSBvbiBzdWNjZXNzIG9mIHRyYW5zYWN0aW9uIGNvbW1pdC4KICAgICAgICBUaGlzIHdpbGwg
b25seSBiZSBjYWxsZWQgb25jZSwiIiIKICAgICAgICBwYXNzCgogICAgZGVmIF9maW5pc2goc2Vs
Zik6CiAgICAgICAgIiIiSG9vayBtZXRob2QgdG8gY29tcGxldGUgdHJhbnNhY3Rpb24gd29yay4K
ICAgICAgICBUaGlzIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIiIiCiAgICAgICAgcGFz
cwoKICAgIGRlZiBfYWJvcnQoc2VsZik6CiAgICAgICAgIiIiSG9vayBtZXRob2QgdG8gdW5kbyB0
cmFuc2FjdGlvbiB3b3JrLgogICAgICAgIFRoaXMgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1l
cy4iIiIKICAgICAgICBwYXNzCgogICAgZGVmIF9wb3N0Q29tbWl0KHNlbGYpOgogICAgICAgICIi
Ikhvb2sgbWV0aG9kIGNhbGxlZCB3aGVuIFRyYW5zYWN0aW9uIGhhcyBjb21wbGV0ZWQgYQogICAg
ICAgIGNvbW1pdCBwcm9jZXNzLgogICAgICAgICIiIgoKICAgIGNsYXNzIFN1cnJvZ2F0ZToKICAg
ICAgICAiQSBaT0RCIHBlcnNpc3RlbnQgbG9vay1hbGlrZS4iCiAgICAgICAgZGVmIF9faW5pdF9f
KHNlbGYsIGNvbm5lY3Rpb24pOgogICAgICAgICAgICBzZWxmLl9wX2phcj1jb25uZWN0aW9uCgog
ICAgZGVmIF9yZWdpc3RlcihzZWxmKToKICAgICAgICAiIiJUaGlzIG1ldGhvZCB3aWxsIHJlZ2lz
dGVyIGEgc3Vycm9nYXRlIHBlcnNpc3RlbnQKICAgICAgICBvYmplY3Qgd2l0aCB0aGUgdHJhbnNh
Y3Rpb24uICBUaGlzIHN1cnJvZ2F0ZSB3aWxsIGluY2x1ZGUKICAgICAgICBtZSBpbiB0aGUgdHBj
XyogdHdvLXBoYXNlIGNvbW1pdCBwcm9jZXNzLiIiIgoKICAgICAgICBpZiBub3Qgc2VsZi5fcmVn
aXN0ZXJlZDoKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgdHJhbnMgPSBnZXRfdHJh
bnNhY3Rpb24oKQogICAgICAgICAgICAgICAgdHJhbnMucmVnaXN0ZXIoQ29tbWl0QWN0aXZpdHku
U3Vycm9nYXRlKHNlbGYpKQogICAgICAgICAgICAgICAgdHJhbnMucmVnaXN0ZXJDb21taXRDYWxs
YmFjayhzZWxmLl9wb3N0Q29tbWl0KQogICAgICAgICAgICAgICAgc2VsZi5fcmVnaXN0ZXJlZD0x
CiAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKICAg
ICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQogICAgICAgICAgICAgICAgcGFzcwoK
ICAgIGRlZiB0cGNfYmVnaW4oc2VsZiwgdHJhbnNhY3Rpb24sIHN1Yj1Ob25lKToKICAgICAgICAi
Q29ubmVjdGlvbiBtZXRob2QgdG8gYmVnaW4gYSBjb21taXQuIgogICAgICAgIGlmIHN1YiBpcyBO
b25lIGFuZCBub3Qgc2VsZi5fYmVnaW5DYWxsZWQ6CiAgICAgICAgICAgIHNlbGYuX2JlZ2luQ2Fs
bGVkID0gMQogICAgICAgICAgICBzZWxmLl9iZWdpbigpCgogICAgZGVmIHRwY192b3RlKHNlbGYs
ICppZ25vcmVkKToKICAgICAgICAiQ29ubmVjdGlvbiBtZXRob2QgdG8gdm90ZSBvbiBjb21taXQg
c3VjY2Vzcy4iCiAgICAgICAgaWYgc2VsZi5fYmVnaW5DYWxsZWQgYW5kIG5vdCBzZWxmLl92b3Rl
Q2FsbGVkOgogICAgICAgICAgICBzZWxmLl92b3RlQ2FsbGVkID0gMQogICAgICAgICAgICBzZWxm
Ll92b3RlKCkKICAgICAgICAKICAgIGRlZiB0cGNfZmluaXNoKHNlbGYsICppZ25vcmVkKToKICAg
ICAgICAiIiJDb25uZWN0aW9uIG1ldGhvZCB0byBzaWduYWwgY29tbWl0IHN1Y2Nlc3MuCiAgICAg
ICAgVGhpcyBzaG91bGQgKm5ldmVyKiBmYWlsIiIiCiAgICAgICAgaWYgc2VsZi5fYmVnaW5DYWxs
ZWQgYW5kIG5vdCBzZWxmLl9maW5pc2hDYWxsZWQ6CiAgICAgICAgICAgIHNlbGYuX2ZpbmlzaENh
bGxlZCA9IDEKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgc2VsZi5fZmluaXNoKCkK
ICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgIHNlbGYuX3JlZ2lzdGVyZWQ9MAoK
ICAgIGRlZiB0cGNfYWJvcnQoc2VsZiwgKmlnbm9yZWQpOgogICAgICAgICIiIkNvbm5uZWN0aW9u
IG1ldGhvZCB0byBzaWduYWwgY29tbWl0IGZhaWx1cmUuCiAgICAgICAgVGhpcyBzaG91bGQgKm5l
dmVyKiBmYWlsIiIiCiAgICAgICAgaWYgc2VsZi5fYmVnaW5DYWxsZWQgYW5kIG5vdCBzZWxmLl9h
Ym9ydENhbGxlZDoKICAgICAgICAgICAgc2VsZi5fYWJvcnRDYWxsZWQgPSAxCiAgICAgICAgICAg
IHRyeToKICAgICAgICAgICAgICAgIHNlbGYuX2Fib3J0KCkKICAgICAgICAgICAgZmluYWxseToK
ICAgICAgICAgICAgICAgIHNlbGYuX3JlZ2lzdGVyZWQ9MAoKICAgIGRlZiBjb21taXQoc2VsZiwg
Kmlnbm9yZWQpOgogICAgICAgICJXZSBkb24ndCBuZWVkIHRvIGFjdHVhbGx5IGRvIGFueSBzdG9y
aW5nLiIKICAgICAgICBwYXNzCgogICAgZGVmIGFib3J0KHNlbGYsICppZ25vcmVkKToKICAgICAg
ICAiV2UgZG9uJ3QgbmVlZCB0byBhY3R1YWxseSBkbyBhbnkgYWJvcnRpbmcuIgogICAgICAgIHBh
c3MKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICB0ID0gZ2V0X3RyYW5zYWN0aW9uKCkK
CiAgICBhc3NlcnQgdGhyZWFkLmdldF9pZGVudCgpIGluIHQuYXR0YWNoZWRUbygpLCBcCiAgICAg
ICAgICAgIlNob3VsZCBpbmNsdWRlIHRoaXMgdGhyZWFkIGlkIgogICAgCiAgICBhc3NlcnQgdCA9
PSBnZXRfdHJhbnNhY3Rpb24oKQogICAgCiAgICB0LmRldGFjaCgpCgogICAgYXNzZXJ0IHQgIT0g
Z2V0X3RyYW5zYWN0aW9uKCkKCiAgICBhdXRvQ3JlYXRlVHJhbnNhY3Rpb25zKDApCgogICAgZ2V0
X3RyYW5zYWN0aW9uKCkuZGV0YWNoKCkKCiAgICB0cnk6CiAgICAgICAgZ2V0X3RyYW5zYWN0aW9u
KCkKICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICBwYXNzCiAgICBlbHNlOgogICAgICAgIGFz
c2VydCAwLCAnU2hvdWxkblwndCBoYXZlIGdvdHRlbiBhIHRyYW5zYWN0aW9uJwoKICAgIHQxID0g
VHJhbnNhY3Rpb24oKQogICAgdDIgPSBUcmFuc2FjdGlvbigpCiAgICB0MS5hdHRhY2goKQogICAg
dHJ5OgogICAgICAgIHQyLmF0dGFjaCgpCiAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgcGFz
cwogICAgZWxzZToKICAgICAgICBhc3NlcnQgMCwgIlNob3VsZCBoYXZlIGZhaWxlZCBiZWNhdXNl
IG9mIHQxIgo=

--------------Boundary-00=_GIA7ZE1AA11K02U1J3PI--