diff --git a/virtrust/src/tsb_agent/mock/tsb_agent_test.cpp b/virtrust/src/tsb_agent/mock/tsb_agent_test.cpp index 57121debbc1aad149c66acd4a6cc4416dd423328..1c8c4aa6afe735c9954b118dd8b51a781d9bde4f 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 diff --git a/virtrust/src/tsb_agent/tsb_agent.h b/virtrust/src/tsb_agent/tsb_agent.h index 485f5b7c2f7d40822192bedd00edb1fadb8e7ad0..38fca89f02cc7416e13552aceb54700de9fc6ac4 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 ef1fc957b797ba02c1d562ff988609c5b2dfbd9c..01bcd32c3b43e843345f8704950b482b1dc2863d 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 500f7c964ac7de17fd0c8e515fea196fb45ed370..148516f905c4de9342a8184d01b915e6869a4031 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 f51dfe73f7ea52138975772a0c61d3d3ad506c81..c35c09706668f3cb61fb0e541ff8ffa5e268b1e3 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);