]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
Add some useful log to filter scheduler.
authorJohn Griffith <john.griffith@solidfire.com>
Thu, 28 Feb 2013 18:34:07 +0000 (18:34 +0000)
committerJohn Griffith <john.griffith@solidfire.com>
Fri, 1 Mar 2013 18:56:58 +0000 (18:56 +0000)
When the filter scheduler is unable to find a suitable host to
deploy a volume on it simply logged a warning "not hosts found".
This isn't very helpful, so this patch adds some logging info as
far as why no valid host was available.  This just focuses on the
capacity filtering as that's where I've commonly seen this issue
particularly in tempest runs.

Also noticed that the get status was checking for "if Not capacity",
but this is wrong because free capacity==0 would be interpretted as
failing to get capacity.  Change this to "if is None".

Fixes bug: 1136147

Change-Id: Ia1ce508826ee69ae68a250ea68616909c59974e5

cinder/scheduler/filters/capacity_filter.py
cinder/scheduler/host_manager.py
cinder/scheduler/manager.py
cinder/tests/scheduler/test_host_manager.py

index fe35033df1df8ce4952b15a2d2ef02d56d444fb9..1f5ec624e20d66370edcf95d918153f4aef3091f 100644 (file)
@@ -32,10 +32,10 @@ class CapacityFilter(filters.BaseHostFilter):
         """Return True if host has sufficient capacity."""
         volume_size = filter_properties.get('size')
 
-        if not host_state.free_capacity_gb:
+        if host_state.free_capacity_gb is None:
             # Fail Safe
-            LOG.warning(_("Free capacity not set;"
-                          "volume node info collection broken."))
+            LOG.error(_("Free capacity not set: "
+                        "volume node info collection broken."))
             return False
 
         free_space = host_state.free_capacity_gb
@@ -47,5 +47,11 @@ class CapacityFilter(filters.BaseHostFilter):
             return True
         reserved = float(host_state.reserved_percentage) / 100
         free = math.floor(free_space * (1 - reserved))
+        if free < volume_size:
+            LOG.warning(_("Insufficient free space for volume creation "
+                        "(requested / avail): "
+                        "%(requested)s/%(available)s")
+                        % {'requested': volume_size,
+                           'available': free})
 
         return free >= volume_size
index 2029487a746eb772dea8ff23c4e1f2dfad44733a..9dd2182f0946b965a54aa752f3684efce92c0a95 100644 (file)
@@ -99,7 +99,7 @@ class HostState(object):
         # Mutable available resources.
         # These will change as resources are virtually "consumed".
         self.total_capacity_gb = 0
-        self.free_capacity_gb = 0
+        self.free_capacity_gb = None
         self.reserved_percentage = 0
 
         self.updated = None
index 6966e2d84611341fd616d3aada4a5e168c37b91c..fa0852d7072958c29dc917ca73b74a161a9e8bc5 100644 (file)
@@ -116,7 +116,7 @@ class SchedulerManager(manager.Manager):
 
     def _set_volume_state_and_notify(self, method, updates, context, ex,
                                      request_spec):
-        LOG.warning(_("Failed to schedule_%(method)s: %(ex)s") % locals())
+        LOG.error(_("Failed to schedule_%(method)s: %(ex)s") % locals())
 
         volume_state = updates['volume_state']
         properties = request_spec.get('volume_properties', {})
index f820b11416a6efa1618dc99a1fa850f296c54481..6196444dcb88aeee17e3e2cba2f093e1d9cb5a8e 100644 (file)
@@ -165,7 +165,7 @@ class HostStateTestCase(test.TestCase):
 
     def test_update_from_volume_capability(self):
         fake_host = host_manager.HostState('host1')
-        self.assertEqual(fake_host.free_capacity_gb, 0)
+        self.assertEqual(fake_host.free_capacity_gb, None)
 
         volume_capability = {'total_capacity_gb': 1024,
                              'free_capacity_gb': 512,
@@ -177,7 +177,7 @@ class HostStateTestCase(test.TestCase):
 
     def test_update_from_volume_infinite_capability(self):
         fake_host = host_manager.HostState('host1')
-        self.assertEqual(fake_host.free_capacity_gb, 0)
+        self.assertEqual(fake_host.free_capacity_gb, None)
 
         volume_capability = {'total_capacity_gb': 'infinite',
                              'free_capacity_gb': 'infinite',
@@ -190,7 +190,7 @@ class HostStateTestCase(test.TestCase):
 
     def test_update_from_volume_unknown_capability(self):
         fake_host = host_manager.HostState('host1')
-        self.assertEqual(fake_host.free_capacity_gb, 0)
+        self.assertEqual(fake_host.free_capacity_gb, None)
 
         volume_capability = {'total_capacity_gb': 'infinite',
                              'free_capacity_gb': 'unknown',