From 5acab1187518f160082c490d23546392bd8d394c Mon Sep 17 00:00:00 2001 From: guomangmang Date: Wed, 12 Nov 2025 18:57:37 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- virtrust/src/tsb_agent/mock/tsb_agent_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/virtrust/src/tsb_agent/mock/tsb_agent_test.cpp b/virtrust/src/tsb_agent/mock/tsb_agent_test.cpp index 57121de..1c8c4aa 100644 --- a/virtrust/src/tsb_agent/mock/tsb_agent_test.cpp +++ b/virtrust/src/tsb_agent/mock/tsb_agent_test.cpp @@ -13,7 +13,7 @@ namespace virtrust::mock { -// Test fixture for TSB agent interface tests +// Test fixture for Tsb agent interface tests class TsbAgentItfTest : public ::testing::Test { protected: // Helper method to verify that a function returns OK -- Gitee From e6a9533122df67bca21d87257249d542e4df5b2c Mon Sep 17 00:00:00 2001 From: guomangmang Date: Wed, 12 Nov 2025 19:23:20 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E8=BF=81=E7=A7=BB=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- virtrust/src/tsb_agent/tsb_agent.h | 6 +++- .../virtrust/link/migration_service_impl.cpp | 6 +++- .../src/virtrust/link/migration_session.cpp | 32 +++++++++++-------- .../src/virtrust/link/migration_session.h | 4 +-- 4 files changed, 31 insertions(+), 17 deletions(-) diff --git a/virtrust/src/tsb_agent/tsb_agent.h b/virtrust/src/tsb_agent/tsb_agent.h index 485f5b7..38fca89 100644 --- a/virtrust/src/tsb_agent/tsb_agent.h +++ b/virtrust/src/tsb_agent/tsb_agent.h @@ -36,11 +36,13 @@ enum { }; enum ErrorCode { - SUCCESS, + SUCCESS = 0, ERR_INVALID_INPUT, ERR_MEMORY_ALLOCA, ERR_INVALID_FORMAT, ERR_INVALID_UUID, + ERR_CREATE_KEY, + ERR_SIGN_CERT, ERR_FILE_LOCK, ERR_READ_FILE, ERR_WRITE_FILE, @@ -48,6 +50,8 @@ enum ErrorCode { ERR_DUPLICATE_UUID, ERR_PUBKEY_MISMATCH, ERR_CERT_MISMATCH, + ERR_HUUID_MISMATCH, + ERR_VUUID_MISMATCH, }; struct Description { diff --git a/virtrust/src/virtrust/link/migration_service_impl.cpp b/virtrust/src/virtrust/link/migration_service_impl.cpp index ef1fc95..01bcd32 100644 --- a/virtrust/src/virtrust/link/migration_service_impl.cpp +++ b/virtrust/src/virtrust/link/migration_service_impl.cpp @@ -138,9 +138,13 @@ grpc::Status MigrationServiceImpl::SendVRsourceData(grpc::ServerContext *context return grpc::Status::OK; } // 服务端 - MigrateSessionRc rc = session->OnTransferDataRequestReceived(request); + int32_t result = 0; + MigrateSessionRc rc = session->OnTransferDataRequestReceived(request, result); if (rc != MigrateSessionRc::OK) { response->set_result(1); + if (result != 0) { + response->set_result(result); + } return grpc::Status::OK; } diff --git a/virtrust/src/virtrust/link/migration_session.cpp b/virtrust/src/virtrust/link/migration_session.cpp index 500f7c9..148516f 100644 --- a/virtrust/src/virtrust/link/migration_session.cpp +++ b/virtrust/src/virtrust/link/migration_session.cpp @@ -233,7 +233,7 @@ MigrateSessionRc MigrationSession::SendTransferOnce(const std::string &cipher, c // 传输数据失败 if (ret != 0) { VIRTRUST_LOG_ERROR("|SendTransferOnce|END|returnF||failed to tansfer data for: {}", domainName_); - UndoMigration(); + UndoMigration(ret); return MigrateSessionRc::ERROR; } @@ -245,7 +245,7 @@ MigrateSessionRc MigrationSession::OnTransferResponseReceived(bool transferRet) // 对端校验数据失败 if (!transferRet) { VIRTRUST_LOG_ERROR("|OnTransferResponseReceived|END|returnF||peer verify data faild: {}", domainName_); - UndoMigration(); + UndoMigration(0); return MigrateSessionRc::ERROR; } @@ -254,7 +254,7 @@ MigrateSessionRc MigrationSession::OnTransferResponseReceived(bool transferRet) if (rc != MigrateSessionRc::OK) { VIRTRUST_LOG_ERROR("|OnTransferResponseReceived|END|returnF|domain name: {}|MigrationNotify failure failed.", domainName_); - UndoMigration(); + UndoMigration(0); return MigrateSessionRc::ERROR; } @@ -417,15 +417,16 @@ MigrateSessionRc MigrationSession::GetVirConnContext(const std::string &uri, std } // 撤销迁移操作 -void MigrationSession::UndoMigration() +void MigrationSession::UndoMigration(int32_t ret) { // 防止server端误调 if (role_ != Role::Initiator) { return; } - - // 1.基于uri删除libvirt虚拟机 - UndefineVirtDomainBaseUri(destUri_); + if (ret != ERR_DUPLICATE_UUID) { + // 1.基于uri删除libvirt虚拟机 + UndefineVirtDomainBaseUri(destUri_); + } // 2.通知TSB迁移失败 NotifyVRMigration(false); @@ -475,18 +476,21 @@ MigrateSessionRc MigrationSession::NotifyVRMigration(bool success) MigrateSessionRc MigrationSession::GetVmInfo(Description &vmInfo) { - Description* raw = nullptr; + Description *raw = nullptr; int vNums = 0; int ret = GetVRoots(&vNums, &raw); - std::unique_ptr vInfos(raw, [](Description* p){ if (p) free(p); }); + std::unique_ptr vInfos(raw, [](Description *p) { + if (p) + free(p); + }); if (ret != 0 || raw == nullptr || vNums <= 0) { VIRTRUST_LOG_INFO("|GetVmInfo|END|returnF||Get all vm descriptions failed."); return MigrateSessionRc::ERROR; } - const std::string& uuid = sessionId_; + const std::string &uuid = sessionId_; for (int i = 0; i < vNums; ++i) { if (std::strncmp(vInfos.get()[i].uuid, uuid.c_str(), sizeof(vInfos.get()[i].uuid)) == 0) { @@ -637,7 +641,8 @@ MigrateSessionRc MigrationSession::OnStartMigrationRequestReceived() return MigrateSessionRc::OK; } -MigrateSessionRc MigrationSession::OnTransferDataRequestReceived(const protos::VRsourceInfoRequest *request) +MigrateSessionRc MigrationSession::OnTransferDataRequestReceived(const protos::VRsourceInfoRequest *request, + int32_t &result) { if (state_ != State::Transferring) { Cleanup(); @@ -662,10 +667,11 @@ MigrateSessionRc MigrationSession::OnTransferDataRequestReceived(const protos::V auto vmInfo = DescriptionFromProto(protosDesc); ret = CreateVRoot(&vmInfo); if (ret != 0) { + result = ret; EnterState(State::Failed); Cleanup(); - VIRTRUST_LOG_ERROR( - "|OnTransferDataRequestReceived|END|returnF|domain name: {}|CreateVRoot failed.", domainName_); + VIRTRUST_LOG_ERROR("|OnTransferDataRequestReceived|END|returnF|domain name: {}|CreateVRoot failed.", + domainName_); return MigrateSessionRc::ERROR; } diff --git a/virtrust/src/virtrust/link/migration_session.h b/virtrust/src/virtrust/link/migration_session.h index f51dfe7..c35c097 100644 --- a/virtrust/src/virtrust/link/migration_session.h +++ b/virtrust/src/virtrust/link/migration_session.h @@ -66,7 +66,7 @@ public: MigrateSessionRc OnStartMigrationRequestReceived(); - MigrateSessionRc OnTransferDataRequestReceived(const protos::VRsourceInfoRequest *request); + MigrateSessionRc OnTransferDataRequestReceived(const protos::VRsourceInfoRequest *request, int32_t &result); MigrateSessionRc OnFinishedRequestReceived(bool finished); @@ -114,7 +114,7 @@ private: MigrateSessionRc GetVirConnContext(const std::string &uri, std::unique_ptr &outConn); - void UndoMigration(); + void UndoMigration(int32_t result); MigrateSessionRc UndefineVirtDomainBaseUri(const std::string &uri); -- Gitee