Caideyipi commented on PR #17908:
URL: https://github.com/apache/iotdb/pull/17908#issuecomment-4678002282

   我看了这次修复,主要有两个点建议再处理一下:
   
   1. `AddRegionPeerProcedure` 的 `PROCESSING` 分支现在通过 
`setNextState(AddRegionPeerState.DO_ADD_REGION_PEER)` + `HAS_MORE_STATE` 
留在当前状态,但在这个 procedure 框架里这不只是“持久化后等待恢复”。`StateMachineProcedure.execute()` 会返回 
`new Procedure[] {this}`,`ProcedureExecutor` 对 `subprocs.length == 1 && 
subprocs[0] == proc` 会设置 `reExecute = true`,也就是在同一个 worker 的同一次 
`executeProcedure` 循环里立即重入。再加上 `waitTaskFinish()` 捕获 `InterruptedException` 
后会重新设置 interrupt flag 并返回 `PROCESSING`,下一轮进入 `waitTaskFinish()` 时 `sleep(1)` 
可能立刻再次被中断,于是形成重复 submit/poll 循环;shutdown 时 worker 也不会因为 `running=false` 退出这个内层 
reExecute 循环。建议在框架层避免 stopped executor 继续 reExecute,或者让这个分支真正 
yield/退出当前执行轮次,而不是依赖 `HAS_MORE_STATE` 的即时重入语�
 �
   
   2. 新增的 `cnLeaderSwitchDuringDoAddPeerTest` 只等待 `DO_ADD_REGION_PEER` kill 
point 被触发并验证最终迁移成功,但 kill point 在 submit 后、`waitTaskFinish()` 前。如果 AddPeer 
很快完成,测试仍可能走 `SUCCESS` 分支并通过,没有实际覆盖这次新增的 `PROCESSING` 分支。建议额外断言 
`waitTaskFinish() returns PROCESSING` 这条日志出现,或者用更确定的 DataNode-side kill 
point/延迟确保 `waitTaskFinish()` 被 graceful stop 中断。


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to