Browse Source

Only notify nova of port status changes if configured

Although notify_nova_on_port_status_changes defaults to true, it
could be to false, making the nova_notifier attribute unsafe to
use without checking.

This patch checks both the config option and that the attribute
exists, since the config could be changed after the plugin is
already initialized without the nova_notifier attribute being set.

Change-Id: Ide0f93275e60dffda10b7da59f6d81c5582c3849
Closes-bug: #1843269
(cherry picked from commit ab4320edb4)
changes/56/728556/1
Brian Haley 10 months ago
committed by Terry Wilson
parent
commit
5832292d9d
2 changed files with 13 additions and 1 deletions
  1. +7
    -1
      neutron/plugins/ml2/rpc.py
  2. +6
    -0
      neutron/tests/unit/plugins/ml2/test_rpc.py

+ 7
- 1
neutron/plugins/ml2/rpc.py View File

@@ -20,6 +20,7 @@ from neutron_lib import constants as n_const
from neutron_lib.plugins import directory
from neutron_lib.plugins.ml2 import api
from neutron_lib.services.qos import constants as qos_consts
from oslo_config import cfg
from oslo_log import log
import oslo_messaging
from sqlalchemy.orm import exc
@@ -262,7 +263,12 @@ class RpcCallbacks(type_tunnel.TunnelRpcCallbackMixin):
else:
if port.device_owner.startswith(
n_const.DEVICE_OWNER_COMPUTE_PREFIX):
plugin.nova_notifier.notify_port_active_direct(port)
# NOTE(haleyb): It is possible for a test to override a
# config option after the plugin has been initialized so
# the nova_notifier attribute is not set on the plugin.
if (cfg.CONF.notify_nova_on_port_status_changes and
hasattr(plugin, 'nova_notifier')):
plugin.nova_notifier.notify_port_active_direct(port)
return
else:
self.update_port_status_to_active(port, rpc_context, port_id, host)


+ 6
- 0
neutron/tests/unit/plugins/ml2/test_rpc.py View File

@@ -230,6 +230,12 @@ class RpcCallbacksTestCase(base.BaseTestCase):
(self.plugin.nova_notifier.notify_port_active_direct.
assert_called_once_with(port))

def test_update_device_up_with_device_not_bound_to_host_no_notify(self):
cfg.CONF.set_override('notify_nova_on_port_status_changes', False)
self.assertIsNone(self._test_update_device_not_bound_to_host(
self.callbacks.update_device_up))
self.plugin.nova_notifier.notify_port_active_direct.assert_not_called()

def test_update_device_down_with_device_not_bound_to_host(self):
self.assertEqual(
{'device': 'fake_device', 'exists': True},


Loading…
Cancel
Save