[Zope] zopectl does not terminate

Tres Seaver tseaver at palladion.com
Tue Mar 17 14:11:26 EDT 2009


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hedley Roos wrote:
> Hi all
> 
> I run my script foo.zctl with "zopectl run foo.ctl param1 param2".
> This script operates on a large ZODB and catches ConflictErrors
> accordingly. It iterates over a set, updates data and commits the
> transaction every 100 iterations. But I've noticed two things:
> 
> 1. ConflictErrors are never fully caught. The show up in the console
> (this is acceptable I suppose), but my script stops executing on the
> conflict and does not continue. The zope process stays alive.

Your script has to do the following when interrupted by a ConflictError:

 - abort the current transaction
 - sync its database connection (to pick up the changed objects)
 - re-do the work it was trying to commit (that last 100 updates).

> 2. In the event of no conflict errors my script executes its last line
> (print 'done') but the process does not always terminate.

You may need to wait longer:  a commit can get blocked for a period.

> If I instruct my script to not update the ZODB at all it terminates
> without problems. I'm running it on a live site with 7 ZEO clients.
> I've stopped a client (say client 2) so it is not accessed
> concurrently and run my script with client2/zopectl. It is in fact a
> Plone site but that should be irrelevant.

Long-running ZODB-updating scripts are pretty hard to get right.  I hope
the dance outlined above helps.


Tres.
- --
===================================================================
Tres Seaver          +1 540-429-0999          tseaver at palladion.com
Palladion Software   "Excellence by Design"    http://palladion.com
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFJv+fO+gerLs4ltQ4RAsUKAJ95OJvb/pH1hqn2DlyJNlxrP/KuEgCgvOsa
TaUIrLs0Vm7jRWjMST0zh+E=
=3kvF
-----END PGP SIGNATURE-----



More information about the Zope mailing list