Skip to content

Commit 237c737

Browse files
author
Zhang Wenhao
committed
<feature>[kvm]: sync VM host files when releasing VM resource
Resolves: ZSV-11439 Related: ZSV-11310 Change-Id: I6f666b7a676d79776b79636a766f6d676f767476
1 parent a3cbd28 commit 237c737

3 files changed

Lines changed: 52 additions & 1 deletion

File tree

conf/springConfigXml/Kvm.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,7 @@
273273
<zstack:extension interface="org.zstack.header.vm.VmInstanceDestroyExtensionPoint" />
274274
<zstack:extension interface="org.zstack.header.vm.VmPreMigrationExtensionPoint" />
275275
<zstack:extension interface="org.zstack.header.vm.AfterReimageVmInstanceExtensionPoint" />
276+
<zstack:extension interface="org.zstack.header.vm.VmReleaseResourceExtensionPoint" />
276277
</zstack:plugin>
277278
</bean>
278279
</beans>

plugin/kvm/src/main/java/org/zstack/kvm/efi/KvmSecureBootExtensions.java

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.zstack.header.vm.VmInstantiateResourceException;
3838
import org.zstack.header.vm.VmMigrationType;
3939
import org.zstack.header.vm.VmPreMigrationExtensionPoint;
40+
import org.zstack.header.vm.VmReleaseResourceExtensionPoint;
4041
import org.zstack.header.vm.additions.VmHostBackupFileVO;
4142
import org.zstack.header.vm.additions.VmHostBackupFileVO_;
4243
import org.zstack.header.vm.additions.VmHostFileContentVO;
@@ -87,7 +88,8 @@ public class KvmSecureBootExtensions implements KVMStartVmExtensionPoint,
8788
PreVmInstantiateResourceExtensionPoint,
8889
VmInstanceDestroyExtensionPoint,
8990
VmPreMigrationExtensionPoint,
90-
AfterReimageVmInstanceExtensionPoint {
91+
AfterReimageVmInstanceExtensionPoint,
92+
VmReleaseResourceExtensionPoint {
9193
private static final CLogger logger = Utils.getLogger(KvmSecureBootExtensions.class);
9294

9395
@Autowired
@@ -731,4 +733,51 @@ public void afterReimageVmInstance(VolumeInventory inventory) {
731733
logger.debug(String.format("reset TPM state for VM[uuid:%s] after reimage: " +
732734
"deleted all VmHostFileVO and VmHostBackupFileVO records", vmUuid));
733735
}
736+
737+
@Override
738+
public void releaseVmResource(VmInstanceSpec spec, Completion completion) {
739+
if (spec.getDestHost() == null) {
740+
completion.success();
741+
return;
742+
}
743+
744+
String hostUuid = spec.getDestHost().getUuid();
745+
String vmUuid = spec.getVmInventory().getUuid();
746+
List<VmHostFileVO> vmHostFiles = Q.New(VmHostFileVO.class)
747+
.eq(VmHostFileVO_.vmInstanceUuid, vmUuid)
748+
.eq(VmHostFileVO_.hostUuid, hostUuid)
749+
.list();
750+
if (vmHostFiles.isEmpty()) {
751+
completion.success();
752+
return;
753+
}
754+
755+
logger.info(String.format("try to sync VM host file[vmUuid=%s] from host[uuid=%s]", vmUuid, hostUuid));
756+
SyncVmHostFilesFromHostMsg syncMsg = new SyncVmHostFilesFromHostMsg();
757+
syncMsg.setHostUuid(hostUuid);
758+
syncMsg.setVmUuid(vmUuid);
759+
760+
for (VmHostFileVO file : vmHostFiles) {
761+
if (file.getType() == VmHostFileType.NvRam) {
762+
syncMsg.setNvRamPath(file.getPath());
763+
} else if (file.getType() == VmHostFileType.TpmState) {
764+
syncMsg.setTpmStateFolder(file.getPath());
765+
} else {
766+
logger.warn(String.format("unsupported vm host file type: %s, skip syncing for VM[uuid:%s] from host[uuid:%s]",
767+
file.getType(), vmUuid, hostUuid));
768+
}
769+
}
770+
771+
bus.makeLocalServiceId(syncMsg, VmInstanceConstant.SECURE_BOOT_SERVICE_ID);
772+
bus.send(syncMsg, new CloudBusCallBack(completion) {
773+
@Override
774+
public void run(MessageReply reply) {
775+
if (!reply.isSuccess()) {
776+
logger.warn(String.format("failed to sync VM host file[vmUuid=%s] from host[uuid=%s] but still continue: %s",
777+
vmUuid, hostUuid, reply.getError().getReadableDetails()));
778+
}
779+
completion.success();
780+
}
781+
});
782+
}
734783
}

test/src/test/resources/springConfigXml/Kvm.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,7 @@
272272
<zstack:extension interface="org.zstack.header.vm.VmInstanceDestroyExtensionPoint" />
273273
<zstack:extension interface="org.zstack.header.vm.VmPreMigrationExtensionPoint" />
274274
<zstack:extension interface="org.zstack.header.vm.AfterReimageVmInstanceExtensionPoint" />
275+
<zstack:extension interface="org.zstack.header.vm.VmReleaseResourceExtensionPoint" />
275276
</zstack:plugin>
276277
</bean>
277278
</beans>

0 commit comments

Comments
 (0)