From 8c6f54426aa114f5f80e8ec709ab2c9d37f8ef15 Mon Sep 17 00:00:00 2001 From: "xinhao.huang" Date: Wed, 29 Apr 2026 15:09:08 +0800 Subject: [PATCH] [upgrade]: compare incoming version in updateAgentVersion UpgradeChecker.updateAgentVersion early-returned when DB.expectVersion equals DB.currentVersion, ignoring the new version reported by ping. Once a host record reached the stable current==expect state, any subsequent ping bringing a different version was silently dropped, breaking grayscale upgrade tracking and causing GrayscaleUpgradeCase to fail intermittently when HostTracker's background ping created the stable record before the test mutated the simulator. Compare DB current/expect against the incoming parameters instead, and update both fields together so expectVersion stays in sync with dbf.getDbVersion(). Resolves: ZSTAC-84886 Change-Id: I63636b6f696b6463756f656c627367617a6d6a79 --- .../zstack/core/upgrade/UpgradeChecker.java | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/core/src/main/java/org/zstack/core/upgrade/UpgradeChecker.java b/core/src/main/java/org/zstack/core/upgrade/UpgradeChecker.java index 90639caf24c..6ac72ea2dfb 100644 --- a/core/src/main/java/org/zstack/core/upgrade/UpgradeChecker.java +++ b/core/src/main/java/org/zstack/core/upgrade/UpgradeChecker.java @@ -327,24 +327,25 @@ public void updateAgentVersion(String agentUuid, String agentType, String expect return; } - if (Objects.equals(agentVersionVO.getExpectVersion(), agentVersionVO.getCurrentVersion())) { + if (Objects.equals(agentVersionVO.getCurrentVersion(), currentVersion) + && Objects.equals(agentVersionVO.getExpectVersion(), expectVersion)) { logger.trace(String.format("Agent[uuid: %s] version expected version: %s, current version: %s, not changed", agentUuid, agentVersionVO.getExpectVersion(), agentVersionVO.getCurrentVersion())); return; } - if (!Objects.equals(agentVersionVO.getCurrentVersion(), currentVersion)) { - String originCurrentVersion = agentVersionVO.getCurrentVersion(); - agentVersionVO.setCurrentVersion(currentVersion); - logger.trace(String.format("Update agent[uuid: %s] version\n" + - "From:\n" + - "expected version: %s, current version: %s\n" + - "To:\n" + - "expected version: %s, current version: %s\n", - agentUuid, - agentVersionVO.getExpectVersion(), originCurrentVersion, - agentVersionVO.getExpectVersion(), agentVersionVO.getCurrentVersion())); - dbf.update(agentVersionVO); - } + String originCurrentVersion = agentVersionVO.getCurrentVersion(); + String originExpectVersion = agentVersionVO.getExpectVersion(); + agentVersionVO.setCurrentVersion(currentVersion); + agentVersionVO.setExpectVersion(expectVersion); + logger.trace(String.format("Update agent[uuid: %s] version\n" + + "From:\n" + + "expected version: %s, current version: %s\n" + + "To:\n" + + "expected version: %s, current version: %s\n", + agentUuid, + originExpectVersion, originCurrentVersion, + agentVersionVO.getExpectVersion(), agentVersionVO.getCurrentVersion())); + dbf.update(agentVersionVO); } /**