mirror of
https://github.com/openvswitch/ovs
synced 2025-10-15 14:17:18 +00:00
ovsdb-server: Report time since last connect and disconnect for each manager.
Only the time connected (if connected) or disconnected (if disconnected) is currently reported for each manager. Change to reporting both in seconds since the last connect and disconnect events respectively. An empty value indicates no previous connection or disconnection. This can help diagnose certain connectivity problems, e.g. flapping. Requested-by: Peter Balland <peter@nicira.com> Bug #4833.
This commit is contained in:
@@ -106,8 +106,8 @@ reconnect_create(long long int now)
|
||||
fsm->state_entered = now;
|
||||
fsm->backoff = 0;
|
||||
fsm->last_received = now;
|
||||
fsm->last_connected = now;
|
||||
fsm->last_disconnected = now;
|
||||
fsm->last_connected = LLONG_MAX;
|
||||
fsm->last_disconnected = LLONG_MAX;
|
||||
fsm->max_tries = UINT_MAX;
|
||||
fsm->creation_time = now;
|
||||
|
||||
@@ -642,23 +642,26 @@ reconnect_is_connected(const struct reconnect *fsm)
|
||||
return is_connected_state(fsm->state);
|
||||
}
|
||||
|
||||
/* Returns the number of milliseconds for which 'fsm' has been continuously
|
||||
* connected to its peer. (If 'fsm' is not currently connected, this is 0.) */
|
||||
/* Returns the number of milliseconds since 'fsm' last successfully connected
|
||||
* to its peer (even if it has since disconnected). Returns UINT_MAX if never
|
||||
* connected. */
|
||||
unsigned int
|
||||
reconnect_get_connection_duration(const struct reconnect *fsm,
|
||||
long long int now)
|
||||
reconnect_get_last_connect_elapsed(const struct reconnect *fsm,
|
||||
long long int now)
|
||||
{
|
||||
return reconnect_is_connected(fsm) ? now - fsm->last_connected : 0;
|
||||
return fsm->last_connected == LLONG_MAX ? UINT_MAX
|
||||
: now - fsm->last_connected;
|
||||
}
|
||||
|
||||
/* Returns the number of milliseconds for which 'fsm' has been continuously
|
||||
* disconnected from its peer. (If 'fsm' is not currently connected,
|
||||
* this is 0.) */
|
||||
/* Returns the number of milliseconds since 'fsm' last disconnected
|
||||
* from its peer (even if it has since reconnected). Returns UINT_MAX if never
|
||||
* disconnected. */
|
||||
unsigned int
|
||||
reconnect_get_disconnect_duration(const struct reconnect *fsm,
|
||||
long long int now)
|
||||
reconnect_get_last_disconnect_elapsed(const struct reconnect *fsm,
|
||||
long long int now)
|
||||
{
|
||||
return reconnect_is_connected(fsm) ? 0 : now - fsm->last_disconnected;
|
||||
return fsm->last_disconnected == LLONG_MAX ? UINT_MAX
|
||||
: now - fsm->last_disconnected;
|
||||
}
|
||||
|
||||
/* Copies various statistics for 'fsm' into '*stats'. */
|
||||
@@ -673,12 +676,13 @@ reconnect_get_stats(const struct reconnect *fsm, long long int now,
|
||||
stats->backoff = fsm->backoff;
|
||||
stats->seqno = fsm->seqno;
|
||||
stats->is_connected = reconnect_is_connected(fsm);
|
||||
stats->current_connection_duration
|
||||
= reconnect_get_connection_duration(fsm, now);
|
||||
stats->current_disconnect_duration
|
||||
= reconnect_get_disconnect_duration(fsm, now);
|
||||
stats->total_connected_duration = (stats->current_connection_duration
|
||||
+ fsm->total_connected_duration);
|
||||
stats->msec_since_connect
|
||||
= reconnect_get_last_connect_elapsed(fsm, now);
|
||||
stats->msec_since_disconnect
|
||||
= reconnect_get_last_disconnect_elapsed(fsm, now);
|
||||
stats->total_connected_duration = fsm->total_connected_duration
|
||||
+ (is_connected_state(fsm->state)
|
||||
? reconnect_get_last_connect_elapsed(fsm, now) : 0);
|
||||
stats->n_attempted_connections = fsm->n_attempted_connections;
|
||||
stats->n_successful_connections = fsm->n_successful_connections;
|
||||
stats->state = reconnect_state_name__(fsm->state);
|
||||
|
Reference in New Issue
Block a user