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
This commit is contained in:
rossella 2015-12-14 12:31:17 +00:00
parent 252596cbed
commit 9783050e3e
2 changed files with 9 additions and 8 deletions

View File

@ -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

View File

@ -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