From 71cfeee0ba33cce1d37bfa53af8cdcfaffe364a1 Mon Sep 17 00:00:00 2001 From: cx Date: Sat, 6 Dec 2025 16:18:58 +0800 Subject: [PATCH 1/3] fix: add memory free for error branch in foreign_mounter.cpp --- virtrust/src/virtrust/utils/foreign_mounter.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/virtrust/src/virtrust/utils/foreign_mounter.cpp b/virtrust/src/virtrust/utils/foreign_mounter.cpp index 7f3a4a1..2fbd30d 100644 --- a/virtrust/src/virtrust/utils/foreign_mounter.cpp +++ b/virtrust/src/virtrust/utils/foreign_mounter.cpp @@ -250,7 +250,7 @@ std::string VerifyConfig::GetGrubVersion(ForeignMounter &mounter) { // 未找到 if (grubVersion.empty()) { - VIRTRUST_LOG_ERROR( + VIRTRUST_LOG_WARN( "|GetGrubVersion|END|||Failed to extract grub version, not found or has no following line in {}.", GetGrubPath()); return ""; @@ -344,6 +344,7 @@ ForeignMounterRc ForeignMounter::Mount(std::string_view imgPath, size_t osIndex) size_t osCnt = CountStrings(roots); if (osIndex >= osCnt) { VIRTRUST_LOG_ERROR("|Mount|END|returnF||There are {} os in image, index out of range: {}.", osCnt, osIndex); + GuestfsFreeStringList(roots); return ForeignMounterRc::ERROR; } @@ -384,6 +385,7 @@ ForeignMounterRc ForeignMounter::MountFilesystems(const std::string &root) int ret = libguestfs_.guestfs_mount_ro(handle_, device.c_str(), mountpoint.c_str()); if (ret == -1) { VIRTRUST_LOG_ERROR("|MountFilesystems|END|returnF||Mount {} to {} failed.", device, mountpoint); + GuestfsFreeStringList(mountpoints); return ForeignMounterRc::ERROR; } } -- Gitee From 962dd53916e753c43fb1fe2a073a65eaa768030f Mon Sep 17 00:00:00 2001 From: cx Date: Sat, 6 Dec 2025 16:19:04 +0800 Subject: [PATCH 2/3] fix: modify VM state to shutoff after migration. --- virtrust/src/virtrust/api/domain.cpp | 4 ++-- virtrust/src/virtrust/link/migration_session.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/virtrust/src/virtrust/api/domain.cpp b/virtrust/src/virtrust/api/domain.cpp index 7600325..13fbd02 100644 --- a/virtrust/src/virtrust/api/domain.cpp +++ b/virtrust/src/virtrust/api/domain.cpp @@ -498,7 +498,7 @@ bool CompareTsbVirtState(int tsb, int virt) { switch (virt) { case VIR_DOMAIN_RUNNING: - return tsb == 1; + return tsb == VM_RUNNING; case VIR_DOMAIN_NOSTATE: case VIR_DOMAIN_BLOCKED: case VIR_DOMAIN_PAUSED: @@ -506,7 +506,7 @@ bool CompareTsbVirtState(int tsb, int virt) case VIR_DOMAIN_SHUTOFF: case VIR_DOMAIN_CRASHED: case VIR_DOMAIN_PMSUSPENDED: - return tsb == 0; + return tsb == VM_SHUTUP; default: return false; } diff --git a/virtrust/src/virtrust/link/migration_session.cpp b/virtrust/src/virtrust/link/migration_session.cpp index 1003bae..b77b7bd 100644 --- a/virtrust/src/virtrust/link/migration_session.cpp +++ b/virtrust/src/virtrust/link/migration_session.cpp @@ -773,7 +773,7 @@ MigrateSessionRc MigrationSession::OnTransferDataRequestReceived(const protos::V // 导入服务端发来的虚拟机描述信息 auto protosDesc = request->vtpcminfo(); auto vmInfo = DescriptionFromProto(protosDesc); - vmInfo.state = VIR_DOMAIN_SHUTOFF; + vmInfo.state = VM_SHUTUP; VIRTRUST_LOG_DEBUG("|domain name: {}|TSB: CreateVRoot start", domainName_); ret = CreateVRoot(&vmInfo); if (ret != 0) { -- Gitee From ee474a01c16ff0f4a0783a020ca8712d257ef03b Mon Sep 17 00:00:00 2001 From: cx Date: Mon, 8 Dec 2025 16:18:41 +0800 Subject: [PATCH 3/3] fix: update doc. --- virtrust/docs/002-virtrust-api.md | 4 +--- virtrust/docs/003-virtrust-sh.md | 16 ++++++++-------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/virtrust/docs/002-virtrust-api.md b/virtrust/docs/002-virtrust-api.md index 8b12327..7a46bdf 100644 --- a/virtrust/docs/002-virtrust-api.md +++ b/virtrust/docs/002-virtrust-api.md @@ -71,8 +71,6 @@ VirtrustRc DomainDestroy(const std::unique_ptr &conn, const std::string ### 3. DomainMigrate - 迁移虚拟机 -将虚拟机迁移到其他主机。当前仅支持离线迁移,虚拟机在 running/shut-off 状态下,非共享存储需要用户手动复制磁盘文件,例如 qcow2 到目的端口,目标存在同名运行的虚拟机情况下不能迁移,可配置源虚拟机是否删除,重复迁移会覆盖目标端虚拟机。 - ```cpp VirtrustRc DomainMigrate(const std::unique_ptr &conn, const std::string &domainName, const std::string &destUri, unsigned int flags = 0); @@ -88,7 +86,7 @@ VirtrustRc DomainMigrate(const std::unique_ptr &conn, const std::string - `MIGRATE_UNDEFINE_SOURCE`:迁移成功后删除源端虚拟机 **功能描述**: -将虚拟机从当前主机迁移到目标主机。支持安全的迁移过程,包括 TSB 资源的同步。 +将虚拟机从当前主机迁移到目标主机。支持安全的迁移过程,包括 TSB 资源的同步。当前仅支持离线迁移,并且需要确保虚拟机在 shut-off 状态下。如待迁移虚拟机配置了非共享存储,则用户需要手动复制磁盘文件(例如 qcow2)到目的节点。如果目标存在同名运行的虚拟机情况下不能迁移。当前支持可配置源虚拟机是否删除,重复迁移会覆盖目标端虚拟机。 **返回值**: - 成功返回 `VirtrustRc::OK` diff --git a/virtrust/docs/003-virtrust-sh.md b/virtrust/docs/003-virtrust-sh.md index 2db5dcb..4e54c5d 100644 --- a/virtrust/docs/003-virtrust-sh.md +++ b/virtrust/docs/003-virtrust-sh.md @@ -4,7 +4,7 @@ Virtrust Shell (virtrust-sh) 是 virtrust 项目的命令行界面工具,为用户提供了交互式的虚拟机管理功能。它基于 virtrust API 库构建,支持虚拟机的完整生命周期管理操作。 -- **虚拟机生命周期管理**:创建、启动、停止、迁移、查询和删除虚拟机 +- **虚拟机生命周期管理**:创建、启动、停止、迁移、查询和删除虚拟机定义 ## 安装和使用 @@ -29,11 +29,11 @@ virtrust-sh [options]... [args...] | 命令 | 描述 | |------|------| | `create` | 创建虚拟机实例 | -| `destroy` | 销毁(停止)虚拟机域 | +| `destroy` | 强制关闭(停止)虚拟机域 | | `list` | 列出虚拟机信息 | | `migrate` | 迁移虚拟机到其他主机 | | `start` | 启动(先前定义的)非活动虚拟机域 | -| `undefine` | 取消定义虚拟机域 | +| `undefine` | 删除虚拟机定义 | ## 详细命令说明 @@ -101,9 +101,9 @@ virtrust-sh -d start test-vm virtrust-sh start --only-tsb ``` -### 3. destroy - 停止虚拟机 +### 3. destroy - 强制关闭(停止)虚拟机 -强制停止运行中的虚拟机。 +强制关闭(停止)运行中的虚拟机。 **基本语法**: ```bash @@ -115,11 +115,11 @@ virtrust-sh destroy [options] - `--only-tsb`:仅更新 TSB 资源,需要提供虚拟机的 UUID 作为 domain_name **参数说明**: -- `domain_name`:要停止的虚拟机名称或 UUID(使用 `--only-tsb` 选项时必须使用 UUID) +- `domain_name`:要强制关闭(停止)的虚拟机名称或 UUID(使用 `--only-tsb` 选项时必须使用 UUID) **示例**: ```bash -# 停止虚拟机 +# 强制关闭(停止)虚拟机 virtrust-sh destroy test-vm # 仅更新 TSB 资源 @@ -128,7 +128,7 @@ virtrust-sh destroy --only-tsb ### 4. undefine - 删除虚拟机定义 -删除虚拟机的配置定义,但不会删除磁盘镜像文件。 +删除虚拟机定义,但不会删除磁盘镜像文件。 **基本语法**: ```bash -- Gitee