← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1655979] Re: NUMATopologyFilter modifies the provided RequestSpec

 

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 <sfinucan@xxxxxxxxxx>
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


References