mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-25 20:53:33 +00:00
Update the PreFilterExtensions interface to use PodInfo
This commit is contained in:
parent
c37905c06c
commit
d4418c1402
@ -246,10 +246,10 @@ type QueueSortPlugin interface {
|
|||||||
type PreFilterExtensions interface {
|
type PreFilterExtensions interface {
|
||||||
// AddPod is called by the framework while trying to evaluate the impact
|
// AddPod is called by the framework while trying to evaluate the impact
|
||||||
// of adding podToAdd to the node while scheduling podToSchedule.
|
// of adding podToAdd to the node while scheduling podToSchedule.
|
||||||
AddPod(ctx context.Context, state *CycleState, podToSchedule *v1.Pod, podToAdd *v1.Pod, nodeInfo *NodeInfo) *Status
|
AddPod(ctx context.Context, state *CycleState, podToSchedule *v1.Pod, podInfoToAdd *PodInfo, nodeInfo *NodeInfo) *Status
|
||||||
// RemovePod is called by the framework while trying to evaluate the impact
|
// RemovePod is called by the framework while trying to evaluate the impact
|
||||||
// of removing podToRemove from the node while scheduling podToSchedule.
|
// of removing podToRemove from the node while scheduling podToSchedule.
|
||||||
RemovePod(ctx context.Context, state *CycleState, podToSchedule *v1.Pod, podToRemove *v1.Pod, nodeInfo *NodeInfo) *Status
|
RemovePod(ctx context.Context, state *CycleState, podToSchedule *v1.Pod, podInfoToRemove *PodInfo, nodeInfo *NodeInfo) *Status
|
||||||
}
|
}
|
||||||
|
|
||||||
// PreFilterPlugin is an interface that must be implemented by "PreFilter" plugins.
|
// PreFilterPlugin is an interface that must be implemented by "PreFilter" plugins.
|
||||||
@ -438,12 +438,12 @@ type Framework interface {
|
|||||||
// RunPreFilterExtensionAddPod calls the AddPod interface for the set of configured
|
// RunPreFilterExtensionAddPod calls the AddPod interface for the set of configured
|
||||||
// PreFilter plugins. It returns directly if any of the plugins return any
|
// PreFilter plugins. It returns directly if any of the plugins return any
|
||||||
// status other than Success.
|
// status other than Success.
|
||||||
RunPreFilterExtensionAddPod(ctx context.Context, state *CycleState, podToSchedule *v1.Pod, podToAdd *v1.Pod, nodeInfo *NodeInfo) *Status
|
RunPreFilterExtensionAddPod(ctx context.Context, state *CycleState, podToSchedule *v1.Pod, podInfoToAdd *PodInfo, nodeInfo *NodeInfo) *Status
|
||||||
|
|
||||||
// RunPreFilterExtensionRemovePod calls the RemovePod interface for the set of configured
|
// RunPreFilterExtensionRemovePod calls the RemovePod interface for the set of configured
|
||||||
// PreFilter plugins. It returns directly if any of the plugins return any
|
// PreFilter plugins. It returns directly if any of the plugins return any
|
||||||
// status other than Success.
|
// status other than Success.
|
||||||
RunPreFilterExtensionRemovePod(ctx context.Context, state *CycleState, podToSchedule *v1.Pod, podToAdd *v1.Pod, nodeInfo *NodeInfo) *Status
|
RunPreFilterExtensionRemovePod(ctx context.Context, state *CycleState, podToSchedule *v1.Pod, podInfoToRemove *PodInfo, nodeInfo *NodeInfo) *Status
|
||||||
|
|
||||||
// RunPreScorePlugins runs the set of configured PreScore plugins. If any
|
// RunPreScorePlugins runs the set of configured PreScore plugins. If any
|
||||||
// of these plugins returns any status other than "Success", the given pod is rejected.
|
// of these plugins returns any status other than "Success", the given pod is rejected.
|
||||||
@ -585,7 +585,7 @@ type PluginsRunner interface {
|
|||||||
// RunFilterPlugins runs the set of configured filter plugins for pod on the given node.
|
// RunFilterPlugins runs the set of configured filter plugins for pod on the given node.
|
||||||
RunFilterPlugins(context.Context, *CycleState, *v1.Pod, *NodeInfo) PluginToStatus
|
RunFilterPlugins(context.Context, *CycleState, *v1.Pod, *NodeInfo) PluginToStatus
|
||||||
// RunPreFilterExtensionAddPod calls the AddPod interface for the set of configured PreFilter plugins.
|
// RunPreFilterExtensionAddPod calls the AddPod interface for the set of configured PreFilter plugins.
|
||||||
RunPreFilterExtensionAddPod(ctx context.Context, state *CycleState, podToSchedule *v1.Pod, podToAdd *v1.Pod, nodeInfo *NodeInfo) *Status
|
RunPreFilterExtensionAddPod(ctx context.Context, state *CycleState, podToSchedule *v1.Pod, podInfoToAdd *PodInfo, nodeInfo *NodeInfo) *Status
|
||||||
// RunPreFilterExtensionRemovePod calls the RemovePod interface for the set of configured PreFilter plugins.
|
// RunPreFilterExtensionRemovePod calls the RemovePod interface for the set of configured PreFilter plugins.
|
||||||
RunPreFilterExtensionRemovePod(ctx context.Context, state *CycleState, podToSchedule *v1.Pod, podToRemove *v1.Pod, nodeInfo *NodeInfo) *Status
|
RunPreFilterExtensionRemovePod(ctx context.Context, state *CycleState, podToSchedule *v1.Pod, podInfoToRemove *PodInfo, nodeInfo *NodeInfo) *Status
|
||||||
}
|
}
|
||||||
|
@ -603,15 +603,16 @@ func selectVictimsOnNode(
|
|||||||
if err := nodeInfo.RemovePod(rp); err != nil {
|
if err := nodeInfo.RemovePod(rp); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
status := ph.RunPreFilterExtensionRemovePod(ctx, state, pod, rp, nodeInfo)
|
status := ph.RunPreFilterExtensionRemovePod(ctx, state, pod, framework.NewPodInfo(rp), nodeInfo)
|
||||||
if !status.IsSuccess() {
|
if !status.IsSuccess() {
|
||||||
return status.AsError()
|
return status.AsError()
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
addPod := func(ap *v1.Pod) error {
|
addPod := func(ap *v1.Pod) error {
|
||||||
nodeInfo.AddPod(ap)
|
podInfoToAdd := framework.NewPodInfo(ap)
|
||||||
status := ph.RunPreFilterExtensionAddPod(ctx, state, pod, ap, nodeInfo)
|
nodeInfo.AddPodInfo(podInfoToAdd)
|
||||||
|
status := ph.RunPreFilterExtensionAddPod(ctx, state, pod, podInfoToAdd, nodeInfo)
|
||||||
if !status.IsSuccess() {
|
if !status.IsSuccess() {
|
||||||
return status.AsError()
|
return status.AsError()
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,7 @@ const (
|
|||||||
// ErrReasonExistingAntiAffinityRulesNotMatch is used for ExistingPodsAntiAffinityRulesNotMatch predicate error.
|
// ErrReasonExistingAntiAffinityRulesNotMatch is used for ExistingPodsAntiAffinityRulesNotMatch predicate error.
|
||||||
ErrReasonExistingAntiAffinityRulesNotMatch = "node(s) didn't satisfy existing pods anti-affinity rules"
|
ErrReasonExistingAntiAffinityRulesNotMatch = "node(s) didn't satisfy existing pods anti-affinity rules"
|
||||||
// ErrReasonAffinityNotMatch is used for MatchInterPodAffinity predicate error.
|
// ErrReasonAffinityNotMatch is used for MatchInterPodAffinity predicate error.
|
||||||
ErrReasonAffinityNotMatch = "node(s) didn't match pod affinity/anti-affinity"
|
ErrReasonAffinityNotMatch = "node(s) didn't match pod affinity/anti-affinity rules"
|
||||||
// ErrReasonAffinityRulesNotMatch is used for PodAffinityRulesNotMatch predicate error.
|
// ErrReasonAffinityRulesNotMatch is used for PodAffinityRulesNotMatch predicate error.
|
||||||
ErrReasonAffinityRulesNotMatch = "node(s) didn't match pod affinity rules"
|
ErrReasonAffinityRulesNotMatch = "node(s) didn't match pod affinity rules"
|
||||||
// ErrReasonAntiAffinityRulesNotMatch is used for PodAntiAffinityRulesNotMatch predicate error.
|
// ErrReasonAntiAffinityRulesNotMatch is used for PodAntiAffinityRulesNotMatch predicate error.
|
||||||
@ -71,22 +71,18 @@ func (s *preFilterState) Clone() framework.StateData {
|
|||||||
return ©
|
return ©
|
||||||
}
|
}
|
||||||
|
|
||||||
// updateWithPod updates the preFilterState counters with the (anti)affinity matches for the given pod.
|
// updateWithPod updates the preFilterState counters with the (anti)affinity matches for the given podInfo.
|
||||||
func (s *preFilterState) updateWithPod(updatedPod *v1.Pod, node *v1.Node, multiplier int64) error {
|
func (s *preFilterState) updateWithPod(updatedPodInfo *framework.PodInfo, node *v1.Node, multiplier int64) {
|
||||||
if s == nil {
|
if s == nil {
|
||||||
return nil
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update matching existing anti-affinity terms.
|
// Update matching existing anti-affinity terms.
|
||||||
// TODO(#91058): AddPod/RemovePod should pass a *framework.PodInfo type instead of *v1.Pod.
|
|
||||||
updatedPodInfo := framework.NewPodInfo(updatedPod)
|
|
||||||
s.topologyToMatchedExistingAntiAffinityTerms.updateWithAntiAffinityTerms(s.podInfo.Pod, node, updatedPodInfo.RequiredAntiAffinityTerms, multiplier)
|
s.topologyToMatchedExistingAntiAffinityTerms.updateWithAntiAffinityTerms(s.podInfo.Pod, node, updatedPodInfo.RequiredAntiAffinityTerms, multiplier)
|
||||||
|
|
||||||
// Update matching incoming pod (anti)affinity terms.
|
// Update matching incoming pod (anti)affinity terms.
|
||||||
s.topologyToMatchedAffinityTerms.updateWithAffinityTerms(updatedPod, node, s.podInfo.RequiredAffinityTerms, multiplier)
|
s.topologyToMatchedAffinityTerms.updateWithAffinityTerms(updatedPodInfo.Pod, node, s.podInfo.RequiredAffinityTerms, multiplier)
|
||||||
s.topologyToMatchedAntiAffinityTerms.updateWithAntiAffinityTerms(updatedPod, node, s.podInfo.RequiredAntiAffinityTerms, multiplier)
|
s.topologyToMatchedAntiAffinityTerms.updateWithAntiAffinityTerms(updatedPodInfo.Pod, node, s.podInfo.RequiredAntiAffinityTerms, multiplier)
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(Huang-Wei): It might be possible to use "make(map[topologyPair]*int64)" so that
|
// TODO(Huang-Wei): It might be possible to use "make(map[topologyPair]*int64)" so that
|
||||||
@ -279,22 +275,22 @@ func (pl *InterPodAffinity) PreFilterExtensions() framework.PreFilterExtensions
|
|||||||
}
|
}
|
||||||
|
|
||||||
// AddPod from pre-computed data in cycleState.
|
// AddPod from pre-computed data in cycleState.
|
||||||
func (pl *InterPodAffinity) AddPod(ctx context.Context, cycleState *framework.CycleState, podToSchedule *v1.Pod, podToAdd *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status {
|
func (pl *InterPodAffinity) AddPod(ctx context.Context, cycleState *framework.CycleState, podToSchedule *v1.Pod, podInfoToAdd *framework.PodInfo, nodeInfo *framework.NodeInfo) *framework.Status {
|
||||||
state, err := getPreFilterState(cycleState)
|
state, err := getPreFilterState(cycleState)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return framework.NewStatus(framework.Error, err.Error())
|
return framework.NewStatus(framework.Error, err.Error())
|
||||||
}
|
}
|
||||||
state.updateWithPod(podToAdd, nodeInfo.Node(), 1)
|
state.updateWithPod(podInfoToAdd, nodeInfo.Node(), 1)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemovePod from pre-computed data in cycleState.
|
// RemovePod from pre-computed data in cycleState.
|
||||||
func (pl *InterPodAffinity) RemovePod(ctx context.Context, cycleState *framework.CycleState, podToSchedule *v1.Pod, podToRemove *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status {
|
func (pl *InterPodAffinity) RemovePod(ctx context.Context, cycleState *framework.CycleState, podToSchedule *v1.Pod, podInfoToRemove *framework.PodInfo, nodeInfo *framework.NodeInfo) *framework.Status {
|
||||||
state, err := getPreFilterState(cycleState)
|
state, err := getPreFilterState(cycleState)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return framework.NewStatus(framework.Error, err.Error())
|
return framework.NewStatus(framework.Error, err.Error())
|
||||||
}
|
}
|
||||||
state.updateWithPod(podToRemove, nodeInfo.Node(), -1)
|
state.updateWithPod(podInfoToRemove, nodeInfo.Node(), -1)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2061,7 +2061,7 @@ func TestPreFilterStateAddRemovePod(t *testing.T) {
|
|||||||
|
|
||||||
// Add test.addedPod to state1 and verify it is equal to allPodsState.
|
// Add test.addedPod to state1 and verify it is equal to allPodsState.
|
||||||
nodeInfo := mustGetNodeInfo(t, snapshot, test.addedPod.Spec.NodeName)
|
nodeInfo := mustGetNodeInfo(t, snapshot, test.addedPod.Spec.NodeName)
|
||||||
if err := ipa.AddPod(context.Background(), cycleState, test.pendingPod, test.addedPod, nodeInfo); err != nil {
|
if err := ipa.AddPod(context.Background(), cycleState, test.pendingPod, framework.NewPodInfo(test.addedPod), nodeInfo); err != nil {
|
||||||
t.Errorf("error adding pod to meta: %v", err)
|
t.Errorf("error adding pod to meta: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2083,7 +2083,7 @@ func TestPreFilterStateAddRemovePod(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Remove the added pod pod and make sure it is equal to the original state.
|
// Remove the added pod pod and make sure it is equal to the original state.
|
||||||
if err := ipa.RemovePod(context.Background(), cycleState, test.pendingPod, test.addedPod, nodeInfo); err != nil {
|
if err := ipa.RemovePod(context.Background(), cycleState, test.pendingPod, framework.NewPodInfo(test.addedPod), nodeInfo); err != nil {
|
||||||
t.Errorf("error removing pod from meta: %v", err)
|
t.Errorf("error removing pod from meta: %v", err)
|
||||||
}
|
}
|
||||||
if !reflect.DeepEqual(originalState, state) {
|
if !reflect.DeepEqual(originalState, state) {
|
||||||
|
@ -158,24 +158,24 @@ func (pl *PodTopologySpread) PreFilterExtensions() framework.PreFilterExtensions
|
|||||||
}
|
}
|
||||||
|
|
||||||
// AddPod from pre-computed data in cycleState.
|
// AddPod from pre-computed data in cycleState.
|
||||||
func (pl *PodTopologySpread) AddPod(ctx context.Context, cycleState *framework.CycleState, podToSchedule *v1.Pod, podToAdd *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status {
|
func (pl *PodTopologySpread) AddPod(ctx context.Context, cycleState *framework.CycleState, podToSchedule *v1.Pod, podInfoToAdd *framework.PodInfo, nodeInfo *framework.NodeInfo) *framework.Status {
|
||||||
s, err := getPreFilterState(cycleState)
|
s, err := getPreFilterState(cycleState)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return framework.AsStatus(err)
|
return framework.AsStatus(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
s.updateWithPod(podToAdd, podToSchedule, nodeInfo.Node(), 1)
|
s.updateWithPod(podInfoToAdd.Pod, podToSchedule, nodeInfo.Node(), 1)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemovePod from pre-computed data in cycleState.
|
// RemovePod from pre-computed data in cycleState.
|
||||||
func (pl *PodTopologySpread) RemovePod(ctx context.Context, cycleState *framework.CycleState, podToSchedule *v1.Pod, podToRemove *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status {
|
func (pl *PodTopologySpread) RemovePod(ctx context.Context, cycleState *framework.CycleState, podToSchedule *v1.Pod, podInfoToRemove *framework.PodInfo, nodeInfo *framework.NodeInfo) *framework.Status {
|
||||||
s, err := getPreFilterState(cycleState)
|
s, err := getPreFilterState(cycleState)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return framework.AsStatus(err)
|
return framework.AsStatus(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
s.updateWithPod(podToRemove, podToSchedule, nodeInfo.Node(), -1)
|
s.updateWithPod(podInfoToRemove.Pod, podToSchedule, nodeInfo.Node(), -1)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -838,7 +838,7 @@ func TestPreFilterStateAddPod(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
if s := pl.AddPod(ctx, cs, tt.preemptor, tt.addedPod, nodeInfo); !s.IsSuccess() {
|
if s := pl.AddPod(ctx, cs, tt.preemptor, framework.NewPodInfo(tt.addedPod), nodeInfo); !s.IsSuccess() {
|
||||||
t.Fatal(s.AsError())
|
t.Fatal(s.AsError())
|
||||||
}
|
}
|
||||||
state, err := getPreFilterState(cs)
|
state, err := getPreFilterState(cs)
|
||||||
@ -1050,7 +1050,7 @@ func TestPreFilterStateRemovePod(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
if s := pl.RemovePod(ctx, cs, tt.preemptor, deletedPod, nodeInfo); !s.IsSuccess() {
|
if s := pl.RemovePod(ctx, cs, tt.preemptor, framework.NewPodInfo(deletedPod), nodeInfo); !s.IsSuccess() {
|
||||||
t.Fatal(s.AsError())
|
t.Fatal(s.AsError())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -148,7 +148,7 @@ func (pl *ServiceAffinity) PreFilterExtensions() framework.PreFilterExtensions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// AddPod from pre-computed data in cycleState.
|
// AddPod from pre-computed data in cycleState.
|
||||||
func (pl *ServiceAffinity) AddPod(ctx context.Context, cycleState *framework.CycleState, podToSchedule *v1.Pod, podToAdd *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status {
|
func (pl *ServiceAffinity) AddPod(ctx context.Context, cycleState *framework.CycleState, podToSchedule *v1.Pod, podInfoToAdd *framework.PodInfo, nodeInfo *framework.NodeInfo) *framework.Status {
|
||||||
s, err := getPreFilterState(cycleState)
|
s, err := getPreFilterState(cycleState)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return framework.AsStatus(err)
|
return framework.AsStatus(err)
|
||||||
@ -156,32 +156,32 @@ func (pl *ServiceAffinity) AddPod(ctx context.Context, cycleState *framework.Cyc
|
|||||||
|
|
||||||
// If addedPod is in the same namespace as the pod, update the list
|
// If addedPod is in the same namespace as the pod, update the list
|
||||||
// of matching pods if applicable.
|
// of matching pods if applicable.
|
||||||
if podToAdd.Namespace != podToSchedule.Namespace {
|
if podInfoToAdd.Pod.Namespace != podToSchedule.Namespace {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
selector := createSelectorFromLabels(podToSchedule.Labels)
|
selector := createSelectorFromLabels(podToSchedule.Labels)
|
||||||
if selector.Matches(labels.Set(podToAdd.Labels)) {
|
if selector.Matches(labels.Set(podInfoToAdd.Pod.Labels)) {
|
||||||
s.matchingPodList = append(s.matchingPodList, podToAdd)
|
s.matchingPodList = append(s.matchingPodList, podInfoToAdd.Pod)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemovePod from pre-computed data in cycleState.
|
// RemovePod from pre-computed data in cycleState.
|
||||||
func (pl *ServiceAffinity) RemovePod(ctx context.Context, cycleState *framework.CycleState, podToSchedule *v1.Pod, podToRemove *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status {
|
func (pl *ServiceAffinity) RemovePod(ctx context.Context, cycleState *framework.CycleState, podToSchedule *v1.Pod, podInfoToRemove *framework.PodInfo, nodeInfo *framework.NodeInfo) *framework.Status {
|
||||||
s, err := getPreFilterState(cycleState)
|
s, err := getPreFilterState(cycleState)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return framework.AsStatus(err)
|
return framework.AsStatus(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(s.matchingPodList) == 0 ||
|
if len(s.matchingPodList) == 0 ||
|
||||||
podToRemove.Namespace != s.matchingPodList[0].Namespace {
|
podInfoToRemove.Pod.Namespace != s.matchingPodList[0].Namespace {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, pod := range s.matchingPodList {
|
for i, pod := range s.matchingPodList {
|
||||||
if pod.Name == podToRemove.Name && pod.Namespace == podToRemove.Namespace {
|
if pod.Name == podInfoToRemove.Pod.Name && pod.Namespace == podInfoToRemove.Pod.Namespace {
|
||||||
s.matchingPodList = append(s.matchingPodList[:i], s.matchingPodList[i+1:]...)
|
s.matchingPodList = append(s.matchingPodList[:i], s.matchingPodList[i+1:]...)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
@ -539,7 +539,8 @@ func TestPreFilterStateAddRemovePod(t *testing.T) {
|
|||||||
|
|
||||||
// Add test.addedPod to state1 and verify it is equal to allPodsState.
|
// Add test.addedPod to state1 and verify it is equal to allPodsState.
|
||||||
nodeInfo := mustGetNodeInfo(t, snapshot, test.addedPod.Spec.NodeName)
|
nodeInfo := mustGetNodeInfo(t, snapshot, test.addedPod.Spec.NodeName)
|
||||||
if err := ipa.AddPod(context.Background(), state, test.pendingPod, test.addedPod, nodeInfo); err != nil {
|
addedPodInfo := framework.NewPodInfo(test.addedPod)
|
||||||
|
if err := ipa.AddPod(context.Background(), state, test.pendingPod, addedPodInfo, nodeInfo); err != nil {
|
||||||
t.Errorf("error adding pod to preFilterState: %v", err)
|
t.Errorf("error adding pod to preFilterState: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -547,8 +548,8 @@ func TestPreFilterStateAddRemovePod(t *testing.T) {
|
|||||||
t.Errorf("State is not equal, got: %v, want: %v", plState, plStateAllPods)
|
t.Errorf("State is not equal, got: %v, want: %v", plState, plStateAllPods)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove the added pod pod and make sure it is equal to the original state.
|
// Remove the added pod and make sure it is equal to the original state.
|
||||||
if err := ipa.RemovePod(context.Background(), state, test.pendingPod, test.addedPod, nodeInfo); err != nil {
|
if err := ipa.RemovePod(context.Background(), state, test.pendingPod, addedPodInfo, nodeInfo); err != nil {
|
||||||
t.Errorf("error removing pod from preFilterState: %v", err)
|
t.Errorf("error removing pod from preFilterState: %v", err)
|
||||||
}
|
}
|
||||||
if !reflect.DeepEqual(sortState(plStateOriginal), sortState(plState)) {
|
if !reflect.DeepEqual(sortState(plStateOriginal), sortState(plState)) {
|
||||||
|
@ -458,14 +458,14 @@ func (f *frameworkImpl) RunPreFilterExtensionAddPod(
|
|||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
state *framework.CycleState,
|
state *framework.CycleState,
|
||||||
podToSchedule *v1.Pod,
|
podToSchedule *v1.Pod,
|
||||||
podToAdd *v1.Pod,
|
podInfoToAdd *framework.PodInfo,
|
||||||
nodeInfo *framework.NodeInfo,
|
nodeInfo *framework.NodeInfo,
|
||||||
) (status *framework.Status) {
|
) (status *framework.Status) {
|
||||||
for _, pl := range f.preFilterPlugins {
|
for _, pl := range f.preFilterPlugins {
|
||||||
if pl.PreFilterExtensions() == nil {
|
if pl.PreFilterExtensions() == nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
status = f.runPreFilterExtensionAddPod(ctx, pl, state, podToSchedule, podToAdd, nodeInfo)
|
status = f.runPreFilterExtensionAddPod(ctx, pl, state, podToSchedule, podInfoToAdd, nodeInfo)
|
||||||
if !status.IsSuccess() {
|
if !status.IsSuccess() {
|
||||||
err := status.AsError()
|
err := status.AsError()
|
||||||
klog.ErrorS(err, "Failed running AddPod on PreFilter plugin", "plugin", pl.Name(), "pod", klog.KObj(podToSchedule))
|
klog.ErrorS(err, "Failed running AddPod on PreFilter plugin", "plugin", pl.Name(), "pod", klog.KObj(podToSchedule))
|
||||||
@ -476,12 +476,12 @@ func (f *frameworkImpl) RunPreFilterExtensionAddPod(
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *frameworkImpl) runPreFilterExtensionAddPod(ctx context.Context, pl framework.PreFilterPlugin, state *framework.CycleState, podToSchedule *v1.Pod, podToAdd *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status {
|
func (f *frameworkImpl) runPreFilterExtensionAddPod(ctx context.Context, pl framework.PreFilterPlugin, state *framework.CycleState, podToSchedule *v1.Pod, podInfoToAdd *framework.PodInfo, nodeInfo *framework.NodeInfo) *framework.Status {
|
||||||
if !state.ShouldRecordPluginMetrics() {
|
if !state.ShouldRecordPluginMetrics() {
|
||||||
return pl.PreFilterExtensions().AddPod(ctx, state, podToSchedule, podToAdd, nodeInfo)
|
return pl.PreFilterExtensions().AddPod(ctx, state, podToSchedule, podInfoToAdd, nodeInfo)
|
||||||
}
|
}
|
||||||
startTime := time.Now()
|
startTime := time.Now()
|
||||||
status := pl.PreFilterExtensions().AddPod(ctx, state, podToSchedule, podToAdd, nodeInfo)
|
status := pl.PreFilterExtensions().AddPod(ctx, state, podToSchedule, podInfoToAdd, nodeInfo)
|
||||||
f.metricsRecorder.observePluginDurationAsync(preFilterExtensionAddPod, pl.Name(), status, metrics.SinceInSeconds(startTime))
|
f.metricsRecorder.observePluginDurationAsync(preFilterExtensionAddPod, pl.Name(), status, metrics.SinceInSeconds(startTime))
|
||||||
return status
|
return status
|
||||||
}
|
}
|
||||||
@ -493,14 +493,14 @@ func (f *frameworkImpl) RunPreFilterExtensionRemovePod(
|
|||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
state *framework.CycleState,
|
state *framework.CycleState,
|
||||||
podToSchedule *v1.Pod,
|
podToSchedule *v1.Pod,
|
||||||
podToRemove *v1.Pod,
|
podInfoToRemove *framework.PodInfo,
|
||||||
nodeInfo *framework.NodeInfo,
|
nodeInfo *framework.NodeInfo,
|
||||||
) (status *framework.Status) {
|
) (status *framework.Status) {
|
||||||
for _, pl := range f.preFilterPlugins {
|
for _, pl := range f.preFilterPlugins {
|
||||||
if pl.PreFilterExtensions() == nil {
|
if pl.PreFilterExtensions() == nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
status = f.runPreFilterExtensionRemovePod(ctx, pl, state, podToSchedule, podToRemove, nodeInfo)
|
status = f.runPreFilterExtensionRemovePod(ctx, pl, state, podToSchedule, podInfoToRemove, nodeInfo)
|
||||||
if !status.IsSuccess() {
|
if !status.IsSuccess() {
|
||||||
err := status.AsError()
|
err := status.AsError()
|
||||||
klog.ErrorS(err, "Failed running RemovePod on PreFilter plugin", "plugin", pl.Name(), "pod", klog.KObj(podToSchedule))
|
klog.ErrorS(err, "Failed running RemovePod on PreFilter plugin", "plugin", pl.Name(), "pod", klog.KObj(podToSchedule))
|
||||||
@ -511,12 +511,12 @@ func (f *frameworkImpl) RunPreFilterExtensionRemovePod(
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *frameworkImpl) runPreFilterExtensionRemovePod(ctx context.Context, pl framework.PreFilterPlugin, state *framework.CycleState, podToSchedule *v1.Pod, podToAdd *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status {
|
func (f *frameworkImpl) runPreFilterExtensionRemovePod(ctx context.Context, pl framework.PreFilterPlugin, state *framework.CycleState, podToSchedule *v1.Pod, podInfoToRemove *framework.PodInfo, nodeInfo *framework.NodeInfo) *framework.Status {
|
||||||
if !state.ShouldRecordPluginMetrics() {
|
if !state.ShouldRecordPluginMetrics() {
|
||||||
return pl.PreFilterExtensions().RemovePod(ctx, state, podToSchedule, podToAdd, nodeInfo)
|
return pl.PreFilterExtensions().RemovePod(ctx, state, podToSchedule, podInfoToRemove, nodeInfo)
|
||||||
}
|
}
|
||||||
startTime := time.Now()
|
startTime := time.Now()
|
||||||
status := pl.PreFilterExtensions().RemovePod(ctx, state, podToSchedule, podToAdd, nodeInfo)
|
status := pl.PreFilterExtensions().RemovePod(ctx, state, podToSchedule, podInfoToRemove, nodeInfo)
|
||||||
f.metricsRecorder.observePluginDurationAsync(preFilterExtensionRemovePod, pl.Name(), status, metrics.SinceInSeconds(startTime))
|
f.metricsRecorder.observePluginDurationAsync(preFilterExtensionRemovePod, pl.Name(), status, metrics.SinceInSeconds(startTime))
|
||||||
return status
|
return status
|
||||||
}
|
}
|
||||||
@ -668,8 +668,9 @@ func addNominatedPods(ctx context.Context, ph framework.PreemptHandle, pod *v1.P
|
|||||||
podsAdded := false
|
podsAdded := false
|
||||||
for _, p := range nominatedPods {
|
for _, p := range nominatedPods {
|
||||||
if corev1.PodPriority(p) >= corev1.PodPriority(pod) && p.UID != pod.UID {
|
if corev1.PodPriority(p) >= corev1.PodPriority(pod) && p.UID != pod.UID {
|
||||||
nodeInfoOut.AddPod(p)
|
podInfoToAdd := framework.NewPodInfo(p)
|
||||||
status := ph.RunPreFilterExtensionAddPod(ctx, stateOut, pod, p, nodeInfoOut)
|
nodeInfoOut.AddPodInfo(podInfoToAdd)
|
||||||
|
status := ph.RunPreFilterExtensionAddPod(ctx, stateOut, pod, podInfoToAdd, nodeInfoOut)
|
||||||
if !status.IsSuccess() {
|
if !status.IsSuccess() {
|
||||||
return false, state, nodeInfo, status.AsError()
|
return false, state, nodeInfo, status.AsError()
|
||||||
}
|
}
|
||||||
|
@ -141,10 +141,10 @@ type TestPlugin struct {
|
|||||||
inj injectedResult
|
inj injectedResult
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pl *TestPlugin) AddPod(ctx context.Context, state *framework.CycleState, podToSchedule *v1.Pod, podToAdd *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status {
|
func (pl *TestPlugin) AddPod(ctx context.Context, state *framework.CycleState, podToSchedule *v1.Pod, podInfoToAdd *framework.PodInfo, nodeInfo *framework.NodeInfo) *framework.Status {
|
||||||
return framework.NewStatus(framework.Code(pl.inj.PreFilterAddPodStatus), "injected status")
|
return framework.NewStatus(framework.Code(pl.inj.PreFilterAddPodStatus), "injected status")
|
||||||
}
|
}
|
||||||
func (pl *TestPlugin) RemovePod(ctx context.Context, state *framework.CycleState, podToSchedule *v1.Pod, podToRemove *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status {
|
func (pl *TestPlugin) RemovePod(ctx context.Context, state *framework.CycleState, podToSchedule *v1.Pod, podInfoToRemove *framework.PodInfo, nodeInfo *framework.NodeInfo) *framework.Status {
|
||||||
return framework.NewStatus(framework.Code(pl.inj.PreFilterRemovePodStatus), "injected status")
|
return framework.NewStatus(framework.Code(pl.inj.PreFilterRemovePodStatus), "injected status")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -241,13 +241,13 @@ func (pl *TestPreFilterWithExtensionsPlugin) PreFilter(ctx context.Context, stat
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (pl *TestPreFilterWithExtensionsPlugin) AddPod(ctx context.Context, state *framework.CycleState, podToSchedule *v1.Pod,
|
func (pl *TestPreFilterWithExtensionsPlugin) AddPod(ctx context.Context, state *framework.CycleState, podToSchedule *v1.Pod,
|
||||||
podToAdd *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status {
|
podInfoToAdd *framework.PodInfo, nodeInfo *framework.NodeInfo) *framework.Status {
|
||||||
pl.AddCalled++
|
pl.AddCalled++
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pl *TestPreFilterWithExtensionsPlugin) RemovePod(ctx context.Context, state *framework.CycleState, podToSchedule *v1.Pod,
|
func (pl *TestPreFilterWithExtensionsPlugin) RemovePod(ctx context.Context, state *framework.CycleState, podToSchedule *v1.Pod,
|
||||||
podToRemove *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status {
|
podInfoToRemove *framework.PodInfo, nodeInfo *framework.NodeInfo) *framework.Status {
|
||||||
pl.RemoveCalled++
|
pl.RemoveCalled++
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -104,13 +104,13 @@ func (fp *tokenFilter) PreFilter(ctx context.Context, state *framework.CycleStat
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (fp *tokenFilter) AddPod(ctx context.Context, state *framework.CycleState, podToSchedule *v1.Pod,
|
func (fp *tokenFilter) AddPod(ctx context.Context, state *framework.CycleState, podToSchedule *v1.Pod,
|
||||||
podToAdd *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status {
|
podInfoToAdd *framework.PodInfo, nodeInfo *framework.NodeInfo) *framework.Status {
|
||||||
fp.Tokens--
|
fp.Tokens--
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fp *tokenFilter) RemovePod(ctx context.Context, state *framework.CycleState, podToSchedule *v1.Pod,
|
func (fp *tokenFilter) RemovePod(ctx context.Context, state *framework.CycleState, podToSchedule *v1.Pod,
|
||||||
podToRemove *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status {
|
podInfoToRemove *framework.PodInfo, nodeInfo *framework.NodeInfo) *framework.Status {
|
||||||
fp.Tokens++
|
fp.Tokens++
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user