mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-15 06:43:54 +00:00
Merge pull request #117194 from sanposhiho/revert-preenqueue
Revert "Optimization on running prePreEnqueuePlugins before adding pods into activeQ"
This commit is contained in:
commit
29c8fb678c
@ -8,6 +8,8 @@
|
|||||||
- [Node Binaries](#node-binaries)
|
- [Node Binaries](#node-binaries)
|
||||||
- [Container Images](#container-images)
|
- [Container Images](#container-images)
|
||||||
- [Changelog since v1.26.0](#changelog-since-v1260)
|
- [Changelog since v1.26.0](#changelog-since-v1260)
|
||||||
|
- [Known Issues](#known-issues)
|
||||||
|
- [The PreEnqueue extension point doesn't work in backoffQ](#the-preEnqueue-extension-point-doesnt-work-for-pods-going-to-activeq-through-backoffq)
|
||||||
- [Urgent Upgrade Notes](#urgent-upgrade-notes)
|
- [Urgent Upgrade Notes](#urgent-upgrade-notes)
|
||||||
- [(No, really, you MUST read this before you upgrade)](#no-really-you-must-read-this-before-you-upgrade)
|
- [(No, really, you MUST read this before you upgrade)](#no-really-you-must-read-this-before-you-upgrade)
|
||||||
- [Changes by Kind](#changes-by-kind)
|
- [Changes by Kind](#changes-by-kind)
|
||||||
@ -198,6 +200,15 @@ name | architectures
|
|||||||
|
|
||||||
## Changelog since v1.26.0
|
## Changelog since v1.26.0
|
||||||
|
|
||||||
|
## Known Issues
|
||||||
|
|
||||||
|
### The PreEnqueue extension point doesn't work for Pods going to activeQ through backoffQ
|
||||||
|
|
||||||
|
In v1.26.0, we've found the bug that the PreEnqueue extension point doesn't work for Pods going to activeQ through backoffQ.
|
||||||
|
It doesn't affect any of the vanilla Kubernetes behavior, but, may break custom PreEnqueue plugins.
|
||||||
|
|
||||||
|
The cause PR is [reverted](https://github.com/kubernetes/kubernetes/pull/117194) by v1.26.1.
|
||||||
|
|
||||||
## Urgent Upgrade Notes
|
## Urgent Upgrade Notes
|
||||||
|
|
||||||
### (No, really, you MUST read this before you upgrade)
|
### (No, really, you MUST read this before you upgrade)
|
||||||
|
@ -553,9 +553,7 @@ func (p *PriorityQueue) flushBackoffQCompleted() {
|
|||||||
klog.ErrorS(err, "Unable to pop pod from backoff queue despite backoff completion", "pod", klog.KObj(pod))
|
klog.ErrorS(err, "Unable to pop pod from backoff queue despite backoff completion", "pod", klog.KObj(pod))
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
if err := p.activeQ.Add(pInfo); err != nil {
|
if added, _ := p.addToActiveQ(pInfo); added {
|
||||||
klog.ErrorS(err, "Error adding pod to the active queue", "pod", klog.KObj(pInfo.Pod))
|
|
||||||
} else {
|
|
||||||
klog.V(5).InfoS("Pod moved to an internal scheduling queue", "pod", klog.KObj(pod), "event", BackoffComplete, "queue", activeQName)
|
klog.V(5).InfoS("Pod moved to an internal scheduling queue", "pod", klog.KObj(pod), "event", BackoffComplete, "queue", activeQName)
|
||||||
metrics.SchedulerQueueIncomingPods.WithLabelValues("active", BackoffComplete).Inc()
|
metrics.SchedulerQueueIncomingPods.WithLabelValues("active", BackoffComplete).Inc()
|
||||||
activated = true
|
activated = true
|
||||||
|
@ -452,8 +452,6 @@ func TestPriorityQueue_Activate(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type preEnqueuePlugin struct {
|
type preEnqueuePlugin struct {
|
||||||
// called counts the number of calling PreEnqueue()
|
|
||||||
called int
|
|
||||||
allowlists []string
|
allowlists []string
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -462,7 +460,6 @@ func (pl *preEnqueuePlugin) Name() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (pl *preEnqueuePlugin) PreEnqueue(ctx context.Context, p *v1.Pod) *framework.Status {
|
func (pl *preEnqueuePlugin) PreEnqueue(ctx context.Context, p *v1.Pod) *framework.Status {
|
||||||
pl.called++
|
|
||||||
for _, allowed := range pl.allowlists {
|
for _, allowed := range pl.allowlists {
|
||||||
for label := range p.Labels {
|
for label := range p.Labels {
|
||||||
if label == allowed {
|
if label == allowed {
|
||||||
@ -544,47 +541,6 @@ func TestPriorityQueue_addToActiveQ(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPriorityQueue_flushBackoffQCompleted(t *testing.T) {
|
|
||||||
tests := []struct {
|
|
||||||
name string
|
|
||||||
plugin framework.PreEnqueuePlugin
|
|
||||||
pod *v1.Pod
|
|
||||||
operations []operation
|
|
||||||
wantPreEnqueuePluginCalled int
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
name: "preEnqueue plugin registered, not running preEnqueue plugin when backoff completed",
|
|
||||||
plugin: &preEnqueuePlugin{},
|
|
||||||
pod: st.MakePod().Name("foo").Label("foo", "").Obj(),
|
|
||||||
operations: []operation{
|
|
||||||
addPodBackoffQ,
|
|
||||||
flushBackoffQ,
|
|
||||||
},
|
|
||||||
wantPreEnqueuePluginCalled: 0,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, tt := range tests {
|
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
|
||||||
defer cancel()
|
|
||||||
|
|
||||||
m := map[string][]framework.PreEnqueuePlugin{"": {tt.plugin}}
|
|
||||||
c := testingclock.NewFakeClock(time.Now())
|
|
||||||
q := NewTestQueueWithObjects(ctx, newDefaultQueueSort(), []runtime.Object{tt.pod}, WithPreEnqueuePluginMap(m),
|
|
||||||
WithPodInitialBackoffDuration(time.Second*1), WithPodMaxBackoffDuration(time.Second*60), WithClock(c))
|
|
||||||
pInfo := newQueuedPodInfoForLookup(tt.pod)
|
|
||||||
pInfo.Gated = true
|
|
||||||
for _, op := range tt.operations {
|
|
||||||
op(q, pInfo)
|
|
||||||
}
|
|
||||||
if tt.wantPreEnqueuePluginCalled != tt.plugin.(*preEnqueuePlugin).called {
|
|
||||||
t.Errorf("Unexpected number of calling preEnqueue: want %v, but got %v", tt.wantPreEnqueuePluginCalled, tt.plugin.(*preEnqueuePlugin).called)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func BenchmarkMoveAllToActiveOrBackoffQueue(b *testing.B) {
|
func BenchmarkMoveAllToActiveOrBackoffQueue(b *testing.B) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
|
Loading…
Reference in New Issue
Block a user