| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
[feature]Pymotor支持prestop优雅退出 Co-authored-by: yilunh<hanyilun1@huawei.com> # message auto-generated for no-merge-commit merge: !244 merge stopstop into master [feature]Pymotor支持prestop优雅退出 Created-by: yilunh Commit-by: yilunh Merged-by: towncharlie Description: ## **1. 合入背景** 为 Engine Pod引入 Kubernetes PreStop 优雅下线能力,避免缩容/滚动更新时强行杀进程导致在途请求中断。 fixes [#161](https://gitcode.com/Ascend/MindIE-PyMotor/issues/161) ## **2. 修改内容** - Deploy 侧:新增 prestop.sh / prestop.py,打入 ConfigMap;Engine YAML 增加 lifecycle.preStop,terminationGracePeriodSeconds由 10s → 30s;delete.sh 改为轮询 Pod 是否真正消失 - NodeManager:新增 POST /node-manager/pause(将 endpoint 标为 PAUSED,返回 engine_mgmt_addrs)和 POST /node-manager/resume(预留);心跳刷新时保留手动 PAUSED 状态 - Controller:新增 InsStatus.PAUSED 状态机与 INSTANCE_PAUSED / INSTANCE_RESUMED 事件,向 Coordinator 推送 PAUSE / RESUME - Coordinator:新增 _paused_pool,暂停实例不再参与新请求调度,已在跑请求可继续完成 - 排空检测:轮询本 Pod 内 engine 的 http://<mgmt_addr>/metrics,累加 num_requests_waiting + num_requests_running 至 0 后退出;prestop.sh 最后 kill -TERM NM 主进程完成容器退出  ## **3. 资料变更** 不涉及 ## **4. 接口变更** 不涉及 ## **5. 测试结果**  ## **6. CheckList** > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] [ ] 代码注释完备 [ ] 正确记录维测日志 [ ] 是否有UT用例 [ ] 若涉及多线程场景,考虑了并发场景,不存在死锁问题 See merge request: Ascend/MindIE-PyMotor!244 | 2 个月前 | |
[fix] 修复Coordinator实例管理无法过滤相同job_name实例的问题 Co-authored-by: 吕有辉<lvyouhui@huawei.com> # message auto-generated for no-merge-commit merge: !643 merge fix/coordinator_ins_mgmt into master [fix] 修复Coordinator实例管理无法过滤相同job_name实例的问题 Created-by: codeDogPro Commit-by: 吕有辉 Merged-by: towncharlie Description: ## **1. 合入背景** https://gitcode.com/Ascend/MindIE-Motor/issues/378 ## **2. 修改内容** instance_manager.py:427-470 中的 _add_instances 在添加实例时,仅按 instance.id 做去重检查(第 433 行检查 unavailable pool,_add_instance_to_available_pool 中检查 available pool)。当 Pod 重启后获得新的 instance.id 但保持相同的 job_name 时,旧实例(旧 ID)仍留在池中,新实例(新 ID)也被添加进来,导致同一个 job_name 对应两个不同 ID 的实例。 修复方案 新增两个私有辅助方法,并在 _add_instances 中添加 job_name 去重逻辑: 1. _find_instance_by_job_name (第 427-433 行) 遍历 available、unavailable、paused 三个池,按 job_name 查找已有实例。 2. _remove_instance_from_all_pools (第 435-447 行) 从任意池中移除指定 ID 的实例。对于 available pool,委托给 _delete_instance_from_available_pool 以正确处理角色子池、endpoint cache、workload lock 的清理。 3. _add_instances 中的去重守卫 (第 465-480 行) 在尝试添加新实例之前,先检查是否有相同 job_name 但不同 id 的旧实例存在。如果存在,先移除旧实例(日志级别为 WARNING 以引起注意),再添加新实例,确保池中不会出现同一 job_name 的两个实例。 新增测试用例: _find_instance_by_job_name (4 个) 测试 场景 test_find_instance_by_job_name_found_in_available_pool 在 available pool 中找到 test_find_instance_by_job_name_found_in_unavailable_pool 在 unavailable pool 中找到 test_find_instance_by_job_name_found_in_paused_pool 在 paused pool 中找到 test_find_instance_by_job_name_not_found 未找到返回 None _remove_instance_from_all_pools (4 个) 测试 场景 test_remove_instance_from_all_pools_from_available 从 available pool 移除(含角色子池清理) test_remove_instance_from_all_pools_from_unavailable 从 unavailable pool 移除 test_remove_instance_from_all_pools_from_paused 从 paused pool 移除 test_remove_instance_from_all_pools_not_found 不在任何池中返回 False _add_instances job_name 去重 (5 个) 测试 场景 test_add_instances_same_job_name_different_id_replaces_stale 核心场景:同 job_name 不同 ID(Pod 重启),旧实例被移除,新实例加入 test_add_instances_same_job_name_different_id_from_unavailable_pool 旧实例在 unavailable pool 中被替换 test_add_instances_same_job_name_different_id_from_paused_pool 旧实例在 paused pool 中被替换 test_add_instances_same_job_name_and_id_skips_as_duplicate 同 job_name 且同 ID → 保持原有重复 ID 检查行为 test_add_instances_same_job_name_multiple_new_instances 多个新实例(各自不同 job_name)正常添加,无交叉干扰 ## **3. 资料变更** 不涉及 ## **4. 接口变更** 不涉及 ## **5. 测试结果** 测试ok ## **6. CheckList** > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] [ ] 代码注释完备 [ ] 正确记录维测日志 [ ] 是否有UT用例 [ ] 若涉及多线程场景,考虑了并发场景,不存在死锁问题 See merge request: Ascend/MindIE-Motor!643 | 12 天前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 2 个月前 | ||
| 12 天前 |