Reviewed: https://review.openstack.org/419479 Committed: https://git.openstack.org/cgit/openstack/nova/commit/?id=bff2030ecea8a1d21e03c61a7ece02f40dc25c5d Submitter: Jenkins Branch: master
commit bff2030ecea8a1d21e03c61a7ece02f40dc25c5d Author: Stephen Finucane <[email protected]> Date: Thu Jan 12 13:59:32 2017 +0000 scheduler: Don't modify RequestSpec.numa_topology The 'NUMATopologyFilter' makes a call to 'numa_fit_instance_to_host' in order to determine whether an instance with a sample topology could fit on a given host. This function is provided with an InstanceNUMATopology object, which was extracted from the RequestSpec provided to the filter. However, the 'numa_fit_instance_to_host' call has the side effect of modifying a couple of fields on this InstanceNUMATopology object, most notably the pinning information, and these changes are then propagated to subsequent calls of the filter. The reason for this propagation is presumably Python's "call-by-object" model [1]. While this doesn't cause any issues currently, it is a latent bug that has caused issues downstream. Resolve the issue by copying the entire RequestSpec object, thus ensuring any changes to this or the contained NUMA topology are not stored and cannot affect future calls to this or other filters. [1] https://jeffknupp.com/blog/2012/11/13/is-python-callbyvalue-or-callbyreference-neither/ Change-Id: If26cbdd5189c53891554c8d128be9b90578616aa Closes-Bug: #1655979 ** Changed in: nova Status: In Progress => Fix Released -- You received this bug notification because you are a member of Yahoo! Engineering Team, which is subscribed to OpenStack Compute (nova). https://bugs.launchpad.net/bugs/1655979 Title: NUMATopologyFilter modifies the provided RequestSpec Status in OpenStack Compute (nova): Fix Released Bug description: The 'NUMATopologyFilter' makes a call to 'numa_fit_instance_to_host' in order to determine whether an instance with a sample topology could fit on a given host. This function is provided with an InstanceNUMATopology object, which was extracted from the RequestSpec provided to the filter. However, the 'numa_fit_instance_to_host' call has the side effect of modifying a couple of fields on this InstanceNUMATopology object, notably the pinning information, which appears to be propagated to subsequent calls of the filter. The reason for this propagation is presumably Python's "call-by-object" model [1]. We should ensure the original RequestSpec is not modified, thus preventing possible issues in the future. [1] https://jeffknupp.com/blog/2012/11/13/is-python-callbyvalue-or- callbyreference-neither/ To manage notifications about this bug go to: https://bugs.launchpad.net/nova/+bug/1655979/+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

