diff --git a/senlin/policies/health_policy.py b/senlin/policies/health_policy.py index 4141455f9..bb1fa6bc5 100644 --- a/senlin/policies/health_policy.py +++ b/senlin/policies/health_policy.py @@ -391,7 +391,12 @@ class HealthPolicy(base.Policy): detection_mode = {'detection_modes': converted_detection_modes} kwargs['params'].update(detection_mode) - health_manager.register(cluster.id, engine_id=None, **kwargs) + ret = health_manager.register(cluster.id, engine_id=None, **kwargs) + if not ret: + LOG.warning('Registering health manager for cluster %s ' + 'timed out.', cluster.id) + err_msg = _("Registering health manager for cluster timed out.") + return False, err_msg data = { 'interval': self.interval, @@ -415,6 +420,8 @@ class HealthPolicy(base.Policy): if not ret: LOG.warning('Unregistering health manager for cluster %s ' 'timed out.', cluster.id) + err_msg = _("Unregistering health manager for cluster timed out.") + return False, err_msg return True, '' def pre_op(self, cluster_id, action, **args): diff --git a/senlin/tests/unit/policies/test_health_policy.py b/senlin/tests/unit/policies/test_health_policy.py index 472facaab..7c4008cdb 100644 --- a/senlin/tests/unit/policies/test_health_policy.py +++ b/senlin/tests/unit/policies/test_health_policy.py @@ -281,12 +281,29 @@ class TestHealthPolicy(base.SenlinTestCase): self.assertEqual("Recovery action REBOOT is only applicable to " "os.nova.server clusters.", data) + @mock.patch.object(health_manager, 'register') + def test_attach_failed_with_notify_timeout(self, mock_hm_reg): + mock_hm_reg.return_value = False + res, data = self.hp.attach(self.cluster) + self.assertFalse(res) + self.assertEqual("Registering health manager for cluster timed " + "out.", data) + @mock.patch.object(health_manager, 'unregister') - def test_detach(self, mock_hm_reg): + def test_detach(self, mock_hm_unreg): res, data = self.hp.detach(self.cluster) self.assertTrue(res) self.assertEqual('', data) - mock_hm_reg.assert_called_once_with('CLUSTER_ID') + mock_hm_unreg.assert_called_once_with('CLUSTER_ID') + + @mock.patch.object(health_manager, 'unregister') + def test_detach_failed_with_notify_timeout(self, mock_hm_unreg): + mock_hm_unreg.return_value = False + res, data = self.hp.detach(self.cluster) + self.assertFalse(res) + self.assertEqual("Unregistering health manager for cluster timed " + "out.", data) + mock_hm_unreg.assert_called_once_with('CLUSTER_ID') def test_pre_op_default(self): action = mock.Mock(context='action_context', data={},