← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1606496] [NEW] Instance affinity filters do not work in a heterogeneous cloud with Ironic computes

 

Public bug reported:

Description
===========

In a heterogeneous cloud with both libvirt and ironic compute nodes
instance affinity filters like DifferentHostFilter or SameHostFilter do
not filter hosts out when scheduling a subsequent instance.

Steps to reproduce
==================

Make sure you have at least two libvirt compute nodes and one ironic
node.

Make sure DifferentHostFilter and SameHostFilter are configured as nova-
scheduler filters in nova.conf, filters scheduler is used.

1. Boot a libvirt instance A.
2. Check the host name of the compute node instance A is running on (nova show from an admin user).
3. Boot a libvirt instance B passing a different_host=$A.uuid hint for nova-scheduler.
4. Check the host name of the compute node instance B is running on (nova show from an admin user).

Expected result
===============

Instances A and B are running on two different compute nodes.

Actual result
=============

Instances A and B are running on the same compute node.

nova-scheduler logs shows that DifferentHost filter was run, but did not
filter out one of the hosts:  Filter DifferentHostFilter returned 2
host(s) get_filtered_objects

Environment
===========

OpenStack Mitaka

2 libvirt compute nodes
1 ironic compute node
FiltersScheduler is used
DifferentHostFilter and SameHostFilter filters are enabled in nova.conf

Root cause analysis
===================

Debugging shown that IronicHostManager is configured to be used by nova-
scheduler instead of the default host manager, when Ironic compute are
deployed in the same cloud together with libvirt compute nodes.

IronicHostManager overrides the _get_instance_info() method and
unconditionally returns an empty instance dict, even if this method is
called for non-ironic computes of the same cloud. DifferentHostFilter
and similar filters later use this info to find an intersection of a set
of instances running on a libvirt compute node (currently, always {})
and a set of instances uuids passed as a hint for nova-scheduler, thus
compute nodes are never filtered out and the hint is effectively
ignored.

** Affects: nova
     Importance: Undecided
     Assignee: Roman Podoliaka (rpodolyaka)
         Status: New


** Tags: ironic scheduler

** Changed in: nova
     Assignee: (unassigned) => Roman Podoliaka (rpodolyaka)

** Description changed:

  Description
  ===========
  
  In a heterogeneous cloud with both libvirt and ironic compute nodes
  instance affinity filters like DifferentHostFilter or SameHostFilter do
  not filter hosts out when scheduling a subsequent instance.
- 
  
  Steps to reproduce
  ==================
  
  Make sure you have at least two libvirt compute nodes and one ironic
  node.
  
  Make sure DifferentHostFilter and SameHostFilter are configured as nova-
  scheduler filters in nova.conf, filters scheduler is used.
  
  1. Boot a libvirt instance A.
  2. Check the host name of the compute node instance A is running on (nova show from an admin user).
  3. Boot a libvirt instance B passing a different_host=$A.uuid hint for nova-scheduler.
  4. Check the host name of the compute node instance B is running on (nova show from an admin user).
  
- 
  Expected result
  ===============
  
  Instances A and B are running on two different compute nodes.
- 
  
  Actual result
  =============
  
  Instances A and B are running on the same compute node.
  
  nova-scheduler logs shows that DifferentHost filter was run, but did not
  filter out one of the hosts:  Filter DifferentHostFilter returned 2
  host(s) get_filtered_objects
- 
  
  Environment
  ===========
  
  OpenStack Mitaka
  
  2 libvirt compute nodes
  1 ironic compute node
  FiltersScheduler is used
  DifferentHostFilter and SameHostFilter filters are enabled in nova.conf
  
- 
  Root cause analysis
  ===================
  
  Debugging shown that IronicHostManager is configured to be used by nova-
  scheduler instead of the default host manager, when Ironic compute are
  deployed in the same cloud together with libvirt compute nodes.
  
  IronicHostManager overrides the _get_instance_info() method and
  unconditionally returns an empty instance dict, even if this method is
  called for non-ironic computes of the same cloud. DifferentHostFilter
- and similar filters later use this info to find ab intersection of a set
+ and similar filters later use this info to find an intersection of a set
  of instances running on a libvirt compute node (currently, always {})
  and a set of instances uuids passed as a hint for nova-scheduler, thus
  compute nodes are never filtered out and the hint is effectively
  ignored.

** Tags added: ironic

** Tags added: scheduler

-- 
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/1606496

Title:
  Instance affinity filters do not work in a heterogeneous cloud with
  Ironic computes

Status in OpenStack Compute (nova):
  New

Bug description:
  Description
  ===========

  In a heterogeneous cloud with both libvirt and ironic compute nodes
  instance affinity filters like DifferentHostFilter or SameHostFilter
  do not filter hosts out when scheduling a subsequent instance.

  Steps to reproduce
  ==================

  Make sure you have at least two libvirt compute nodes and one ironic
  node.

  Make sure DifferentHostFilter and SameHostFilter are configured as
  nova-scheduler filters in nova.conf, filters scheduler is used.

  1. Boot a libvirt instance A.
  2. Check the host name of the compute node instance A is running on (nova show from an admin user).
  3. Boot a libvirt instance B passing a different_host=$A.uuid hint for nova-scheduler.
  4. Check the host name of the compute node instance B is running on (nova show from an admin user).

  Expected result
  ===============

  Instances A and B are running on two different compute nodes.

  Actual result
  =============

  Instances A and B are running on the same compute node.

  nova-scheduler logs shows that DifferentHost filter was run, but did
  not filter out one of the hosts:  Filter DifferentHostFilter returned
  2 host(s) get_filtered_objects

  Environment
  ===========

  OpenStack Mitaka

  2 libvirt compute nodes
  1 ironic compute node
  FiltersScheduler is used
  DifferentHostFilter and SameHostFilter filters are enabled in nova.conf

  Root cause analysis
  ===================

  Debugging shown that IronicHostManager is configured to be used by
  nova-scheduler instead of the default host manager, when Ironic
  compute are deployed in the same cloud together with libvirt compute
  nodes.

  IronicHostManager overrides the _get_instance_info() method and
  unconditionally returns an empty instance dict, even if this method is
  called for non-ironic computes of the same cloud. DifferentHostFilter
  and similar filters later use this info to find an intersection of a
  set of instances running on a libvirt compute node (currently, always
  {}) and a set of instances uuids passed as a hint for nova-scheduler,
  thus compute nodes are never filtered out and the hint is effectively
  ignored.

To manage notifications about this bug go to:
https://bugs.launchpad.net/nova/+bug/1606496/+subscriptions


Follow ups