From c3ecb29841629d03cc4a3c0242bfd229da598b56 Mon Sep 17 00:00:00 2001 From: Angus Salkeld Date: Wed, 17 Jul 2013 12:46:59 +1000 Subject: [PATCH] Only create the period watch task if there is a watch in the stack This prevents unneccessary greentheads polling the db. bug 1202031 Change-Id: I065955d03df543df40af285f87a7fd3dfa779413 --- heat/engine/service.py | 13 ++++++++----- heat/tests/test_engine_service.py | 7 +++---- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/heat/engine/service.py b/heat/engine/service.py index 0a065d10..b4d9053f 100644 --- a/heat/engine/service.py +++ b/heat/engine/service.py @@ -95,9 +95,12 @@ class EngineService(service.Service): """ pass - def _start_watch_task(self, stack_id): - self._timer_in_thread(stack_id, self._periodic_watcher_task, - sid=stack_id) + def _start_watch_task(self, stack_id, cnxt): + wrs = db_api.watch_rule_get_all_by_stack(cnxt, + stack_id) + if len(wrs) > 0: + self._timer_in_thread(stack_id, self._periodic_watcher_task, + sid=stack_id) def start(self): super(EngineService, self).start() @@ -111,7 +114,7 @@ class EngineService(service.Service): admin_context = context.get_admin_context() stacks = db_api.stack_get_all(admin_context) for s in stacks: - self._start_watch_task(s.id) + self._start_watch_task(s.id, admin_context) @request_context def identify_stack(self, cnxt, stack_name): @@ -218,7 +221,7 @@ class EngineService(service.Service): stack.create() if stack.action == stack.CREATE and stack.status == stack.COMPLETE: # Schedule a periodic watcher task for this stack - self._start_watch_task(stack.id) + self._start_watch_task(stack.id, cnxt) else: logger.warning("Stack create failed, status %s" % stack.status) diff --git a/heat/tests/test_engine_service.py b/heat/tests/test_engine_service.py index 2ddf4b38..edeae316 100644 --- a/heat/tests/test_engine_service.py +++ b/heat/tests/test_engine_service.py @@ -1136,9 +1136,8 @@ class StackServiceTest(HeatTestCase): @stack_context('periodic_watch_task_not_created') def test_periodic_watch_task_not_created(self): self.eng.stg[self.stack.id] = DummyThreadGroup() - self.eng._start_watch_task(self.stack.id) - self.assertEqual([self.eng._periodic_watcher_task], - self.eng.stg[self.stack.id].threads) + self.eng._start_watch_task(self.stack.id, self.ctx) + self.assertEqual([], self.eng.stg[self.stack.id].threads) def test_periodic_watch_task_created(self): stack = get_alarm_stack('period_watch_task_created', @@ -1148,7 +1147,7 @@ class StackServiceTest(HeatTestCase): stack.store() stack.create() self.eng.stg[stack.id] = DummyThreadGroup() - self.eng._start_watch_task(stack.id) + self.eng._start_watch_task(stack.id, self.ctx) self.assertEqual([self.eng._periodic_watcher_task], self.eng.stg[stack.id].threads) self.stack.delete() -- 2.45.2