Skip to content

Commit cd3cb3c

Browse files
committed
koord-scheduler: support log filtering failure reasons as needed
Signed-off-by: wangjianyu <zmsjianyu@gmail.com>
1 parent 2a905d1 commit cd3cb3c

File tree

4 files changed

+53
-2
lines changed

4 files changed

+53
-2
lines changed

cmd/koord-scheduler/app/server.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,7 @@ func installProfilingHandler(pathRecorderMux *mux.PathRecorderMux, enableContent
273273
debugFlags := utilroutes.NewDebugFlags(pathRecorderMux)
274274
debugFlags.Install("v", utilroutes.StringFlagPutHandler(logs.GlogSetter))
275275
debugFlags.Install("s", utilroutes.StringFlagPutHandler(frameworkext.DebugScoresSetter))
276+
debugFlags.Install("f", utilroutes.StringFlagPutHandler(frameworkext.DebugFiltersSetter))
276277
}
277278

278279
// newMetricsHandler builds a metrics server from the config.

pkg/scheduler/frameworkext/debug_scores.go renamed to pkg/scheduler/frameworkext/debug.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,13 @@ import (
2929
)
3030

3131
var (
32-
debugTopNScores = 0
32+
debugTopNScores = 0
33+
debugFilterFailure = false
3334
)
3435

3536
func AddFlags(fs *pflag.FlagSet) {
3637
fs.IntVarP(&debugTopNScores, "debug-scores", "s", debugTopNScores, "logging topN nodes score and scores for each plugin after running the score extension, disable if set to 0")
38+
fs.BoolVarP(&debugFilterFailure, "debug-filters", "f", debugFilterFailure, "logging filter failures")
3739
}
3840

3941
// DebugScoresSetter updates debugTopNScores to specified value
@@ -46,6 +48,16 @@ func DebugScoresSetter(val string) (string, error) {
4648
return fmt.Sprintf("successfully set debugTopNScores to %s", val), nil
4749
}
4850

51+
// DebugFiltersSetter updates debugFilterFailure to specified value
52+
func DebugFiltersSetter(val string) (string, error) {
53+
filterFailure, err := strconv.ParseBool(val)
54+
if err != nil {
55+
return "", fmt.Errorf("failed set debugFilterFailure %s: %v", val, err)
56+
}
57+
debugFilterFailure = filterFailure
58+
return fmt.Sprintf("successfully set debugFilterFailure to %s", val), nil
59+
}
60+
4961
func debugScores(topN int, pod *corev1.Pod, pluginToNodeScores map[string]framework.NodeScoreList, nodes []*corev1.Node) prettytable.Writer {
5062
// Summarize all scores.
5163
result := make(framework.NodeScoreList, 0, len(nodes))

pkg/scheduler/frameworkext/debug_scores_test.go renamed to pkg/scheduler/frameworkext/debug_test.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,40 @@ func TestDebugScoresSetter(t *testing.T) {
5454
}
5555
}
5656

57+
func TestDebugFiltersSetter(t *testing.T) {
58+
tests := []struct {
59+
name string
60+
value string
61+
wantErr bool
62+
want bool
63+
}{
64+
{
65+
name: "valid bool",
66+
value: "true",
67+
wantErr: false,
68+
want: true,
69+
},
70+
{
71+
name: "invalid",
72+
value: "11.22",
73+
wantErr: true,
74+
want: false,
75+
},
76+
}
77+
for _, tt := range tests {
78+
t.Run(tt.name, func(t *testing.T) {
79+
_, err := DebugFiltersSetter(tt.value)
80+
if tt.wantErr && err == nil {
81+
t.Error("expected error but got nil")
82+
} else if !tt.wantErr && err != nil {
83+
t.Errorf("expected no error but got err: %v", err)
84+
}
85+
assert.Equal(t, tt.want, debugFilterFailure)
86+
debugFilterFailure = false
87+
})
88+
}
89+
}
90+
5791
func TestDebugScores(t *testing.T) {
5892
pluginToNodeScores := map[string]framework.NodeScoreList{
5993
"ImageLocality": {

pkg/scheduler/frameworkext/framework_extender.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,11 @@ func (ext *frameworkExtenderImpl) RunFilterPluginsWithNominatedPods(ctx context.
227227
nodeInfo = newNodeInfo
228228
}
229229
}
230-
return ext.Framework.RunFilterPluginsWithNominatedPods(ctx, cycleState, pod, nodeInfo)
230+
status := ext.Framework.RunFilterPluginsWithNominatedPods(ctx, cycleState, pod, nodeInfo)
231+
if !status.IsSuccess() && debugFilterFailure {
232+
klog.Infof("Failed to filter for Pod %q on Node %q, failedPlugin: %s, reason: %s", klog.KObj(pod), klog.KObj(nodeInfo.Node()), status.FailedPlugin(), status.Message())
233+
}
234+
return status
231235
}
232236

233237
func (ext *frameworkExtenderImpl) RunScorePlugins(ctx context.Context, state *framework.CycleState, pod *corev1.Pod, nodes []*corev1.Node) (framework.PluginToNodeScores, *framework.Status) {

0 commit comments

Comments
 (0)