commit bff2030ecea8a1d21e03c61a7ece02f40dc25c5d
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/419479 /git.openstack. org/cgit/ openstack/ nova/commit/ ?id=bff2030ecea 8a1d21e03c61a7e ce02f40dc25c5d
Committed: https:/
Submitter: Jenkins
Branch: master
commit bff2030ecea8a1d 21e03c61a7ece02 f40dc25c5d
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/
Change-Id: If26cbdd5189c53 891554c8d128be9 b90578616aa
Closes-Bug: #1655979