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()