Skip to content

Commit 710e572

Browse files
zhoushixianascend-robot
authored andcommitted
!2490 merge ascend800ia5x8-03 into master
【修改说明】A5适配调度资源类型解耦 Created-by: zhoushixian Commit-by: zhoushixian Merged-by: ascend-robot Description: ## 问题/功能描述 本次PR主要包含三项功能修改:1)在任务删除逻辑中,增加了升级重调度限制条件,解决了在禁止Pod升级重调度的场景下错误删除非故障任务的问题,确保重调度行为与配置策略保持一致。2)为上述修改的函数新增了多个单元测试用例,覆盖了“允许升级”功能关闭、主节点故障、进程级及Pod级重调度等复杂场景,以增强逻辑验证和测试覆盖率。3)在调度插件中扩展了对`TpBlock`注解键的支持,使插件能够识别该注解并将其纳入PodGroup的元数据,以支持更细粒度的调度策略或资源管理。 ## 修改方案描述 修改方案包括三部分核心内容:1)在`skipThisTask`函数中增加前置判断,通过调用`allowUpgradePodRescheduling()`方法获取配置状态,当系统禁止Pod升级重调度时,仅允许删除标记为故障的任务,从而精确控制删除范围。2)在测试文件`job_a5_test.go`中新增了多个测试用例构建函数,模拟不同业务场景下的`FaultJob`与`FaultTask`状态,验证`skipThisTask`函数在各种边界条件下的返回值是否符合预期。3)在调度插件的`annotationKeysForPodGroup`切片常量中新增`util.TpBlockAnnoKey`,使得Pod携带的`TpBlock`注解能够被提取并传播给PodGroup,供调度决策使用。 ## 开发自检 - [x] 规范:是否完成开发自验 - [x] 规范:是否涉及资料改动,并已完成修改 - [x] 规范:新增代码DT用例覆盖 - [x] 规范:是否闭环AI工具检视意见 - [x] 安全:是否涉及对外接口/参数/环境变量改动,并同步修改资料 - [x] 安全:是否新增对外接口/参数,并进行校验 See merge request: Ascend/mind-cluster!2490
2 parents cec10b3 + c27f48d commit 710e572

3 files changed

Lines changed: 130 additions & 2 deletions

File tree

component/ascend-for-volcano/internal/rescheduling/job_a5.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,10 @@ func (fJob *FaultJob) forceDeletePodsFor910A5(schedulerJob *plugin.SchedulerJob,
214214
}
215215

