@@ -305,6 +305,10 @@ public String getName() {
305305 static class RemoveTpmFromVmContext {
306306 String vmInstanceUuid ;
307307 String tpmUuid ;
308+
309+ // enable when TPM delete/VM delete ...
310+ boolean force ;
311+
308312 List <VmHostFileVO > hostFiles ;
309313
310314 static RemoveTpmFromVmContext valueOf (RemoveTpmMsg msg ) {
@@ -318,6 +322,7 @@ static RemoveTpmFromVmContext valueOf(RemoveTpmMsg msg) {
318322 private void removeTpmFromVm (RemoveTpmFromVmContext context , Completion completion ) {
319323 SimpleFlowChain .of ("remove-tpm-from-vm-" + context .vmInstanceUuid )
320324 .then (Flow .of ("check-vm-status" )
325+ .skipIf (data -> context .force )
321326 .handle (trigger -> {
322327 VmInstanceVO vm = Q .New (VmInstanceVO .class )
323328 .eq (VmInstanceVO_ .uuid , context .vmInstanceUuid )
@@ -457,10 +462,31 @@ public void rollback(FlowRollback trigger, Map data) {
457462 trigger .rollback ();
458463 return ;
459464 }
460- SQL .New (TpmVO .class )
461- .in (TpmVO_ .uuid , transform (reply .getInventories (), TpmInventory ::getUuid ))
462- .delete ();
463- trigger .rollback ();
465+
466+ new While <>(reply .getInventories ()).each ((tpm , whileCompletion ) -> {
467+ RemoveTpmFromVmContext removeContext = new RemoveTpmFromVmContext ();
468+ removeContext .vmInstanceUuid = tpm .getVmInstanceUuid ();
469+ removeContext .tpmUuid = tpm .getUuid ();
470+ removeContext .force = true ;
471+ removeTpmFromVm (removeContext , new Completion (whileCompletion ) {
472+ @ Override
473+ public void success () {
474+ whileCompletion .done ();
475+ }
476+
477+ @ Override
478+ public void fail (ErrorCode errorCode ) {
479+ logger .warn (String .format ("failed to delete tpm for VM[%s] but still continue: %s" ,
480+ tpm .getVmInstanceUuid (), errorCode .getReadableDetails ()));
481+ whileCompletion .done ();
482+ }
483+ });
484+ }).run (new WhileDoneCompletion (trigger ) {
485+ @ Override
486+ public void done (ErrorCodeList errorCodeList ) {
487+ trigger .rollback ();
488+ }
489+ });
464490 }
465491 }).then (new NoRollbackFlow () {
466492 String __name__ = "clone-encrypted-resource-key-if-needed" ;
0 commit comments