[Zope-dev] Announce: TransactionAgents 0.0.1

Steve Alexander steve@cat-box.net
Thu, 26 Jul 2001 19:24:07 +0100


Hi folks,

Please forgive the cross-posting.
The discussion of Transactions and ZODB has spilled over a number of 
mailing lists. Just be thankful I'm not copying in the cmf list!

Here's what I've been working on recently:

   http://www.cat-box.net/steve/TransactionAgents-0.0.1.tar.gz

Inside the archive file are three products. I'm using all three, and 
they work for me. You'll need Python 2.1 and Zope 2.4.

As usual, here's a warning:

   Do not use this stuff on important systems.
   Do not rely on the API staying the same.
   Do not rely on any of this finding its way
   into ZPatterns or Zope or ZODB.


The products are as follows:

PlugIns:

   Exactly what I found just now in CVS at eby-sarna.com

ZPatterns:

   I took exactly what I found just now in CVS at eby-sarna.com,
   fixed one showstopper bug (see my message to the ZPatterns list)
   made a few changes for it to play nicely with Zope 2.4,
   and altered the parts of ZPatterns that use transactions to
   use the TransactionAgents product.
   For kicks, the version.txt of this release is
     ZedPatterns-0-4-3p2-transactionagents

TransactionAgents:

   A runtime patch to ZODB.Transaction.Transaction to implement four
   types of Agent.

   1: The Rule Agent. Runs on a commit

   2: The Indexing Agent. Runs on a commit, after the Rule Agents
      are done. (*)

   3: The Boundary Agent. Runs when the outermost transaction is
      done (either aborted or commited).

   4: The Post-Commit Agent. Runs in its own transaction after
      the outer transaction is successfully committed.

(*) Things get interesting when you commit a subtransaction from a rule 
agent or an indexing agent. It works; see the test suite for an example 
of what happens it works.

An important thing is that exceptions in Rule Agents and Indexing Agents 
  are not caught, but propagate just like they would in normal methods.
Exceptions raised in Boundary Agents and Post Commit Agents get 
swallowed and ignored (except for a warning to the log).

This is important because running Rules and updating Indexes are usually 
  a vital part of the transactional logic of an application. (Someone 
please translate that into plain language!).

See also the test suite in the tests/ subdirectory. The comments and 
docstrings there should help to explain what is going on.

For ZPatterns enthusiasts, here's the release notes for 
ZedPatterns-0-4-3p2-transactionagents:

----
26 July 2001

Welcome to ZedPatterns-0-4-3p2-transactionagents.

This is an experimental and unofficial release of ZPatterns,
to test out new ideas, and clear a path to compatibility with
Zope 2.4 and Python 2.1.

I've included an unaltered copy of the PlugIns product, as it
is required by ZPatterns.

UnTar the contents of the archive directly in your Products
directory.

Changes from ZPatterns 0-4-3p2:

* SkinScript works with Zope 2.4.

* Fixed __set_attr__ bug involving _v_parent

* Requires Python 2.1, Zope 2.4.

* Requires TransactionAgents product.

* Agents now run just before transactions get commited
   rather than during a tpc_commit.

* New SkinScript for running a trigger as an IndexingAgent.
   It goes like this::

     WHEN OBJECT CHANGED INDEX CALLING expression

   Indexing agents run after normal agents/triggers (called
   Rule Agents), although there are special rules for
   when a subtransaction is committed while an agent is running.
   See the TransactionAgents product's test suite for details.


* ZPatterns doesn't go into an infinite loop if you commit
   a subtransaction from a trigger.

* Support for list comprehensions in SkinScript.

* Per-transaction cached _v_ attributes now last until the
   outermost transaction has finished. This will improve
   execution speed by a miniscule amount in some circumstances.

----

Credit where it's due... The ideas behind TransactionAgents were 
discussed by Phillip Eby and Shane Hathaway a couple of months ago on 
the Zope-Dev mailing list.
I used Casey Duncan's Hotfixes HowTo as a guide to writing the runtime 
patch.
I read up on test suites from Michel P and Chris McD's ZDG.
Phillip Eby and Ty Sarna came up with the original ZPatterns product, 
maintain the difinitive version of it, and are the ultimate arbiters of 
taste and decency as to what features and patches make it into a real 
ZPatterns release.

All bugs and mistakes in ZedPatterns and TransactionAgents are mine 
alone. Patches and feedback welcome.

--
Steve Alexander
Software Engineer
Cat-Box limited