Fix nfdeployment uninstalling issue
[pti/o2.git] / o2dms / service / nfdeployment_handler.py
index c6a40ff..f945ce9 100644 (file)
@@ -20,6 +20,7 @@ from o2dms.domain.dms import NfDeployment, NfDeploymentDesc
 from o2dms.domain import commands
 from typing import Callable
 
+from o2dms.domain.exceptions import NfdeploymentNotFoundError
 from o2dms.domain import events
 from o2common.service.unit_of_work import AbstractUnitOfWork
 from helm_sdk import Helm
@@ -71,8 +72,8 @@ def handle_nfdeployment_statechanged(
             or cmd.FromState == NfDeploymentState.Abnormal:
 
         if cmd.ToState == NfDeploymentState.Deleting:
-            cmd2 = commands.UninstallNfDeployment(cmd.NfDeploymentId)
-            uninstall_nfdeployment(cmd2, uow)
+            cmd2 = commands.UninstallNfDeployment(cmd.NfDeploymentId)
+            uninstall_nfdeployment(cmd2, uow)
             cmd2 = commands.DeleteNfDeployment(cmd.NfDeploymentId)
             delete_nfdeployment(cmd2, uow)
         else:
@@ -82,15 +83,19 @@ def handle_nfdeployment_statechanged(
 
 
 # retry 10 seconds
-@retry(tries=20, max_delay=10000)
+@retry(
+    (NfdeploymentNotFoundError),
+    tries=100,
+    delay=2, max_delay=10000, backoff=1)
 def _retry_get_nfdeployment(
         cmd: commands.InstallNfDeployment,
         uow: AbstractUnitOfWork):
     nfdeployment: NfDeployment = uow.nfdeployments.get(
         cmd.NfDeploymentId)
     if nfdeployment is None:
-        raise Exception("Cannot find NfDeployment: {}".format(
-            cmd.NfDeploymentId))
+        raise NfdeploymentNotFoundError(
+            "Cannot find NfDeployment: {}".format(
+                cmd.NfDeploymentId))
     return nfdeployment
 
 
@@ -193,7 +198,12 @@ def uninstall_nfdeployment(
                 nfdeployment.descriptorId, nfdeployment.id
             ))
 
-    nfdeployment.set_state(NfDeploymentState.Uninstalling)
+    with uow:
+        entity: NfDeployment = uow.nfdeployments.get(cmd.NfDeploymentId)
+        if entity:
+            entity.set_state(NfDeploymentState.Uninstalling)
+        uow.commit()
+
     helm = Helm(logger, LOCAL_HELM_BIN, environment_variables={})
 
     logger.debug('Try to helm del {}'.format(
@@ -212,7 +222,8 @@ def uninstall_nfdeployment(
     with uow:
         entity: NfDeployment = uow.nfdeployments.get(cmd.NfDeploymentId)
         if entity:
-            entity.transit_state(NfDeploymentState.Initial)
+            entity.set_state(NfDeploymentState.Initial)
+            entity.transit_state(NfDeploymentState.Deleting)
         # uow.nfdeployments.update(
         #     cmd.NfDeploymentId, status=NfDeploymentState.Initial)
         uow.commit()