From c8377ef7dbc261ed35dbd4c970df6e2411efa053 Mon Sep 17 00:00:00 2001 From: Aldo Culquicondor Date: Tue, 11 Feb 2020 13:10:01 -0500 Subject: [PATCH] Add BuildArgs to interpodaffinity plugin Signed-off-by: Aldo Culquicondor --- .../framework/plugins/interpodaffinity/BUILD | 2 ++ .../plugins/interpodaffinity/plugin.go | 30 +++++++++++-------- .../plugins/interpodaffinity/scoring.go | 4 +-- .../plugins/interpodaffinity/scoring_test.go | 7 +++-- 4 files changed, 26 insertions(+), 17 deletions(-) diff --git a/pkg/scheduler/framework/plugins/interpodaffinity/BUILD b/pkg/scheduler/framework/plugins/interpodaffinity/BUILD index 246596796e9..e9339eced84 100644 --- a/pkg/scheduler/framework/plugins/interpodaffinity/BUILD +++ b/pkg/scheduler/framework/plugins/interpodaffinity/BUILD @@ -22,6 +22,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", "//staging/src/k8s.io/client-go/util/workqueue:go_default_library", "//vendor/k8s.io/klog:go_default_library", + "//vendor/k8s.io/utils/pointer:go_default_library", ], ) @@ -39,6 +40,7 @@ go_test( "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//vendor/k8s.io/utils/pointer:go_default_library", ], ) diff --git a/pkg/scheduler/framework/plugins/interpodaffinity/plugin.go b/pkg/scheduler/framework/plugins/interpodaffinity/plugin.go index 1c9f5c34087..f9fd6ec1c29 100644 --- a/pkg/scheduler/framework/plugins/interpodaffinity/plugin.go +++ b/pkg/scheduler/framework/plugins/interpodaffinity/plugin.go @@ -24,6 +24,7 @@ import ( "k8s.io/apimachinery/pkg/util/validation/field" framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" schedulerlisters "k8s.io/kubernetes/pkg/scheduler/listers" + "k8s.io/utils/pointer" ) const ( @@ -52,8 +53,8 @@ var _ framework.ScorePlugin = &InterPodAffinity{} // InterPodAffinity is a plugin that checks inter pod affinity type InterPodAffinity struct { - sharedLister schedulerlisters.SharedLister - hardPodAffinityWeight int32 + Args + sharedLister schedulerlisters.SharedLister sync.Mutex } @@ -62,24 +63,27 @@ func (pl *InterPodAffinity) Name() string { return Name } +// BuildArgs returns the args that were used to build the plugin. +func (pl *InterPodAffinity) BuildArgs() interface{} { + return pl.Args +} + // New initializes a new plugin and returns it. func New(plArgs *runtime.Unknown, h framework.FrameworkHandle) (framework.Plugin, error) { if h.SnapshotSharedLister() == nil { return nil, fmt.Errorf("SnapshotSharedlister is nil") } - args := &Args{} - if err := framework.DecodeInto(plArgs, args); err != nil { - return nil, err - } - if err := validateArgs(args); err != nil { - return nil, err - } pl := &InterPodAffinity{ - sharedLister: h.SnapshotSharedLister(), - hardPodAffinityWeight: DefaultHardPodAffinityWeight, + sharedLister: h.SnapshotSharedLister(), } - if args.HardPodAffinityWeight != nil { - pl.hardPodAffinityWeight = *args.HardPodAffinityWeight + if err := framework.DecodeInto(plArgs, &pl.Args); err != nil { + return nil, err + } + if err := validateArgs(&pl.Args); err != nil { + return nil, err + } + if pl.HardPodAffinityWeight == nil { + pl.HardPodAffinityWeight = pointer.Int32Ptr(DefaultHardPodAffinityWeight) } return pl, nil } diff --git a/pkg/scheduler/framework/plugins/interpodaffinity/scoring.go b/pkg/scheduler/framework/plugins/interpodaffinity/scoring.go index cc07d49f6b5..fe80c1a3872 100644 --- a/pkg/scheduler/framework/plugins/interpodaffinity/scoring.go +++ b/pkg/scheduler/framework/plugins/interpodaffinity/scoring.go @@ -127,7 +127,7 @@ func (pl *InterPodAffinity) processExistingPod(state *preScoreState, existingPod // For every hard pod affinity term of , if matches the term, // increment for every node in the cluster with the same // value as that of 's node by the constant - if pl.hardPodAffinityWeight > 0 { + if *pl.HardPodAffinityWeight > 0 { terms := existingPodAffinity.PodAffinity.RequiredDuringSchedulingIgnoredDuringExecution // TODO: Uncomment this block when implement RequiredDuringSchedulingRequiredDuringExecution. //if len(existingPodAffinity.PodAffinity.RequiredDuringSchedulingRequiredDuringExecution) != 0 { @@ -135,7 +135,7 @@ func (pl *InterPodAffinity) processExistingPod(state *preScoreState, existingPod //} for i := range terms { term := &terms[i] - processedTerm, err := newWeightedAffinityTerm(existingPod, term, pl.hardPodAffinityWeight) + processedTerm, err := newWeightedAffinityTerm(existingPod, term, *pl.HardPodAffinityWeight) if err != nil { return err } diff --git a/pkg/scheduler/framework/plugins/interpodaffinity/scoring_test.go b/pkg/scheduler/framework/plugins/interpodaffinity/scoring_test.go index 6f4eb905fef..1faef9b01b2 100644 --- a/pkg/scheduler/framework/plugins/interpodaffinity/scoring_test.go +++ b/pkg/scheduler/framework/plugins/interpodaffinity/scoring_test.go @@ -27,6 +27,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" "k8s.io/kubernetes/pkg/scheduler/internal/cache" + "k8s.io/utils/pointer" ) func TestPreferredAffinity(t *testing.T) { @@ -519,8 +520,10 @@ func TestPreferredAffinity(t *testing.T) { state := framework.NewCycleState() snapshot := cache.NewSnapshot(test.pods, test.nodes) p := &InterPodAffinity{ - sharedLister: snapshot, - hardPodAffinityWeight: 1, + Args: Args{ + HardPodAffinityWeight: pointer.Int32Ptr(DefaultHardPodAffinityWeight), + }, + sharedLister: snapshot, } status := p.PreScore(context.Background(), state, test.pod, test.nodes)