216216
func (fJob *FaultJob) skipThisTask(dpi *deletePodInfo, fTask FaultTask, schedulerJob *plugin.SchedulerJob) bool {
217+
// if upgrade is not allowed, only the fault task can be deleted
218+
if !fJob.allowUpgradePodRescheduling() {
219+
return !fTask.IsFaultTask
220+
}
217221
// when master pod fault or not pod rescheduling or fault pod, delete pod
218222
if fJob.IsMasterFault {
219223
return false

component/ascend-for-volcano/internal/rescheduling/job_a5_test.go

Lines changed: 125 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,12 @@ Package rescheduling is using for HuaWei Ascend pin fault rescheduling.
2020
package rescheduling
2121

2222
import (
23-
"github.com/agiledragon/gomonkey/v2"
24-
"k8s.io/client-go/kubernetes"
2523
"reflect"
2624
"strconv"
2725
"testing"
26+
27+
"github.com/agiledragon/gomonkey/v2"
28+
"k8s.io/client-go/kubernetes"
2829
"volcano.sh/volcano/pkg/scheduler/api"
2930
"volcano.sh/volcano/pkg/scheduler/framework"
3031
"volcano.sh/volcano/pkg/scheduler/plugins/ascend-volcano-plugin/common/util"
@@ -666,11 +667,133 @@ func buildSkipThisTaskTestCase3() skipThisTaskTestCase {
666667
}
667668
}
668669

670+
func buildSkipThisTaskTestCase4() skipThisTaskTestCase {
671+
return skipThisTaskTestCase{
672+
name: "04-SkipThisTask allow-upgrade-false fault-task",
673+
fJob: &FaultJob{
674+
ReScheduleLimit: util.ReschedulingUpperLimitPod, // allowUpgradePodRescheduling() returns false
675+
},
676+
cacheFuncBefore: func() {},
677+
cacheFuncAfter: func() {},
678+
fTask: FaultTask{
679+
IsFaultTask: true,
680+
},
681+
dpi: &deletePodInfo{},
682+
schedulerJob: &plugin.SchedulerJob{
683+
SchedulerJobAttr: util.SchedulerJobAttr{
684+
ComJob: util.ComJob{Label: map[string]string{}},
685+
},
686+
},
687+
want: false, // Should not skip fault task when allowUpgrade is false
688+
}
689+
}
690+
691+
func buildSkipThisTaskTestCase5() skipThisTaskTestCase {
692+
return skipThisTaskTestCase{
693+
name: "05-SkipThisTask allow-upgrade-false non-fault-task",
694+
fJob: &FaultJob{
695+
ReScheduleLimit: util.ReschedulingUpperLimitPod, // allowUpgradePodRescheduling() returns false
696+
},
697+
cacheFuncBefore: func() {},
698+
cacheFuncAfter: func() {},
699+
fTask: FaultTask{
700+
IsFaultTask: false,
701+
},
702+
dpi: &deletePodInfo{},
703+
schedulerJob: &plugin.SchedulerJob{
704+
SchedulerJobAttr: util.SchedulerJobAttr{
705+
ComJob: util.ComJob{Label: map[string]string{}},
706+
},
707+
},
708+
want: true, // Should skip non-fault task when allowUpgrade is false
709+
}
710+
}
711+
712+
func buildSkipThisTaskTestCase6() skipThisTaskTestCase {
713+
return skipThisTaskTestCase{
714+
name: "06-SkipThisTask is-master-fault",
715+
fJob: &FaultJob{
716+
ReScheduleLimit: "", // allowUpgradePodRescheduling() returns true
717+
FaultJobA5Field: FaultJobA5Field{
718+
IsMasterFault: true,
719+
},
720+
},
721+
cacheFuncBefore: func() {},
722+
cacheFuncAfter: func() {},
723+
fTask: FaultTask{
724+
IsFaultTask: false,
725+
},
726+
dpi: &deletePodInfo{},
727+
schedulerJob: &plugin.SchedulerJob{
728+
SchedulerJobAttr: util.SchedulerJobAttr{
729+
ComJob: util.ComJob{Label: map[string]string{}},
730+
},
731+
},
732+
want: false, // Should not skip when IsMasterFault is true
733+
}
734+
}
735+
736+
func buildSkipThisTaskTestCase7() skipThisTaskTestCase {
737+
return skipThisTaskTestCase{
738+
name: "07-SkipThisTask process-rescheduling-skip",
739+
fJob: &FaultJob{
740+
ReScheduleLimit: "", // allowUpgradePodRescheduling() returns true
741+
PendingSessionNum: tpPendingTimes - 1,
742+
FaultTasks: []FaultTask{{IsFaultTask: true, NodeRankIndex: "0"}},
743+
},
744+
cacheFuncBefore: func() {},
745+
cacheFuncAfter: func() {},
746+
fTask: FaultTask{
747+
IsFaultTask: false,
748+
NodeRankIndex: "1",
749+
},
750+
dpi: &deletePodInfo{},
751+
schedulerJob: &plugin.SchedulerJob{
752+
SchedulerJobAttr: util.SchedulerJobAttr{
753+
ComJob: util.ComJob{Label: map[string]string{util.ProcessRecoverEnable: util.EnableFunc}},
754+
},
755+
},
756+
want: true, // Should skip when process rescheduling is in first stage
757+
}
758+
}
759+
760+
func buildSkipThisTaskTestCase8() skipThisTaskTestCase {
761+
return skipThisTaskTestCase{
762+
name: "08-SkipThisTask pod-rescheduling-skip",
763+
fJob: &FaultJob{
764+
ReScheduleLimit: "", // allowUpgradePodRescheduling() returns true
765+
PendingSessionNum: pendingTimes, // Set to a value >= spPendingTimes
766+
FaultTasks: []FaultTask{{IsFaultTask: true, NodeName: "test-node"}},
767+
},
768+
cacheFuncBefore: func() {},
769+
cacheFuncAfter: func() {},
770+
fTask: FaultTask{
771+
IsFaultTask: false,
772+
NodeName: "test-node", // Same node as fault task
773+
},
774+
dpi: &deletePodInfo{
775+
isSuperPod: true,
776+
ids: []string{"test-id"},
777+
},
778+
schedulerJob: &plugin.SchedulerJob{
779+
SchedulerJobAttr: util.SchedulerJobAttr{
780+
ComJob: util.ComJob{Label: map[string]string{util.SinglePodTag: util.EnableFunc}},
781+
},
782+
},
783+
want: false, // Should not skip when pod rescheduling
784+
}
785+
}
786+
669787
func buildSkipThisTaskTestCases() []skipThisTaskTestCase {
670788
return []skipThisTaskTestCase{
671789
buildSkipThisTaskTestCase1(),
672790
buildSkipThisTaskTestCase2(),
673791
buildSkipThisTaskTestCase3(),
792+
buildSkipThisTaskTestCase4(),
793+
buildSkipThisTaskTestCase5(),
794+
buildSkipThisTaskTestCase6(),
795+
buildSkipThisTaskTestCase7(),
796+
buildSkipThisTaskTestCase8(),
674797
}
675798
}
676799

component/ascend-for-volcano/plugin/type.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ var (
9898
// add annotation from pod, if new anno key is needed add by pod, add key in this slice
9999
annotationKeysForPodGroup = []string{
100100
util.SuperPodAnnoKey,
101+
util.TpBlockAnnoKey,
101102
util.SchedulePolicyAnnoKey,
102103
util.SuperPodFitAnnoKey,
103104
util.MinAvailableKey,

0 commit comments

Comments
 (0)