[Zope-CVS] CVS: Packages/zasync/client/zasync - plugins.py:1.9.2.1

Gary Poster gary at zope.com
Wed Jan 19 23:11:24 EST 2005


Update of /cvs-repository/Packages/zasync/client/zasync
In directory cvs.zope.org:/tmp/cvs-serv25364/client/zasync

Modified Files:
      Tag: zasync-1_0-branch
	plugins.py 
Log Message:
More fixes for the code path of handling error-raising reprs (grr).



=== Packages/zasync/client/zasync/plugins.py 1.9 => 1.9.2.1 ===
--- Packages/zasync/client/zasync/plugins.py:1.9	Fri Jan  7 14:36:51 2005
+++ Packages/zasync/client/zasync/plugins.py	Wed Jan 19 23:11:23 2005
@@ -469,7 +469,7 @@
         'zope_exec: beginning worker thread %r', thread_id)
     global taskQueue, taskStatus, threadIds, callbacks, serverDown
     from zasync.client import app, max_conflict_resolution_attempts
-    application = None
+    application = remembered_failure = None
     try:
         while 1: # keep on looking for tasks
             # blocks:
@@ -484,6 +484,7 @@
                 continue
             toolpath, zopeDeferredId = zopeDeferredTuple
             for attempt in range(max_conflict_resolution_attempts):
+                remembered_failure = None
                 try:
                     try:
                         deferred = None
@@ -564,8 +565,7 @@
                             call = Expression(call)
                             try:
                                 res = call(context)
-                            except ((ConflictError, KeyboardInterrupt, 
-                                     SystemExit, ClientDisconnected)):
+                            except (ConflictError, ClientDisconnected):
                                 raise
                             except:
                                 res = failure.Failure()
@@ -610,6 +610,7 @@
                             break # the timeout errback is supposed to have
                             # been communicated within the main zasync thread
                     except ConflictError:
+                        remembered_failure = cleanFailure(failure.Failure())
                         get_transaction().abort() 
                         logger.debug(
                             'zope_exec: worker %s got conflict error', 
@@ -617,9 +618,6 @@
                         if attempt < max_conflict_resolution_attempts:
                             time.sleep(attempt + 1) # XXX better idea?
                         # (and continue, retrying if appropriate)
-                    except (KeyboardInterrupt, SystemExit):
-                        get_transaction().abort() 
-                        raise
                     except ClientDisconnected:
                         get_transaction().abort()
                         logger.debug(
@@ -646,8 +644,8 @@
                         # the failure back to the log (and Zope, if the tool
                         # and the associated deferred happen to magically 
                         # reappear).
+                        f = cleanFailure(failure.Failure())
                         get_transaction().abort()
-                        f = failure.Failure()
                         out = None
                         if client.verbose_traceback:
                             out = StringIO.StringIO()
@@ -719,6 +717,8 @@
                             callbacks.put((deferred, fail))
                         break
                 finally:
+                    if remembered_failure is None:
+                        remembered_failure = cleanFailure(failure.Failure())
                     if application is not None:
                         application._p_jar.close()
                         application = None
@@ -728,11 +728,13 @@
                     'giving up.', thread_id)
                 deferred = popTaskStatus(zopeDeferredTuple)
                 if deferred is not None and deferred is not CANCEL:
+                    if remembered_failure is None:
+                        remembered_failure = cleanFailure(failure.Failure())
                     logger.debug(
                         'zope_exec: worker %s scheduling failure message with '
                         'zasync', thread_id)
                     callbacks.put(
-                        (deferred, failure.Failure()))
+                        (deferred, remembered_failure))
     finally:
         logger.debug(
             'zope_exec: worker %s cleaning up and going away', thread_id)
@@ -749,5 +751,7 @@
                 logger.debug(
                     'zope_exec: worker %s scheduling failure message with '
                     'zasync', thread_id)
+                if remembered_failure is None:
+                    remembered_failure = cleanFailure(failure.Failure())
                 callbacks.put(
-                    (deferred, failure.Failure()))
+                    (deferred, remembered_failure))



More information about the Zope-CVS mailing list