Reviewed: https://review.openstack.org/330209 Committed: https://git.openstack.org/cgit/openstack/neutron/commit/?id=2fbb6587df357583fe03b8616d7b95f79382af20 Submitter: Jenkins Branch: master
commit 2fbb6587df357583fe03b8616d7b95f79382af20 Author: Kevin Benton <[email protected]> Date: Sat Jun 11 08:23:48 2016 -0700 Allow self-unsubscribing callbacks This adjusts the notify loop logic to handle the case where a callback causes a subscription or unsubscription that changes the subscriber dictionary to change during iteration. It was just using .items() which solved the problem for py27 but was not creating an actual copy in py34. This just calls list() on .items() to make sure we get a list in both cases. Change-Id: Iee9d675faf30ec714b4f5c77128d8843d545ecfd Closes-Bug: #1592983 ** 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/1592983 Title: callback can't unsubscribe itself in python3 Status in neutron: Fix Released Bug description: The callback manager uses .items() which is not a copy of the subscribers dict in python3. This means that a callback that wants to unsubscribe itself will die in python3 with an error: b' self.manager.notify(resources.PORT, events.BEFORE_CREATE, mock.ANY)' b' File "/home/administrator/code/neutron/neutron/callbacks/manager.py", line 118, in notify' b' errors = self._notify_loop(resource, event, trigger, **kwargs)' b' File "/home/administrator/code/neutron/neutron/callbacks/manager.py", line 143, in _notify_loop' b' for callback_id, callback in callbacks:' b'RuntimeError: dictionary changed size during iteration' b'' To manage notifications about this bug go to: https://bugs.launchpad.net/neutron/+bug/1592983/+subscriptions -- Mailing list: https://launchpad.net/~yahoo-eng-team Post to : [email protected] Unsubscribe : https://launchpad.net/~yahoo-eng-team More help : https://help.launchpad.net/ListHelp

