From 6d61e2815fed0d9b7d890aee7893cd95e7657cfc Mon Sep 17 00:00:00 2001 From: "shan.wu" Date: Wed, 20 Aug 2025 17:51:23 +0800 Subject: [PATCH] [migration]: fix cannot to select the correct host before migration. correctly check the results of cpu function comparison to avoid determining cpu function mismatch in case of abnormalities. Resolves/Related: ZSTAC-65793 Change-Id: I61746a72726470677a697a6e6e75736b75696f72 (cherry picked from commit d242635a710e4dab4091f84242187aa51cad9ba1) --- .../host/CompareCpuFunctionOnHostReply.java | 18 ++++++++++++++++++ .../java/org/zstack/kvm/KVMAgentCommands.java | 18 ++++++++++++++++++ .../src/main/java/org/zstack/kvm/KVMHost.java | 18 +++++++++++------- 3 files changed, 47 insertions(+), 7 deletions(-) diff --git a/header/src/main/java/org/zstack/header/host/CompareCpuFunctionOnHostReply.java b/header/src/main/java/org/zstack/header/host/CompareCpuFunctionOnHostReply.java index 73f3fe8946e..402fa684bbb 100644 --- a/header/src/main/java/org/zstack/header/host/CompareCpuFunctionOnHostReply.java +++ b/header/src/main/java/org/zstack/header/host/CompareCpuFunctionOnHostReply.java @@ -6,4 +6,22 @@ * Created by LiangHanYu on 2021/8/13 16:32 */ public class CompareCpuFunctionOnHostReply extends MessageReply { + private boolean match; + private String compareError; + + public boolean isMatch() { + return match; + } + + public void setMatch(boolean match) { + this.match = match; + } + + public String getCompareError() { + return compareError; + } + + public void setCompareError(String compareError) { + this.compareError = compareError; + } } diff --git a/plugin/kvm/src/main/java/org/zstack/kvm/KVMAgentCommands.java b/plugin/kvm/src/main/java/org/zstack/kvm/KVMAgentCommands.java index 12d0f44a164..5d225e377a8 100755 --- a/plugin/kvm/src/main/java/org/zstack/kvm/KVMAgentCommands.java +++ b/plugin/kvm/src/main/java/org/zstack/kvm/KVMAgentCommands.java @@ -3770,6 +3770,24 @@ public void setCpuXml(String cpuXml) { } public static class VmCompareCpuFunctionResponse extends AgentResponse { + private boolean match = true; + private String compareError; + + public boolean isMatch() { + return match; + } + + public void setMatch(boolean match) { + this.match = match; + } + + public String getCompareError() { + return compareError; + } + + public void setCompareError(String compareError) { + this.compareError = compareError; + } } public static class MergeSnapshotRsp extends AgentResponse { diff --git a/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java b/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java index ea36ca8d56b..56848716185 100755 --- a/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java +++ b/plugin/kvm/src/main/java/org/zstack/kvm/KVMHost.java @@ -1492,14 +1492,12 @@ public void fail(ErrorCode errorCode) { } private void handle(CompareCpuFunctionOnHostMsg msg) { - CompareCpuFunctionOnHostReply reply = new CompareCpuFunctionOnHostReply(); - thdf.singleFlightSubmit(new SingleFlightTask(msg) .setSyncSignature(String.format("compare-host-%s-cpu-function-xml-on-host-%s", msg.getSrcHostUuid(), msg.getDstHostUuid())) - .run((com) -> compareCpuFunctionOnHost(msg, new ReturnValueCompletion(com) { + .run((com) -> compareCpuFunctionOnHost(msg, new ReturnValueCompletion(com) { @Override - public void success(CompareCpuFunctionOnHostReply returnValue) { - com.success(returnValue); + public void success(VmCompareCpuFunctionResponse resp) { + com.success(resp); } @Override @@ -1508,14 +1506,20 @@ public void fail(ErrorCode errorCode) { } })) .done(((result) -> { + CompareCpuFunctionOnHostReply reply = new CompareCpuFunctionOnHostReply(); if (!result.isSuccess()) { reply.setError(result.getErrorCode()); + bus.reply(msg, reply); + return; } + VmCompareCpuFunctionResponse resp = (VmCompareCpuFunctionResponse)result.getResult(); + reply.setMatch(resp.isMatch()); + reply.setCompareError(resp.getCompareError()); bus.reply(msg, reply); }))); } - private void compareCpuFunctionOnHost(final CompareCpuFunctionOnHostMsg msg, ReturnValueCompletion completion) { + private void compareCpuFunctionOnHost(final CompareCpuFunctionOnHostMsg msg, ReturnValueCompletion completion) { VmCompareCpuFunctionCmd cmd = new VmCompareCpuFunctionCmd(); cmd.setCpuXml(msg.getCpuXml()); restf.asyncJsonPost(compareCpuFunctionPath, cmd, new JsonAsyncRESTCallback(completion) { @@ -1525,7 +1529,7 @@ public void success(VmCompareCpuFunctionResponse ret) { completion.fail(operr(ret.getError())); return; } - completion.success(new CompareCpuFunctionOnHostReply()); + completion.success(ret); } @Override