X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=python%2Fovs%2Freconnect.py;h=5fc96bc8713a568a3ba7dc990be4bfd12ab8ce2d;hb=6910a6e6f25f7fe7adfd93c8405671e72d4d156b;hp=90485799b2b3ad165777ecc27fbce08e844f600b;hpb=991559357f6a03c3a5b70c053c8c2554aa8d5ee4;p=openvswitch diff --git a/python/ovs/reconnect.py b/python/ovs/reconnect.py index 90485799..5fc96bc8 100644 --- a/python/ovs/reconnect.py +++ b/python/ovs/reconnect.py @@ -72,7 +72,7 @@ class Reconnect(object): return CONNECT class ConnectInProgress(object): - name = "CONNECT_IN_PROGRESS" + name = "CONNECTING" is_connected = False @staticmethod @@ -145,7 +145,8 @@ class Reconnect(object): self.state_entered = now self.backoff = 0 self.last_received = now - self.last_connected = now + self.last_connected = None + self.last_disconnected = None self.max_tries = None self.creation_time = now @@ -341,6 +342,9 @@ class Reconnect(object): self.info_level("%s: %s attempt timed out" % (self.name, type)) + if (self.state in (Reconnect.Active, Reconnect.Idle)): + self.last_disconnected = now + # Back off if (self.state in (Reconnect.Active, Reconnect.Idle) and (self.last_received - self.last_connected >= self.backoff or @@ -525,14 +529,21 @@ class Reconnect(object): False otherwise.""" return self.state.is_connected - def get_connection_duration(self, now): - """Returns the number of milliseconds for which this FSM has been - continuously connected to its peer. (If this FSM is not currently - connected, this is 0.)""" - if self.is_connected(): + def get_last_connect_elapsed(self, now): + """Returns the number of milliseconds since 'fsm' was last connected + to its peer. Returns None if never connected.""" + if self.last_connected: return now - self.last_connected else: - return 0 + return None + + def get_last_disconnect_elapsed(self, now): + """Returns the number of milliseconds since 'fsm' was last disconnected + from its peer. Returns None if never disconnected.""" + if self.last_disconnected: + return now - self.last_disconnected + else: + return None def get_stats(self, now): class Stats(object): @@ -540,13 +551,16 @@ class Reconnect(object): stats = Stats() stats.creation_time = self.creation_time stats.last_connected = self.last_connected + stats.last_disconnected = self.last_disconnected stats.last_received = self.last_received stats.backoff = self.backoff stats.seqno = self.seqno stats.is_connected = self.is_connected() - stats.current_connection_duration = self.get_connection_duration(now) - stats.total_connected_duration = (stats.current_connection_duration + - self.total_connected_duration) + stats.msec_since_connect = self.get_last_connect_elapsed(now) + stats.msec_since_disconnect = self.get_last_disconnect_elapsed(now) + stats.total_connected_duration = self.total_connected_duration + if self.is_connected(): + stats.total_connected_duration += self.get_last_connect_elapsed(now) stats.n_attempted_connections = self.n_attempted_connections stats.n_successful_connections = self.n_successful_connections stats.state = self.state.name