Reviewed: https://review.openstack.org/369134 Committed: https://git.openstack.org/cgit/openstack/neutron/commit/?id=d223bef22449db3752d57a9eb6b4915074004e32 Submitter: Jenkins Branch: master
commit d223bef22449db3752d57a9eb6b4915074004e32 Author: Kevin Benton <ke...@benton.pub> Date: Mon Sep 12 18:59:30 2016 -0700 Don't work with native DB port objects in DVR code Passing around native DB records into core plugin operations as part of the call arguments can result in detached session errors. It's also just bad practice since the core plugin API is expected to take regular dictionaries containing strings. Closes-Bug: #1622824 Change-Id: I0d33c6ac9a9ceeebbd5c1179eb41aec6c991a2bf ** Changed in: neutron Status: In Progress => Fix Released -- You received this bug notification because you are a member of Yahoo! Engineering Team, which is subscribed to neutron. https://bugs.launchpad.net/bugs/1622824 Title: l3 dvr code passing ip allocation objects to update_port Status in neutron: Fix Released Bug description: The l3 dvr code is passing IP allocation objects to update_port, which is not supported by the retry decorator protecting update_port. This results in the following exception: 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource [req-347d1015-bdce-4e58-8179-68ff758b62f4 tempest-TestGettingAddress-1311327307 -] add_router_interface failed: No details. 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource Traceback (most recent call last): 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/opt/stack/new/neutron/neutron/api/v2/resource.py", line 79, in resource 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource result = method(request=request, **args) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/opt/stack/new/neutron/neutron/db/api.py", line 87, in wrapped 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource setattr(e, '_RETRY_EXCEEDED', True) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 220, in __exit__ 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource self.force_reraise() 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 196, in force_reraise 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource six.reraise(self.type_, self.value, self.tb) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/opt/stack/new/neutron/neutron/db/api.py", line 83, in wrapped 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource return f(*args, **kwargs) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_db/api.py", line 151, in wrapper 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource ectxt.value = e.inner_exc 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 220, in __exit__ 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource self.force_reraise() 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 196, in force_reraise 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource six.reraise(self.type_, self.value, self.tb) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_db/api.py", line 139, in wrapper 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource return f(*args, **kwargs) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/opt/stack/new/neutron/neutron/db/api.py", line 123, in wrapped 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource traceback.format_exc()) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 220, in __exit__ 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource self.force_reraise() 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 196, in force_reraise 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource six.reraise(self.type_, self.value, self.tb) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/opt/stack/new/neutron/neutron/db/api.py", line 118, in wrapped 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource return f(*dup_args, **dup_kwargs) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/opt/stack/new/neutron/neutron/api/v2/base.py", line 221, in _handle_action 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource ret_value = getattr(self._plugin, name)(*arg_list, **kwargs) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/opt/stack/new/neutron/neutron/db/api.py", line 155, in wrapped 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource return method(*args, **kwargs) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/opt/stack/new/neutron/neutron/db/api.py", line 87, in wrapped 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource setattr(e, '_RETRY_EXCEEDED', True) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 220, in __exit__ 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource self.force_reraise() 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 196, in force_reraise 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource six.reraise(self.type_, self.value, self.tb) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/opt/stack/new/neutron/neutron/db/api.py", line 83, in wrapped 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource return f(*args, **kwargs) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_db/api.py", line 151, in wrapper 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource ectxt.value = e.inner_exc 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 220, in __exit__ 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource self.force_reraise() 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 196, in force_reraise 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource six.reraise(self.type_, self.value, self.tb) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_db/api.py", line 139, in wrapper 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource return f(*args, **kwargs) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/opt/stack/new/neutron/neutron/db/api.py", line 123, in wrapped 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource traceback.format_exc()) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 220, in __exit__ 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource self.force_reraise() 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 196, in force_reraise 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource six.reraise(self.type_, self.value, self.tb) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/opt/stack/new/neutron/neutron/db/api.py", line 118, in wrapped 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource return f(*dup_args, **dup_kwargs) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/opt/stack/new/neutron/neutron/db/l3_dvr_db.py", line 415, in add_router_interface 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource port['id']) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 220, in __exit__ 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource self.force_reraise() 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 196, in force_reraise 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource six.reraise(self.type_, self.value, self.tb) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/opt/stack/new/neutron/neutron/db/l3_dvr_db.py", line 385, in add_router_interface 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource {'port': {'fixed_ips': fixed_ips}}) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/opt/stack/new/neutron/neutron/common/utils.py", line 618, in inner 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource return f(self, context, *args, **kwargs) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/opt/stack/new/neutron/neutron/db/api.py", line 155, in wrapped 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource return method(*args, **kwargs) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/opt/stack/new/neutron/neutron/db/api.py", line 87, in wrapped 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource setattr(e, '_RETRY_EXCEEDED', True) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 220, in __exit__ 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource self.force_reraise() 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 196, in force_reraise 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource six.reraise(self.type_, self.value, self.tb) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/opt/stack/new/neutron/neutron/db/api.py", line 83, in wrapped 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource return f(*args, **kwargs) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_db/api.py", line 151, in wrapper 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource ectxt.value = e.inner_exc 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 220, in __exit__ 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource self.force_reraise() 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 196, in force_reraise 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource six.reraise(self.type_, self.value, self.tb) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_db/api.py", line 139, in wrapper 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource return f(*args, **kwargs) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/opt/stack/new/neutron/neutron/db/api.py", line 123, in wrapped 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource traceback.format_exc()) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 220, in __exit__ 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource self.force_reraise() 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 196, in force_reraise 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource six.reraise(self.type_, self.value, self.tb) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/opt/stack/new/neutron/neutron/db/api.py", line 118, in wrapped 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource return f(*dup_args, **dup_kwargs) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/opt/stack/new/neutron/neutron/plugins/ml2/plugin.py", line 1383, in update_port 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource port) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/opt/stack/new/neutron/neutron/db/api.py", line 155, in wrapped 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource return method(*args, **kwargs) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/opt/stack/new/neutron/neutron/db/db_base_plugin_v2.py", line 1221, in update_port 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource new_port=new_port) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/opt/stack/new/neutron/neutron/db/ipam_backend_mixin.py", line 724, in update_port 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource new_port.get('mac_address')) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/opt/stack/new/neutron/neutron/db/ipam_pluggable_backend.py", line 329, in update_port_with_ips 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource new_mac) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/opt/stack/new/neutron/neutron/db/ipam_pluggable_backend.py", line 282, in _update_ips_for_port 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource context, original_ips, new_ips, port['device_owner']) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/opt/stack/new/neutron/neutron/db/ipam_backend_mixin.py", line 424, in _get_changed_ips_for_port 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource if ip.get('subnet_id') not in delete_subnet_ids] 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/oslo_db/sqlalchemy/models.py", line 68, in get 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource return getattr(self, key, default) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/attributes.py", line 237, in __get__ 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource return self.impl.get(instance_state(instance), dict_) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/attributes.py", line 578, in get 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource value = state._load_expired(state, passive) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/state.py", line 474, in _load_expired 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource self.manager.deferred_scalar_loader(self, toload) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/loading.py", line 610, in load_scalar_attributes 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource (state_str(state))) 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource DetachedInstanceError: Instance <IPAllocation at 0x7f8f2191ccd0> is not bound to a Session; attribute refresh operation cannot proceed 2016-09-13 00:26:29.206 13801 ERROR neutron.api.v2.resource http://logs.openstack.org/33/367333/5/gate/gate-tempest-dsvm-neutron- dvr-ubuntu- xenial/b8f08fe/logs/screen-q-svc.txt.gz?level=TRACE#_2016-09-13_00_26_29_206 To manage notifications about this bug go to: https://bugs.launchpad.net/neutron/+bug/1622824/+subscriptions -- Mailing list: https://launchpad.net/~yahoo-eng-team Post to : yahoo-eng-team@lists.launchpad.net Unsubscribe : https://launchpad.net/~yahoo-eng-team More help : https://help.launchpad.net/ListHelp