Rebind allowed address pairs only if they changed
This patch ensures allowed address pairs bindings are refreshed only when they actually change. This will also avoid sending a notification to the agent if no change actually occured. Closes-Bug: #1255145 Partial blueprint neutron-tempest-parallel Change-Id: Iac2502586a0d215a29194590c16c2e1a064f943b
This commit is contained in:
parent
1811ea2759
commit
02b7d39896
@ -20,6 +20,7 @@ import sqlalchemy as sa
|
||||
from sqlalchemy import orm
|
||||
|
||||
from neutron.api.v2 import attributes as attr
|
||||
from neutron.common import utils
|
||||
from neutron.db import db_base_plugin_v2
|
||||
from neutron.db import model_base
|
||||
from neutron.db import models_v2
|
||||
@ -124,3 +125,17 @@ class AllowedAddressPairsMixin(object):
|
||||
"""
|
||||
return (addr_pair.ADDRESS_PAIRS in port['port'] and
|
||||
not self._has_address_pairs(port))
|
||||
|
||||
def is_address_pairs_attribute_updated(self, port, update_attrs):
|
||||
"""Check if the address pairs attribute is being updated.
|
||||
|
||||
This method returns a flag which indicates whether there is an update
|
||||
and therefore a port update notification should be sent to agents or
|
||||
third party controllers.
|
||||
"""
|
||||
new_pairs = update_attrs.get(addr_pair.ADDRESS_PAIRS)
|
||||
if new_pairs and not utils.compare_elements(
|
||||
port.get(addr_pair.ADDRESS_PAIRS), new_pairs):
|
||||
return True
|
||||
# Missing or unchanged address pairs in attributes mean no update
|
||||
return False
|
||||
|
@ -597,7 +597,7 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2,
|
||||
original_port = super(Ml2Plugin, self).get_port(context, id)
|
||||
updated_port = super(Ml2Plugin, self).update_port(context, id,
|
||||
port)
|
||||
if addr_pair.ADDRESS_PAIRS in port['port']:
|
||||
if self.is_address_pairs_attribute_updated(original_port, port):
|
||||
self._delete_allowed_address_pairs(context, id)
|
||||
self._process_create_allowed_address_pairs(
|
||||
context, updated_port,
|
||||
|
@ -579,7 +579,7 @@ class NECPluginV2(db_base_plugin_v2.NeutronDbPluginV2,
|
||||
new_port = super(NECPluginV2, self).update_port(context, id, port)
|
||||
portinfo_changed = self._process_portbindings_update(
|
||||
context, port['port'], new_port)
|
||||
if addr_pair.ADDRESS_PAIRS in port['port']:
|
||||
if self.is_address_pairs_attribute_updated(old_port, port):
|
||||
self._delete_allowed_address_pairs(context, id)
|
||||
self._process_create_allowed_address_pairs(
|
||||
context, new_port,
|
||||
|
@ -588,7 +588,7 @@ class OVSNeutronPluginV2(db_base_plugin_v2.NeutronDbPluginV2,
|
||||
context, id)
|
||||
updated_port = super(OVSNeutronPluginV2, self).update_port(
|
||||
context, id, port)
|
||||
if addr_pair.ADDRESS_PAIRS in port['port']:
|
||||
if self.is_address_pairs_attribute_updated(original_port, port):
|
||||
self._delete_allowed_address_pairs(context, id)
|
||||
self._process_create_allowed_address_pairs(
|
||||
context, updated_port,
|
||||
|
Loading…
Reference in New Issue
Block a user