Global replace of Nicira Networks.
[sliver-openvswitch.git] / python / ovs / reconnect.py
index f342143..4599573 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2010, 2011 Nicira Networks
+# Copyright (c) 2010, 2011, 2012 Nicira, Inc.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import logging
 import os
 
+import ovs.vlog
+import ovs.util
+
 # Values returned by Reconnect.run()
 CONNECT = 'connect'
 DISCONNECT = 'disconnect'
 PROBE = 'probe'
 
-EOF = -1
+EOF = ovs.util.EOF
+vlog = ovs.vlog.Vlog("reconnect")
 
 
 class Reconnect(object):
@@ -97,9 +100,9 @@ class Reconnect(object):
 
         @staticmethod
         def run(fsm, now):
-            logging.debug("%s: idle %d ms, sending inactivity probe"
-                          % (fsm.name,
-                             now - max(fsm.last_received, fsm.state_entered)))
+            vlog.dbg("%s: idle %d ms, sending inactivity probe"
+                     % (fsm.name,
+                        now - max(fsm.last_received, fsm.state_entered)))
             fsm._transition(now, Reconnect.Idle)
             return PROBE
 
@@ -109,13 +112,15 @@ class Reconnect(object):
 
         @staticmethod
         def deadline(fsm):
-            return fsm.state_entered + fsm.probe_interval
+            if fsm.probe_interval:
+                return fsm.state_entered + fsm.probe_interval
+            return None
 
         @staticmethod
         def run(fsm, now):
-            logging.error("%s: no response to inactivity probe after %.3g "
-                          "seconds, disconnecting"
-                          % (fsm.name, (now - fsm.state_entered) / 1000.0))
+            vlog.err("%s: no response to inactivity probe after %.3g "
+                     "seconds, disconnecting"
+                      % (fsm.name, (now - fsm.state_entered) / 1000.0))
             return DISCONNECT
 
     class Reconnect(object):
@@ -140,7 +145,7 @@ class Reconnect(object):
         self.max_backoff = 8000
         self.probe_interval = 5000
         self.passive = False
-        self.info_level = logging.info
+        self.info_level = vlog.info
 
         self.state = Reconnect.Void
         self.state_entered = now
@@ -168,9 +173,9 @@ class Reconnect(object):
         This setting has no effect on the log level of debugging, warning, or
         error messages."""
         if quiet:
-            self.info_level = logging.debug
+            self.info_level = vlog.dbg
         else:
-            self.info_level = logging.info
+            self.info_level = vlog.info
 
     def get_name(self):
         return self.name
@@ -318,8 +323,8 @@ class Reconnect(object):
             # Report what happened
             if self.state in (Reconnect.Active, Reconnect.Idle):
                 if error > 0:
-                    logging.warning("%s: connection dropped (%s)"
-                                    % (self.name, os.strerror(error)))
+                    vlog.warn("%s: connection dropped (%s)"
+                              % (self.name, os.strerror(error)))
                 elif error == EOF:
                     self.info_level("%s: connection closed by peer"
                                     % self.name)
@@ -327,8 +332,8 @@ class Reconnect(object):
                     self.info_level("%s: connection dropped" % self.name)
             elif self.state == Reconnect.Listening:
                 if error > 0:
-                    logging.warning("%s: error listening for connections (%s)"
-                                    % (self.name, os.strerror(error)))
+                    vlog.warn("%s: error listening for connections (%s)"
+                              % (self.name, os.strerror(error)))
                 else:
                     self.info_level("%s: error listening for connections"
                                     % self.name)
@@ -338,8 +343,8 @@ class Reconnect(object):
                 else:
                     type_ = "connection"
                 if error > 0:
-                    logging.warning("%s: %s attempt failed (%s)"
-                                    % (self.name, type_, os.strerror(error)))
+                    vlog.warn("%s: %s attempt failed (%s)"
+                              % (self.name, type_, os.strerror(error)))
                 else:
                     self.info_level("%s: %s attempt timed out"
                                     % (self.name, type_))
@@ -459,7 +464,7 @@ class Reconnect(object):
                 self.total_connected_duration += now - self.last_connected
             self.seqno += 1
 
-        logging.debug("%s: entering %s" % (self.name, state.name))
+        vlog.dbg("%s: entering %s" % (self.name, state.name))
         self.state = state
         self.state_entered = now
 
@@ -501,7 +506,9 @@ class Reconnect(object):
               connection is indeed in working order.  (This will only be
               returned if the "probe interval" is nonzero--see
               self.set_probe_interval())."""
-        if now >= self.state.deadline(self):
+
+        deadline = self.state.deadline(self)
+        if deadline is not None and now >= deadline:
             return self.state.run(self, now)
         else:
             return None