[Erp5-report] r19081 - /erp5/trunk/products/CMFActivity/ActivityTool.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Tue Feb 5 20:31:18 CET 2008
Author: vincent
Date: Tue Feb 5 20:31:17 2008
New Revision: 19081
URL: http://svn.erp5.org?rev=19081&view=rev
Log:
Catch and log exceptions at process_timer level so that a raising distribute, wakeup or tic call can reach transaction end ASAP.
Modified:
erp5/trunk/products/CMFActivity/ActivityTool.py
Modified: erp5/trunk/products/CMFActivity/ActivityTool.py
URL: http://svn.erp5.org/erp5/trunk/products/CMFActivity/ActivityTool.py?rev=19081&r1=19080&r2=19081&view=diff
==============================================================================
--- erp5/trunk/products/CMFActivity/ActivityTool.py (original)
+++ erp5/trunk/products/CMFActivity/ActivityTool.py Tue Feb 5 20:31:17 2008
@@ -593,7 +593,9 @@
# because processing_node starts form 1
if currentNode in processing_node_list:
self.tic(processing_node_list.index(currentNode)+1)
-
+ except:
+ # Catch ALL exception to avoid killing timerserver.
+ LOG('ActivityTool', ERROR, 'process_timer received an exception', error=sys.exc_info())
finally:
timerservice_lock.release()
setSecurityManager(old_sm)
@@ -609,12 +611,7 @@
# Call distribute on each queue
for activity in activity_list:
- try:
- activity.distribute(aq_inner(self), node_count)
- except ConflictError:
- raise
- except:
- LOG('CMFActivity:', 100, 'Core call to distribute failed for activity %s' % activity, error=sys.exc_info())
+ activity.distribute(aq_inner(self), node_count)
security.declarePublic('tic')
def tic(self, processing_node=1, force=0):
@@ -652,25 +649,15 @@
try:
# Wakeup each queue
for activity in activity_list:
- try:
- activity.wakeup(inner_self, processing_node)
- except ConflictError:
- raise
- except:
- LOG('CMFActivity:', 100, 'Core call to wakeup failed for activity %s' % activity)
+ activity.wakeup(inner_self, processing_node)
# Process messages on each queue in round robin
has_awake_activity = 1
while has_awake_activity:
has_awake_activity = 0
for activity in activity_list:
- try:
- activity.tic(inner_self, processing_node) # Transaction processing is the responsability of the activity
- has_awake_activity = has_awake_activity or activity.isAwake(inner_self, processing_node)
- except ConflictError:
- raise
- except:
- LOG('CMFActivity:', 100, 'Core call to tic or isAwake failed for activity %s' % activity, error=sys.exc_info())
+ activity.tic(inner_self, processing_node) # Transaction processing is the responsability of the activity
+ has_awake_activity = has_awake_activity or activity.isAwake(inner_self, processing_node)
finally:
# decrease the number of active_threads
tic_lock.acquire()
More information about the Erp5-report
mailing list