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 -- Mailing list: https://launchpad.net/~yahoo-eng-team Post to : yahoo-eng-team@lists.launchpad.net Unsubscribe : https://launchpad.net/~yahoo-eng-team More help : https://help.launchpad.net/ListHelp