]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
heat engine allow WatchRule load() from DB object
authorSteven Hardy <shardy@redhat.com>
Mon, 19 Nov 2012 22:23:24 +0000 (22:23 +0000)
committerSteven Hardy <shardy@redhat.com>
Mon, 19 Nov 2012 22:26:20 +0000 (22:26 +0000)
Allow WatchRule.load to initialize an object based on an existing
sqlalchemy DB object, similar to parser.Stack, avoids doing two
DB lookups when running the periodic watch tasks

Change-Id: I280942b81e5fdee17acf5582e3d319045afa7914
Signed-off-by: Steven Hardy <shardy@redhat.com>
heat/engine/service.py
heat/engine/watchrule.py

index 8b75894158e437ed94430f0c825870b35ce73cf0..83098780ced13e238dee3bd804c3be74a27ca305 100644 (file)
@@ -397,14 +397,13 @@ class EngineService(service.Service):
 
     def _periodic_watcher_task(self, context, sid):
         try:
-            wrn = [w.name for w in
-                   db_api.watch_rule_get_all_by_stack(context, sid)]
+            wrs = db_api.watch_rule_get_all_by_stack(context, sid)
         except Exception as ex:
             logger.warn('periodic_task db error (%s) %s' %
                         ('watch rule removed?', str(ex)))
             return
-        for wr in wrn:
-            rule = watchrule.WatchRule.load(context, wr)
+        for wr in wrs:
+            rule = watchrule.WatchRule.load(context, watch=wr)
             rule.evaluate()
 
     def create_watch_data(self, context, watch_name, stats_data):
index 3ff90840ca72e3bcb6d4bcd800260d4cbae9dee1..09a278e96fcf9c779afadf2d8e339509a72d69cb 100644 (file)
@@ -53,27 +53,27 @@ class WatchRule(object):
         self.last_evaluated = last_evaluated
 
     @classmethod
-    def load(cls, context, watch_name):
+    def load(cls, context, watch_name=None, watch=None):
         '''
-        Load the watchrule from the DB by name
+        Load the watchrule object, either by name or via an existing DB object
         '''
-        dbwr = None
-        try:
-            dbwr = db_api.watch_rule_get_by_name(context, watch_name)
-        except Exception as ex:
-            logger.warn('show_watch (%s) db error %s' %
-                        (watch_name, str(ex)))
-        if not dbwr:
+        if watch == None:
+            try:
+                watch = db_api.watch_rule_get_by_name(context, watch_name)
+            except Exception as ex:
+                logger.warn('WatchRule.load (%s) db error %s' %
+                            (watch_name, str(ex)))
+        if watch == None:
             raise AttributeError('Unknown watch name %s' % watch_name)
         else:
             return cls(context=context,
-                       watch_name=dbwr.name,
-                       rule=dbwr.rule,
-                       stack_id=dbwr.stack_id,
-                       state=dbwr.state,
-                       wid=dbwr.id,
-                       watch_data=dbwr.watch_data,
-                       last_evaluated=dbwr.last_evaluated)
+                       watch_name=watch.name,
+                       rule=watch.rule,
+                       stack_id=watch.stack_id,
+                       state=watch.state,
+                       wid=watch.id,
+                       watch_data=watch.watch_data,
+                       last_evaluated=watch.last_evaluated)
 
     def store(self):
         '''