Support SO restart for projects
Change-Id: I632151fa0194f80ab8d827f7bae3e96e6bc3748c
Signed-off-by: Philip Joseph <philip.joseph@riftio.com>
diff --git a/common/python/rift/mano/dts/subscriber/core.py b/common/python/rift/mano/dts/subscriber/core.py
index a2181e8..63cb321 100644
--- a/common/python/rift/mano/dts/subscriber/core.py
+++ b/common/python/rift/mano/dts/subscriber/core.py
@@ -163,8 +163,16 @@
def on_apply(dts, acg, xact, action, scratch):
"""Apply the configuration"""
- is_recovery = xact.xact is None and action == rwdts.AppconfAction.INSTALL
-
+ if xact.xact is None:
+ if action == rwdts.AppconfAction.INSTALL:
+ try:
+ for cfg in self.reg.elements:
+ if self.callback:
+ self.callback(cfg, rwdts.QueryAction.CREATE)
+ except Exception as e:
+ self._log.exception("Adding config {} during restart failed: {}".
+ format(cfg, e))
+ return
add_cfgs, delete_cfgs, update_cfgs = get_add_delete_update_cfgs(
dts_member_reg=self.reg,
diff --git a/common/python/rift/mano/utils/project.py b/common/python/rift/mano/utils/project.py
index 96d1de5..9d607ff 100644
--- a/common/python/rift/mano/utils/project.py
+++ b/common/python/rift/mano/utils/project.py
@@ -422,13 +422,13 @@
return self._dts
def add_project(self, name):
- self.log.info("Adding project: {}".format(name))
+ self._log.info("Adding project: {}".format(name))
if name not in self.projects:
self._callbacks.on_add_apply(name)
self.projects.append(name)
else:
- self.log.error("Project already present: {}".
+ self._log.error("Project already present: {}".
format(name))
def delete_project(self, name):
@@ -437,7 +437,7 @@
self._callbacks.on_delete_apply(name)
self.projects.remove(name)
else:
- self.log.error("Unrecognized project: {}".
+ self._log.error("Unrecognized project: {}".
format(name))
def update_project(self, name):
@@ -474,12 +474,11 @@
if action == rwdts.AppconfAction.INSTALL:
curr_cfg = self._reg.elements
for cfg in curr_cfg:
- self._log.debug("Project being re-added after restart.")
- self.add_project(cfg.name_ref)
+ self._log.error("NOT IMPLEMENTED: Project being re-added after restart: {}".
+ format(cfg))
+ # self.add_project(cfg.name)
+ raise NotImplementedError("Tasklet restart not supported")
else:
- # When RIFT first comes up, an INSTALL is called with the current config
- # Since confd doesn't actally persist data this never has any data so
- # skip this for now.
self._log.debug("No xact handle. Skipping apply config")
return
@@ -636,6 +635,18 @@
format(name, self._get_tasklet_name(), e))
def on_project_added(self, name):
+ if name not in self._tasklet.projects:
+ # Restart case, directly calling apply
+ try:
+ self._tasklet.projects[name] = \
+ self._class(name, self._tasklet, **(self._kw))
+ self._loop.create_task(self._get_project(name).register())
+
+ except Exception as e:
+ self._log.exception("Project {} create for {} failed: {}".
+ format(name, self._get_tasklet_name(), e))
+ raise e
+
self._log.debug("Project {} added to tasklet {}".
format(name, self._get_tasklet_name()))
self._get_project(name)._apply = True