From 9783050e3ea6b9c0201a6d4733d1987839d1df7d Mon Sep 17 00:00:00 2001 From: rossella Date: Mon, 14 Dec 2015 12:31:17 +0000 Subject: [PATCH] Don't raise if polling manager is running when stopped AsyncProcess.stop() will raise if the process we are trying to stop is not running. Some functional tests sporadically fail because in the clean up the polling manager is stopped without checking if it's still running. Add an except in InterfacePollingMinimizer.stop() to avoid raising an exception when the monitor is not running. Change-Id: Iec8f5039ae5b830836564a1a402ad3e4ba38935d Closes-bug: #1525856 --- neutron/agent/linux/polling.py | 9 ++++++++- .../ml2/drivers/openvswitch/agent/ovs_neutron_agent.py | 8 +------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/neutron/agent/linux/polling.py b/neutron/agent/linux/polling.py index be693d8c4..29d5bd668 100644 --- a/neutron/agent/linux/polling.py +++ b/neutron/agent/linux/polling.py @@ -15,11 +15,15 @@ import contextlib import eventlet +from oslo_log import log as logging from neutron.agent.common import base_polling +from neutron.agent.linux import async_process from neutron.agent.linux import ovsdb_monitor from neutron.plugins.ml2.drivers.openvswitch.agent.common import constants +LOG = logging.getLogger(__name__) + @contextlib.contextmanager def get_polling_manager(minimize_polling=False, @@ -53,7 +57,10 @@ class InterfacePollingMinimizer(base_polling.BasePollingManager): self._monitor.start() def stop(self): - self._monitor.stop() + try: + self._monitor.stop() + except async_process.AsyncProcessException: + LOG.debug("InterfacePollingMinimizer was not running when stopped") def _is_polling_required(self): # Maximize the chances of update detection having a chance to diff --git a/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py b/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py index 414039e93..6e8859730 100644 --- a/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py +++ b/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py @@ -33,7 +33,6 @@ from neutron.agent.common import ovs_lib from neutron.agent.common import polling from neutron.agent.common import utils from neutron.agent.l2.extensions import manager as ext_manager -from neutron.agent.linux import async_process from neutron.agent.linux import ip_lib from neutron.agent.linux import polling as linux_polling from neutron.agent import rpc as agent_rpc @@ -1812,12 +1811,7 @@ class OVSNeutronAgent(sg_rpc.SecurityGroupAgentRpcCallbackMixin, # no action and by InterfacePollingMinimizer as start/stop if isinstance( polling_manager, linux_polling.InterfacePollingMinimizer): - # There's a possible race here, when ovsdb-server is - # restarted ovsdb monitor will also be restarted - try: - polling_manager.stop() - except async_process.AsyncProcessException: - LOG.debug("OVSDB monitor was not running") + polling_manager.stop() polling_manager.start() elif ovs_status == constants.OVS_DEAD: # Agent doesn't apply any operations when ovs is dead, to -- 2.45.2