commit 2927ead260d90c44daeff4a1d4917043e5ed7c9d
Author: Stephen Finucane <email address hidden>
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.
Reviewed: https:/ /review. openstack. org/425087 /git.openstack. org/cgit/ openstack/ nova/commit/ ?id=2927ead260d 90c44daeff4a1d4 917043e5ed7c9d
Committed: https:/
Submitter: Jenkins
Branch: stable/newton
commit 2927ead260d90c4 4daeff4a1d49170 43e5ed7c9d
Author: Stephen Finucane <email address hidden>
Date: Thu Jan 12 13:59:32 2017 +0000
scheduler: Don't modify RequestSpec. numa_topology
The 'NUMATopologyFi lter' makes a call to 'numa_fit_ instance_ to_host' in ology instance_ to_host' call has the side effect of ology object, most
order to determine whether an instance with a sample topology could fit
on a given host. This function is provided with an InstanceNUMATop
object, which was extracted from the RequestSpec provided to the filter.
However, the 'numa_fit_
modifying a couple of fields on this InstanceNUMATop
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-callbyrefere nce-neither/
Conflicts:
The 'zip' function must be wrapped in a 'list' to resolve a latent
Python 3 issue.
Change-Id: If26cbdd5189c53 891554c8d128be9 b90578616aa 21e03c61a7ece02 f40dc25c5d)
Closes-Bug: #1655979
(cherry picked from commit bff2030ecea8a1d