-----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@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-----