← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1431746] [NEW] AggregateCoreFilter return incorrect value

 

Public bug reported:

I find AggregateCoreFilter will return incorrect value, the analysis is
bellow:

class AggregateCoreFilter(BaseCoreFilter):
    def _get_cpu_allocation_ratio(self, host_state, filter_properties):
        # TODO(uni): DB query in filter is a performance hit, especially for
        # system with lots of hosts. Will need a general solution here to fix
        # all filters with aggregate DB call things.
        aggregate_vals = utils.aggregate_values_from_key(
            host_state,
            'cpu_allocation_ratio')
        try:
            ratio = utils.validate_num_values(
                aggregate_vals, CONF.cpu_allocation_ratio, cast_to=float)
        except ValueError as e:
            LOG.warning(_LW("Could not decode cpu_allocation_ratio: '%s'"), e)
            ratio = CONF.cpu_allocation_ratio

in function validate_num_values, it use min() to get the minimum ratio, but for aggregate, its 'cpu_allocation_ratio' is a string,
for example: vals=set('10', '9'), the 'validate_num_values' will return 10, but correct is 9

def validate_num_values(vals, default=None, cast_to=int, based_on=min):
    num_values = len(vals)
    if num_values == 0:
        return default

    if num_values > 1:
        LOG.info(_LI("%(num_values)d values found, "
                     "of which the minimum value will be used."),
                 {'num_values': num_values})

    return cast_to(based_on(vals))

** Affects: nova
     Importance: Undecided
     Assignee: shihanzhang (shihanzhang)
         Status: New

** Changed in: nova
     Assignee: (unassigned) => shihanzhang (shihanzhang)

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

Title:
  AggregateCoreFilter return incorrect value

Status in OpenStack Compute (Nova):
  New

Bug description:
  I find AggregateCoreFilter will return incorrect value, the analysis
  is bellow:

  class AggregateCoreFilter(BaseCoreFilter):
      def _get_cpu_allocation_ratio(self, host_state, filter_properties):
          # TODO(uni): DB query in filter is a performance hit, especially for
          # system with lots of hosts. Will need a general solution here to fix
          # all filters with aggregate DB call things.
          aggregate_vals = utils.aggregate_values_from_key(
              host_state,
              'cpu_allocation_ratio')
          try:
              ratio = utils.validate_num_values(
                  aggregate_vals, CONF.cpu_allocation_ratio, cast_to=float)
          except ValueError as e:
              LOG.warning(_LW("Could not decode cpu_allocation_ratio: '%s'"), e)
              ratio = CONF.cpu_allocation_ratio

  in function validate_num_values, it use min() to get the minimum ratio, but for aggregate, its 'cpu_allocation_ratio' is a string,
  for example: vals=set('10', '9'), the 'validate_num_values' will return 10, but correct is 9

  def validate_num_values(vals, default=None, cast_to=int, based_on=min):
      num_values = len(vals)
      if num_values == 0:
          return default

      if num_values > 1:
          LOG.info(_LI("%(num_values)d values found, "
                       "of which the minimum value will be used."),
                   {'num_values': num_values})

      return cast_to(based_on(vals))

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


Follow ups

References