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:
parent
252596cbed
commit
9783050e3e
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user