From 6cf3ebb42354f5562afb0df1a6d4e32a720f893b Mon Sep 17 00:00:00 2001 From: Hong Hui Xiao Date: Thu, 17 Nov 2016 14:24:05 +0800 Subject: [PATCH] Have qos object increment port/network revision When associate/disassociate qos of port/network, port/network's revision number will not bump. This patch fixes that. Conflicts: neutron/tests/unit/services/revisions/test_revision_plugin.py Change-Id: I1e60851fb1e99a3f803e0bf3854653ff107f768f Closes-Bug: #1642476 (cherry picked from commit 0e51574b2fb299eb42d6f5333e68f70244b08d50) --- neutron/db/qos/models.py | 2 ++ .../revisions/test_revision_plugin.py | 36 ++++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/neutron/db/qos/models.py b/neutron/db/qos/models.py index 57a453f1a2e..7ddd19c6a0d 100644 --- a/neutron/db/qos/models.py +++ b/neutron/db/qos/models.py @@ -46,6 +46,7 @@ class QosNetworkPolicyBinding(model_base.BASEV2): nullable=False, unique=True, primary_key=True) + revises_on_change = ('network', ) network = sa.orm.relationship( models_v2.Network, backref=sa.orm.backref("qos_policy_binding", uselist=False, @@ -65,6 +66,7 @@ class QosPortPolicyBinding(model_base.BASEV2): nullable=False, unique=True, primary_key=True) + revises_on_change = ('port', ) port = sa.orm.relationship( models_v2.Port, backref=sa.orm.backref("qos_policy_binding", uselist=False, diff --git a/neutron/tests/unit/services/revisions/test_revision_plugin.py b/neutron/tests/unit/services/revisions/test_revision_plugin.py index 5cc0556d035..4111893fb1c 100644 --- a/neutron/tests/unit/services/revisions/test_revision_plugin.py +++ b/neutron/tests/unit/services/revisions/test_revision_plugin.py @@ -13,22 +13,32 @@ # under the License. # +import mock import netaddr from neutron import context as nctx from neutron.db import models_v2 from neutron import manager +from neutron.plugins.ml2 import config from neutron.tests.unit.plugins.ml2 import test_plugin class TestRevisionPlugin(test_plugin.Ml2PluginV2TestCase): + _extension_drivers = ['qos'] + def get_additional_service_plugins(self): p = super(TestRevisionPlugin, self).get_additional_service_plugins() - p.update({'revision_plugin_name': 'revisions'}) + p.update({'revision_plugin_name': 'revisions', + 'qos_plugin_name': 'qos'}) return p def setUp(self): + config.cfg.CONF.set_override('extension_drivers', + self._extension_drivers, + group='ml2') + mock.patch('neutron.services.qos.notification_drivers.message_queue' + '.RpcQosServiceNotificationDriver').start() super(TestRevisionPlugin, self).setUp() self.cp = manager.NeutronManager.get_plugin() self.l3p = (manager.NeutronManager. @@ -124,3 +134,27 @@ class TestRevisionPlugin(test_plugin.Ml2PluginV2TestCase): updated = self.l3p.get_router(self.ctx, router['id']) self.assertGreater(updated['revision_number'], router['revision_number']) + + def test_qos_policy_bump_port_revision(self): + with self.port() as port: + rev = port['port']['revision_number'] + qos_plugin = manager.NeutronManager.get_service_plugins()['QOS'] + qos_policy = {'policy': {'name': "policy1", + 'tenant_id': "tenant1"}} + qos_obj = qos_plugin.create_policy(self.ctx, qos_policy) + data = {'port': {'qos_policy_id': qos_obj['id']}} + response = self._update('ports', port['port']['id'], data) + new_rev = response['port']['revision_number'] + self.assertGreater(new_rev, rev) + + def test_qos_policy_bump_network_revision(self): + with self.network() as network: + rev = network['network']['revision_number'] + qos_plugin = manager.NeutronManager.get_service_plugins()['QOS'] + qos_policy = {'policy': {'name': "policy1", + 'tenant_id': "tenant1"}} + qos_obj = qos_plugin.create_policy(self.ctx, qos_policy) + data = {'network': {'qos_policy_id': qos_obj['id']}} + response = self._update('networks', network['network']['id'], data) + new_rev = response['network']['revision_number'] + self.assertGreater(new_rev, rev)