From 598ca24470de4edfb9f5c014ae948f2484013fc9 Mon Sep 17 00:00:00 2001 From: Salvatore Orlando Date: Tue, 26 Nov 2013 09:53:49 -0800 Subject: [PATCH] Rebind security groups only when they're updated Update the security port bindings for a port only when they actually differ from the stored value. This will also avoid sending port_update notifications to the agent even if nothing actually changes in the port configuration. Closes-Bug: #1255183 Partial blueprint: neutron-tempest-parallel Change-Id: I00c29dc97c46478433fdf08069a884bb78e5cd0a --- neutron/db/securitygroups_rpc_base.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/neutron/db/securitygroups_rpc_base.py b/neutron/db/securitygroups_rpc_base.py index cf17430e94..1bdeb14f6e 100644 --- a/neutron/db/securitygroups_rpc_base.py +++ b/neutron/db/securitygroups_rpc_base.py @@ -70,15 +70,19 @@ class SecurityGroupServerRpcMixin(sg_db.SecurityGroupDbMixin): It is because another changes for the port may require notification. """ need_notify = False - if ext_sg.SECURITYGROUPS in port['port']: + port_updates = port['port'] + if (ext_sg.SECURITYGROUPS in port_updates and + not utils.compare_elements( + original_port.get(ext_sg.SECURITYGROUPS), + port_updates[ext_sg.SECURITYGROUPS])): # delete the port binding and read it with the new rules - port['port'][ext_sg.SECURITYGROUPS] = ( + port_updates[ext_sg.SECURITYGROUPS] = ( self._get_security_groups_on_port(context, port)) self._delete_port_security_group_bindings(context, id) self._process_port_create_security_group( context, updated_port, - port['port'][ext_sg.SECURITYGROUPS]) + port_updates[ext_sg.SECURITYGROUPS]) need_notify = True else: updated_port[ext_sg.SECURITYGROUPS] = (