pass backlogs via cache and verify for ocata 09/55809/1
authorYun Huang <yun.huang@windriver.com>
Wed, 4 Jul 2018 09:53:25 +0000 (17:53 +0800)
committerYun Huang <yun.huang@windriver.com>
Wed, 4 Jul 2018 09:53:25 +0000 (17:53 +0800)
Change-Id: I8067207656e52497d989c1cb43c10b7493949257
Issue-ID: MULTICLOUD-230
Signed-off-by: Yun Huang <yun.huang@windriver.com>
ocata/ocata/vesagent/tasks.py
ocata/ocata/vesagent/vesagent_ctrl.py

index 6d0486f..2c94c8e 100644 (file)
@@ -44,13 +44,65 @@ def scheduleBacklogs(self, vimid):
 
 def processBacklogs():
     # find out count of valid backlog and the next time slot
-    backlog_count = 2 #debug the timer sleep
+    backlog_count = 0
     next_time_slot = 10
+    try:
+        #get the whole list of backlog
+        VesAgentBacklogsVimListStr = cache.get("VesAgentBacklogs.vimlist")
+        if VesAgentBacklogsVimListStr is None:
+            logger.warn("VesAgentBacklogs.vimlist cannot be found in cache")
+            return 0,next_time_slot
 
-    logger.debug("process backlogs starts")
+        logger.debug("VesAgentBacklogs.vimlist: %s" % (VesAgentBacklogsVimListStr))
 
-    #TBD
+        backlogsAllVims = json.loads(VesAgentBacklogsVimListStr)
+        if backlogsAllVims is None:
+            logger.warn("VesAgentBacklogs.vimlist is empty")
+            return 0,next_time_slot
+
+        for vimid in backlogsAllVims:
+            #iterate each backlogs
+            backlog_count_tmp,next_time_slot_tmp = processBacklogsOfOneVIM(vimid)
+            logger.debug("vimid:%s, backlog_count,next_time_slot:%s,%s"
+                         %( vimid,backlog_count_tmp,next_time_slot_tmp ))
+            backlog_count += backlog_count_tmp
+            next_time_slot = next_time_slot_tmp if next_time_slot > next_time_slot_tmp else next_time_slot
+            pass
+
+    except Exception as e:
+        logger.error("exception:%s" % str(e))
+
+    return backlog_count, next_time_slot
+
+    pass
+
+
+def processBacklogsOfOneVIM(vimid):
+    '''
+    process all backlogs for a VIM, return count of valid backlogs
+    :param vimid:
+    :return:
+    '''
+    backlog_count = 3
+    next_time_slot = 10
+
+    try:
+        vesAgentConfigStr = cache.get("VesAgentBacklogs.config.%s" % (vimid))
+        if vesAgentConfigStr is None:
+            logger.warn("VesAgentBacklogs.config.%s cannot be found in cache" % (vimid))
+            return 0,next_time_slot
+
+        logger.debug("VesAgentBacklogs.config.%s: %s" % (vimid, vesAgentConfigStr))
+
+        vesAgentConfig = json.loads(vesAgentConfigStr)
+        if vesAgentConfig is None:
+            logger.warn("VesAgentBacklogs.config.%s corrupts" % (vimid))
+            return 0,next_time_slot
+
+
+
+    except Exception as e:
+        logger.error("exception:%s" % str(e))
 
-    logger.debug("return with %s" %(backlog_count, next_time_slot))
     return backlog_count, next_time_slot
 
index f99ac46..daacb4f 100644 (file)
@@ -258,6 +258,21 @@ class VesAgentCtrl(APIView):
                 # cache forever
                 cache.set("VesAgentBacklogs.config.%s" % vimid, VesAgentBacklogsConfigStr, None)
 
+                # update list of vimid for vesagent
+                # get the whole list of backlog
+                VesAgentBacklogsVimListStr = cache.get("VesAgentBacklogs.vimlist")
+                VesAgentBacklogsVimList = [vimid]
+                if VesAgentBacklogsVimListStr is not None:
+                    VesAgentBacklogsVimList = json.loads(VesAgentBacklogsVimListStr)
+                    VesAgentBacklogsVimList = [v for v in VesAgentBacklogsVimList if v != vimid]
+                    VesAgentBacklogsVimList = self.vimid_
+                    VesAgentBacklogsVimList.append(vimid)
+
+                logger.info("VesAgentBacklogs.vimlist is %s" % VesAgentBacklogsVimList)
+
+                #cache forever
+                cache.set("VesAgentBacklogs.vimlist", json.dumps(VesAgentBacklogsVimList), None)
+
                 # notify schduler
                 scheduleBacklogs.delay(vimid)
         except Exception as e: