From d19fdad0ba1c4610484350dc1317b2c830a8e8b4 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Mon, 12 Sep 2016 14:35:27 -0400 Subject: [PATCH] Avoid double-disconnect behavior Do a better job of cleanly handling scenarios where disconnect would come from a session currently disconnected. Inside the ipmi plugin, suppress a disconnect event if one has been sent. Inside consoleserver, surpress logging a disconnect when already disconnected. Originally was going to skip the reconnect, but that would mitigate recovery. Hopefully supressing the duplicate disconnect in ipmi plugin, and some fixes in pyghmi will avoid a 'double connect' scenario. --- confluent_server/confluent/consoleserver.py | 11 ++++++----- .../confluent/plugins/hardwaremanagement/ipmi.py | 1 + 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/confluent_server/confluent/consoleserver.py b/confluent_server/confluent/consoleserver.py index c93b1c50..dd8341e3 100644 --- a/confluent_server/confluent/consoleserver.py +++ b/confluent_server/confluent/consoleserver.py @@ -255,11 +255,12 @@ class ConsoleHandler(object): self._send_rcpts({'connectstate': self.connectstate}) def _got_disconnected(self): - self.connectstate = 'unconnected' - self.log( - logdata='console disconnected', ltype=log.DataTypes.event, - event=log.Events.consoledisconnect) - self._send_rcpts({'connectstate': self.connectstate}) + if self.connectstate != 'unconnected': + self.connectstate = 'unconnected' + self.log( + logdata='console disconnected', ltype=log.DataTypes.event, + event=log.Events.consoledisconnect) + self._send_rcpts({'connectstate': self.connectstate}) if self._isalive: self._connect() diff --git a/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py b/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py index 53d2a23b..70d3ddff 100644 --- a/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py +++ b/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py @@ -219,6 +219,7 @@ class IpmiConsole(conapi.Console): self.broken = True self.error = data['error'] if self.connected: + self.connected = False self.datacallback(conapi.ConsoleEvent.Disconnect) else: self.datacallback(data)