<fix>[vm]: publish HA start state change#3910
Conversation
Resolves: ZSTAC-84266 Change-Id: Ib8851991f035890cac610ac0fb3829e6780ded0f
|
ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: http://open.zstack.ai:20001/code-reviews/zstack-cloud.yaml (via .coderabbit.yaml) Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
通览此变更为VM状态变化规范事件添加了源追踪能力。新增stateChangeSource字段到VmStateChangedData,扩展changeVmStateInDb方法接收此参数,并在HA启动处理中将状态转换从手动SQL改为调用新增的API。 变更VM状态变化源追踪
代码审查工作量估计🎯 2 (简单) | ⏱️ ~12 分钟 诗歌
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Warning There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure. 🔧 ast-grep (0.42.1)compute/src/main/java/org/zstack/compute/vm/VmInstanceBase.javaComment |
|
Comment from yaohua.wu: Review: MR !9795 — ZSTAC-84266总体结论APPROVED(无 Critical 阻塞项;2 Warning + 4 Suggestion,非阻塞) 修复方向正确:用 关键正确性确认(已逐行核对 🟡 WarningW1. zstack 这一端用
建议: 在 W2. 新增事件广播面,对其他 listener 的影响未审计 修复前 HA-internal 的 MR description 与 Jira 评论里只列了 premium HaManager 的过滤逻辑,没有列受影响的扩展点清单。请确认(或在 description 里附上):
注:从 Jira 的修复初衷看,广播本身就是目的,所以这条不是要求拦截,而是要求审计预期影响面。 🟢 SuggestionS1. 缺少 Javadoc
新字段和新重载没有任何注释说明语义、合法值与使用约定。下次修 bug 的人只能反向工程 git blame 才能搞清楚这个 source 是干嘛的。建议至少加: /** Optional. Identifies non-user/non-API internal triggers of this state transition
* (e.g. HA recovery). Downstream listeners can use this to filter out internal corrections.
* Convention: fully-qualified class name of the originating internal Msg/job. */S2. 状态机隐式约束 旧的裸 SQL 直接覆写 进入 HA judger qualified 分支时,
如果 S3. zstack 端零增量单测
S4. 文件末尾空行被删除 POSIX 习惯要求文本文件以换行结尾,绝大多数 Java 项目(包括 zstack 同目录其他文件)都保留尾行。无功能影响,但会导致后续 diff 出现"添加最后一个换行"的噪音。建议恢复尾行。 Coverage
VerdictAPPROVED:核心修复正确、行为完全保留、改动定位精准。Warning 都是关于"扩散面"和"contract 显式化"的工程建议,不阻塞合并;Suggestion 全部是可选增强。建议在 follow-up(同一 sprint 内)处理 W1(提取常量)+ S1(加 Javadoc),其余按需。 🤖 Robot Reviewer |
|
Comment from hanyu.liang: W1.msg变化后这个字符还会随之变化,所以没有影响 |
Root Cause
VmInstanceBase.handle(HaStartVmInstanceMsg)directly updatedVmInstanceVO.statetoStoppedthrough SQL before HA start. This bypassedchangeVmStateInDb(), so the VM state transition log,/vm/state/changecanonical event, andVmStateChangedExtensionPointcallback were not emitted for the HA internalUnknown -> Stoppedtransition.Resolve
stateChangeSourcetoVmCanonicalEvents.VmStateChangedData; existing events keep the defaultnullvalue.changeVmStateInDb(VmInstanceStateEvent.stopped, ..., HaStartVmInstanceMsg.class.getName())instead of direct SQL update.Verification
Remote environment:
root@172.20.18.132/home/zstack/header:/usr/local/maven/bin/mvn clean install -Dmaven.test.skip=true-> BUILD SUCCESS/home/zstack/compute:/usr/local/maven/bin/mvn clean install -Dmaven.test.skip=true-> BUILD SUCCESS/home/zstack/premium/mevoco:/usr/local/maven/bin/mvn clean install -Dmaven.test.skip=true-> BUILD SUCCESS/home/zstack/premium/test-premium:/usr/local/maven/bin/mvn test -T 1C -Dtest=VmHaStartStateChangeEventCase-> Tests run: 1, Failures: 0, Errors: 0Jira: ZSTAC-84266
Supersedes wrong branch-name MR: http://dev.zstack.io:9080/zstackio/zstack/-/merge_requests/9794
sync from gitlab !9795