fix the flake in scheduling_queue_test

pull/564/head
wangqingcan 2019-02-28 07:23:27 +08:00
parent 7a4496429d
commit 471679f8d2
2 changed files with 16 additions and 7 deletions

View File

@ -29,6 +29,7 @@ go_test(
"//staging/src/k8s.io/api/core/v1:go_default_library", "//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/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/clock:go_default_library",
], ],
) )

View File

@ -26,6 +26,7 @@ import (
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/clock"
podutil "k8s.io/kubernetes/pkg/api/v1/pod" podutil "k8s.io/kubernetes/pkg/api/v1/pod"
"k8s.io/kubernetes/pkg/scheduler/util" "k8s.io/kubernetes/pkg/scheduler/util"
) )
@ -98,7 +99,7 @@ var highPriorityPod, highPriNominatedPod, medPriorityPod, unschedulablePod = v1.
func addOrUpdateUnschedulablePod(p *PriorityQueue, pod *v1.Pod) { func addOrUpdateUnschedulablePod(p *PriorityQueue, pod *v1.Pod) {
p.lock.Lock() p.lock.Lock()
defer p.lock.Unlock() defer p.lock.Unlock()
p.unschedulableQ.addOrUpdate(newPodInfoNoTimestamp(pod)) p.unschedulableQ.addOrUpdate(p.newPodInfo(pod))
} }
func getUnschedulablePod(p *PriorityQueue, pod *v1.Pod) *v1.Pod { func getUnschedulablePod(p *PriorityQueue, pod *v1.Pod) *v1.Pod {
@ -983,8 +984,8 @@ func TestHighProirotyFlushUnschedulableQLeftover(t *testing.T) {
Message: "fake scheduling failure", Message: "fake scheduling failure",
}) })
q.unschedulableQ.addOrUpdate(newPodInfoNoTimestamp(&highPod)) addOrUpdateUnschedulablePod(q, &highPod)
q.unschedulableQ.addOrUpdate(newPodInfoNoTimestamp(&midPod)) addOrUpdateUnschedulablePod(q, &midPod)
q.unschedulableQ.podInfoMap[util.GetPodFullName(&highPod)].timestamp = time.Now().Add(-1 * unschedulableQTimeInterval) q.unschedulableQ.podInfoMap[util.GetPodFullName(&highPod)].timestamp = time.Now().Add(-1 * unschedulableQTimeInterval)
q.unschedulableQ.podInfoMap[util.GetPodFullName(&midPod)].timestamp = time.Now().Add(-1 * unschedulableQTimeInterval) q.unschedulableQ.podInfoMap[util.GetPodFullName(&midPod)].timestamp = time.Now().Add(-1 * unschedulableQTimeInterval)
@ -1020,13 +1021,14 @@ func TestPodTimestamp(t *testing.T) {
}, },
} }
var timestamp = time.Now()
pInfo1 := &podInfo{ pInfo1 := &podInfo{
pod: pod1, pod: pod1,
timestamp: util.RealClock{}.Now(), timestamp: timestamp,
} }
pInfo2 := &podInfo{ pInfo2 := &podInfo{
pod: pod2, pod: pod2,
timestamp: util.RealClock{}.Now().Add(1 * time.Second), timestamp: timestamp.Add(time.Second),
} }
var queue *PriorityQueue var queue *PriorityQueue
@ -1071,8 +1073,14 @@ func TestPodTimestamp(t *testing.T) {
queue.MoveAllToActiveQueue() queue.MoveAllToActiveQueue()
} }
} }
backoffPod := func(pInfo *podInfo) operation {
return func() {
queue.backoffPod(pInfo.pod)
}
}
flushBackoffQ := func() operation { flushBackoffQ := func() operation {
return func() { return func() {
queue.clock.(*clock.FakeClock).Step(2 * time.Second)
queue.flushBackoffQCompleted() queue.flushBackoffQCompleted()
} }
} }
@ -1105,7 +1113,7 @@ func TestPodTimestamp(t *testing.T) {
{ {
name: "add one pod to BackoffQ and move it to activeQ", name: "add one pod to BackoffQ and move it to activeQ",
operations: []operation{ operations: []operation{
addPodActiveQ(pInfo2), addPodBackoffQ(pInfo1), flushBackoffQ(), moveAllToActiveQ(), addPodActiveQ(pInfo2), addPodBackoffQ(pInfo1), backoffPod(pInfo1), flushBackoffQ(), moveAllToActiveQ(),
}, },
expected: []*podInfo{pInfo1, pInfo2}, expected: []*podInfo{pInfo1, pInfo2},
}, },
@ -1113,7 +1121,7 @@ func TestPodTimestamp(t *testing.T) {
for _, test := range tests { for _, test := range tests {
t.Run(test.name, func(t *testing.T) { t.Run(test.name, func(t *testing.T) {
queue = NewPriorityQueue(nil) queue = NewPriorityQueueWithClock(nil, clock.NewFakeClock(timestamp))
var podInfoList []*podInfo var podInfoList []*podInfo
for _, op := range test.operations { for _, op := range test.operations {