From 3aa871fa29bdc251c207235867662ba1d02e966f Mon Sep 17 00:00:00 2001 From: Sylvain Afchain Date: Tue, 30 Sep 2014 12:30:22 +0200 Subject: [PATCH] Fixes InvalidSessionID when restarting ifmap This patch fixes an issue when the ifmap server is restarted. In that case the svc_monitor gets InvalidSessionID error from the newly ifmap connection and starts to flood the ifmap server. Closes-bug #1375696 Change-Id: Ibec3f7e1fe253c3a0e81ed812f028b302b986f3c --- src/config/common/exceptions.py | 5 +++++ src/config/common/imid.py | 3 +++ src/config/svc-monitor/svc_monitor/svc_monitor.py | 11 ++++++++--- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/config/common/exceptions.py b/src/config/common/exceptions.py index 4421d9119b4..db739107dee 100644 --- a/src/config/common/exceptions.py +++ b/src/config/common/exceptions.py @@ -95,3 +95,8 @@ def __str__(self): class AmbiguousParentError(VncError): pass + + +class InvalidSessionID(VncError): + pass +# end InvalidSessionID diff --git a/src/config/common/imid.py b/src/config/common/imid.py index 1f52bddb81d..f4d1850ce12 100644 --- a/src/config/common/imid.py +++ b/src/config/common/imid.py @@ -8,6 +8,7 @@ import re import StringIO from lxml import etree +from cfgm_common import exceptions from cfgm_common.ifmap.client import client from ifmap.request import NewSessionRequest, RenewSessionRequest, \ EndSessionRequest, PublishRequest, SearchRequest, \ @@ -200,6 +201,8 @@ def parse_poll_result(poll_result_str): namespaces=_XPATH_NAMESPACES) if error_results: + if error_results[0].get('errorCode') == 'InvalidSessionID': + raise exceptions.InvalidSessionID(etree.tostring(error_results[0])) raise Exception(etree.tostring(error_results[0])) xpath_expr = '/a:Envelope/a:Body/b:response/pollResult' diff --git a/src/config/svc-monitor/svc_monitor/svc_monitor.py b/src/config/svc-monitor/svc_monitor/svc_monitor.py index 7870ba3498d..aff00cbe111 100644 --- a/src/config/svc-monitor/svc_monitor/svc_monitor.py +++ b/src/config/svc-monitor/svc_monitor/svc_monitor.py @@ -24,6 +24,7 @@ import logging import logging.handlers +from cfgm_common import exceptions from cfgm_common.imid import * from cfgm_common import importutils from cfgm_common import svc_info @@ -505,6 +506,9 @@ def launch_arc(monitor, ssrc_mapc): pollreq = PollRequest(arc_mapc.get_session_id()) result = arc_mapc.call('poll', pollreq) monitor.process_poll_result(result) + except exceptions.InvalidSessionID: + cgitb_error_log(monitor) + return except Exception as e: if type(e) == socket.error: time.sleep(3) @@ -512,9 +516,10 @@ def launch_arc(monitor, ssrc_mapc): cgitb_error_log(monitor) def launch_ssrc(monitor): - ssrc_mapc = ssrc_initialize(monitor._args) - arc_glet = gevent.spawn(launch_arc, monitor, ssrc_mapc) - arc_glet.join() + while True: + ssrc_mapc = ssrc_initialize(monitor._args) + arc_glet = gevent.spawn(launch_arc, monitor, ssrc_mapc) + arc_glet.join() def timer_callback(monitor): si_list = monitor.db.service_instance_list()