]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
Handle 'infinite' and 'unknown' capacity in CapacityWeigher
authorZhiteng Huang <zhiteng.huang@intel.com>
Sun, 17 Feb 2013 08:32:04 +0000 (16:32 +0800)
committerZhiteng Huang <zhiteng.huang@intel.com>
Sun, 17 Feb 2013 08:32:04 +0000 (16:32 +0800)
This patch updates CapacityWeigher to transform 'infinite' and
'unknown' capacity reported by back-ends to float('inf').  They
are considered the same for sorting purpose.

Change-Id: Ic8f811227c9937c4e09eb8b77457ed7e9231be4e

cinder/scheduler/weights/capacity.py

index 2bb5a0b25ab8c11c3abb4079cbd125810b612534..8d37997d44fa6e96523a3c7405eca3f7ac61560a 100644 (file)
@@ -46,5 +46,11 @@ class CapacityWeigher(weights.BaseHostWeigher):
     def _weigh_object(self, host_state, weight_properties):
         """Higher weights win.  We want spreading to be the default."""
         reserved = float(host_state.reserved_percentage) / 100
-        free = math.floor(host_state.free_capacity_gb * (1 - reserved))
+        free_space = host_state.free_capacity_gb
+        if free_space == 'infinite' or free_space == 'unknown':
+            #(zhiteng) 'infinite' and 'unknown' are treated the same
+            # here, for sorting purpose.
+            free = float('inf')
+        else:
+            free = math.floor(host_state.free_capacity_gb * (1 - reserved))
         return free