[Erp5-report] r23708 - /erp5/trunk/products/ERP5/Tool/AlarmTool.py

nobody at svn.erp5.org nobody at svn.erp5.org
Fri Sep 19 04:08:23 CEST 2008


Author: vincent
Date: Fri Sep 19 04:08:22 2008
New Revision: 23708

URL: http://svn.erp5.org?rev=23708&view=rev
Log:
Setting the alarm node from ZMI with an empty value will effectively disable alarm processing, instead of making each and every node in a cluster an alarm node (only one node can be an alarm node).

Modified:
    erp5/trunk/products/ERP5/Tool/AlarmTool.py

Modified: erp5/trunk/products/ERP5/Tool/AlarmTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Tool/AlarmTool.py?rev=23708&r1=23707&r2=23708&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Tool/AlarmTool.py (original)
+++ erp5/trunk/products/ERP5/Tool/AlarmTool.py Fri Sep 19 04:08:22 2008
@@ -92,6 +92,13 @@
 
   _properties = ( {'id': 'interval', 'type': 'int', 'mode': 'w', }, )
   interval = 60 # Default interval for alarms is 60 seconds
+  # alarmNode possible values:
+  #  ''      Bootstraping. The first node to call process_timer will cause this
+  #          value to be set to its node id.
+  #  (other) Node id matching this value will be the alarmNode.
+  # Those values were chosen for backward compatibility with sites having an
+  # alarmNode set to '' but expecting alarms to be executed. Use None to
+  # disable alarm processing (see setAlarmNode).
   alarmNode = ''
 
   # API to manage alarms
@@ -193,10 +200,13 @@
       This method is called by TimerService in the interval given
       in zope.conf. The Default is every 5 seconds.
     """
-    # only start when we are the alarmNode or if it's empty
+    # only start when we are the alarmNode
     alarmNode = self.getAlarmNode()
-    if (not alarmNode) \
-      or (alarmNode == self.getCurrentNode()):
+    current_node = self.getCurrentNode()
+    if alarmNode == '':
+      self.setAlarmNode(current_node)
+      alarmNode = current_node
+    if alarmNode == current_node:
       global last_tic
       last_tic_lock.acquire(1)
       try:
@@ -228,6 +238,17 @@
       """ Return the alarmNode """
       return self.alarmNode
 
+  def setAlarmNode(self, alarm_node):
+    """
+      When alarm_node evaluates to false, set a None value:
+      Its meaning is that alarm processing is disabled.
+      This avoids an empty string to make the system re-enter boostrap mode.
+    """
+    if alarm_node:
+      self.alarmNode = alarm_node
+    else:
+      self.alarmNode = None
+
   def _isValidNodeName(self, node_name) :
     """Check we have been provided a good node name"""
     return isinstance(node_name, str) and NODE_RE.match(node_name)
@@ -236,7 +257,7 @@
   def manage_setAlarmNode(self, alarmNode, REQUEST=None):
       """ set the alarm node """   
       if not alarmNode or self._isValidNodeName(alarmNode):
-        self.alarmNode = alarmNode
+        self.setAlarmNode(alarmNode)
         if REQUEST is not None:
             REQUEST.RESPONSE.redirect(
                 REQUEST.URL1 +




More information about the Erp5-report mailing list