Skip to content

Commit 36e7d86

Browse files
author
Zhang Wenhao
committed
<fix>[kvm]: remove TPM when VM deleted from DB
Implement VmJustBeforeDeleteFromDbExtensionPoint to clean up TPM resources when VM is removed from database. This prevents TPM resource leakage and ensures proper cleanup. Related: ZSV-11310 Change-Id: I647a6d676377646b6f7773757363646b6977766b
1 parent 71fa939 commit 36e7d86

1 file changed

Lines changed: 27 additions & 1 deletion

File tree

plugin/kvm/src/main/java/org/zstack/kvm/tpm/KvmTpmExtensions.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,12 @@
3333
import org.zstack.header.tpm.entity.TpmVO;
3434
import org.zstack.header.tpm.entity.TpmVO_;
3535
import org.zstack.header.secret.SecretHostDefineReply;
36+
import org.zstack.header.tpm.message.RemoveTpmMsg;
3637
import org.zstack.header.vm.PreVmInstantiateResourceExtensionPoint;
38+
import org.zstack.header.vm.VmInstanceInventory;
3739
import org.zstack.header.vm.VmInstanceSpec;
3840
import org.zstack.header.vm.VmInstantiateResourceException;
41+
import org.zstack.header.vm.VmJustBeforeDeleteFromDbExtensionPoint;
3942
import org.zstack.header.vm.additions.VmHostBackupFileVO;
4043
import org.zstack.header.vm.additions.VmHostBackupFileVO_;
4144
import org.zstack.header.vm.additions.VmHostFileType;
@@ -54,11 +57,13 @@
5457
import java.time.Instant;
5558
import java.util.Map;
5659

60+
import static org.zstack.header.tpm.TpmConstants.SERVICE_ID;
5761
import static org.zstack.kvm.KVMConstant.*;
5862
import static org.zstack.core.Platform.operr;
5963

6064
public class KvmTpmExtensions implements KVMStartVmExtensionPoint,
61-
PreVmInstantiateResourceExtensionPoint {
65+
PreVmInstantiateResourceExtensionPoint,
66+
VmJustBeforeDeleteFromDbExtensionPoint {
6267
private static final CLogger logger = Utils.getLogger(KvmTpmExtensions.class);
6368

6469
@Autowired
@@ -373,6 +378,27 @@ public void fail(ErrorCode errorCode) {
373378
});
374379
}
375380

381+
@Override
382+
public void vmJustBeforeDeleteFromDb(VmInstanceInventory inv) {
383+
String tpmUuid = Q.New(TpmVO.class)
384+
.eq(TpmVO_.vmInstanceUuid, inv.getUuid())
385+
.select(TpmVO_.uuid)
386+
.findValue();
387+
if (tpmUuid == null) {
388+
return;
389+
}
390+
391+
RemoveTpmMsg removeMsg = new RemoveTpmMsg();
392+
removeMsg.setVmInstanceUuid(inv.getUuid());
393+
removeMsg.setTpmUuid(tpmUuid);
394+
bus.makeTargetServiceIdByResourceUuid(removeMsg, SERVICE_ID, removeMsg.getTpmUuid());
395+
MessageReply reply = bus.call(removeMsg);
396+
if (!reply.isSuccess()) {
397+
logger.warn(String.format("failed to remove TPM[uuid:%s] of VM[uuid:%s], error: %s",
398+
tpmUuid, inv.getUuid(), reply.getError()));
399+
}
400+
}
401+
376402
private void clearRollbackInfo(VmInstanceSpec spec) {
377403
if (spec.getDevicesSpec() == null || spec.getDevicesSpec().getTpm() == null) {
378404
return;

0 commit comments

Comments
 (0)