diff --git a/nova/compute/manager.py b/nova/compute/manager.py index 71171d0e6fee..f8e8ca4d145a 100644 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -162,8 +162,8 @@ interval_opts = [ cfg.IntOpt('shelved_offload_time', default=0, help='Time in seconds before a shelved instance is eligible ' - 'for removing from a host. -1 never offload, 0 offload ' - 'when shelved'), + 'for removing from a host. -1 never offload, 0 offload ' + 'immediately when shelved'), cfg.IntOpt('instance_delete_interval', default=300, help='Interval in seconds for retrying failed instance file ' @@ -5456,6 +5456,9 @@ class ComputeManager(manager.Manager): @periodic_task.periodic_task(spacing=CONF.shelved_poll_interval) def _poll_shelved_instances(self, context): + if CONF.shelved_offload_time <= 0: + return + filters = {'vm_state': vm_states.SHELVED, 'host': self.host} shelved_instances = objects.InstanceList.get_by_filters( diff --git a/nova/tests/unit/compute/test_shelve.py b/nova/tests/unit/compute/test_shelve.py index 7950c2ccaa68..c29109440549 100644 --- a/nova/tests/unit/compute/test_shelve.py +++ b/nova/tests/unit/compute/test_shelve.py @@ -19,6 +19,7 @@ from nova.compute import claims from nova.compute import task_states from nova.compute import vm_states from nova import db +from nova import objects from nova.tests.unit.compute import test_compute from nova.tests.unit.image import fake as fake_image @@ -328,6 +329,13 @@ class ShelveComputeManagerTestCase(test_compute.BaseTestCase): self.compute.unshelve_instance(self.context, instance, image=None, filter_properties=filter_properties, node=node) + @mock.patch.object(objects.InstanceList, 'get_by_filters') + def test_shelved_poll_none_offloaded(self, mock_get_by_filters): + # Test instances are not offloaded when shelved_offload_time is -1 + CONF.set_override('shelved_offload_time', -1) + self.compute._poll_shelved_instances(self.context) + self.assertEqual(0, mock_get_by_filters.call_count) + def test_shelved_poll_none_exist(self): self.mox.StubOutWithMock(self.compute.driver, 'destroy') self.mox.StubOutWithMock(timeutils, 'is_older_than')