Commit 5bad68ac authored by Yongkun Anfernee Gui's avatar Yongkun Anfernee Gui

Use pod UID as cache key instead of namespace/name

UID uniquely identifies pods across lifecycles, while namespace/name could be 2 different pods across lifecycles. This could result in tricky scheduler bugs. Fixes #60966
parent 1e0b552f
...@@ -24,6 +24,7 @@ go_test( ...@@ -24,6 +24,7 @@ go_test(
"//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/labels:go_default_library", "//vendor/k8s.io/apimachinery/pkg/labels:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/util/diff:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/diff:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library",
"//vendor/k8s.io/apiserver/pkg/util/feature:go_default_library", "//vendor/k8s.io/apiserver/pkg/util/feature:go_default_library",
......
...@@ -29,6 +29,7 @@ go_test( ...@@ -29,6 +29,7 @@ go_test(
"//vendor/k8s.io/api/extensions/v1beta1:go_default_library", "//vendor/k8s.io/api/extensions/v1beta1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library",
], ],
......
...@@ -27,6 +27,7 @@ import ( ...@@ -27,6 +27,7 @@ import (
"k8s.io/apimachinery/pkg/api/resource" "k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/diff" "k8s.io/apimachinery/pkg/util/diff"
"k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/util/wait"
utilfeature "k8s.io/apiserver/pkg/util/feature" utilfeature "k8s.io/apiserver/pkg/util/feature"
...@@ -75,7 +76,11 @@ func (fp fakePodPreemptor) RemoveNominatedNodeName(pod *v1.Pod) error { ...@@ -75,7 +76,11 @@ func (fp fakePodPreemptor) RemoveNominatedNodeName(pod *v1.Pod) error {
func podWithID(id, desiredHost string) *v1.Pod { func podWithID(id, desiredHost string) *v1.Pod {
return &v1.Pod{ return &v1.Pod{
ObjectMeta: metav1.ObjectMeta{Name: id, SelfLink: util.Test.SelfLink(string(v1.ResourcePods), id)}, ObjectMeta: metav1.ObjectMeta{
Name: id,
UID: types.UID(id),
SelfLink: util.Test.SelfLink(string(v1.ResourcePods), id),
},
Spec: v1.PodSpec{ Spec: v1.PodSpec{
NodeName: desiredHost, NodeName: desiredHost,
}, },
...@@ -85,7 +90,12 @@ func podWithID(id, desiredHost string) *v1.Pod { ...@@ -85,7 +90,12 @@ func podWithID(id, desiredHost string) *v1.Pod {
func deletingPod(id string) *v1.Pod { func deletingPod(id string) *v1.Pod {
deletionTimestamp := metav1.Now() deletionTimestamp := metav1.Now()
return &v1.Pod{ return &v1.Pod{
ObjectMeta: metav1.ObjectMeta{Name: id, SelfLink: util.Test.SelfLink(string(v1.ResourcePods), id), DeletionTimestamp: &deletionTimestamp}, ObjectMeta: metav1.ObjectMeta{
Name: id,
UID: types.UID(id),
SelfLink: util.Test.SelfLink(string(v1.ResourcePods), id),
DeletionTimestamp: &deletionTimestamp,
},
Spec: v1.PodSpec{ Spec: v1.PodSpec{
NodeName: "", NodeName: "",
}, },
...@@ -133,7 +143,7 @@ func TestScheduler(t *testing.T) { ...@@ -133,7 +143,7 @@ func TestScheduler(t *testing.T) {
eventBroadcaster.StartLogging(t.Logf).Stop() eventBroadcaster.StartLogging(t.Logf).Stop()
errS := errors.New("scheduler") errS := errors.New("scheduler")
errB := errors.New("binder") errB := errors.New("binder")
testNode := v1.Node{ObjectMeta: metav1.ObjectMeta{Name: "machine1"}} testNode := v1.Node{ObjectMeta: metav1.ObjectMeta{Name: "machine1", UID: types.UID("machine1")}}
table := []struct { table := []struct {
injectBindError error injectBindError error
...@@ -149,7 +159,7 @@ func TestScheduler(t *testing.T) { ...@@ -149,7 +159,7 @@ func TestScheduler(t *testing.T) {
{ {
sendPod: podWithID("foo", ""), sendPod: podWithID("foo", ""),
algo: mockScheduler{testNode.Name, nil}, algo: mockScheduler{testNode.Name, nil},
expectBind: &v1.Binding{ObjectMeta: metav1.ObjectMeta{Name: "foo"}, Target: v1.ObjectReference{Kind: "Node", Name: testNode.Name}}, expectBind: &v1.Binding{ObjectMeta: metav1.ObjectMeta{Name: "foo", UID: types.UID("foo")}, Target: v1.ObjectReference{Kind: "Node", Name: testNode.Name}},
expectAssumedPod: podWithID("foo", testNode.Name), expectAssumedPod: podWithID("foo", testNode.Name),
eventReason: "Scheduled", eventReason: "Scheduled",
}, { }, {
...@@ -161,7 +171,7 @@ func TestScheduler(t *testing.T) { ...@@ -161,7 +171,7 @@ func TestScheduler(t *testing.T) {
}, { }, {
sendPod: podWithID("foo", ""), sendPod: podWithID("foo", ""),
algo: mockScheduler{testNode.Name, nil}, algo: mockScheduler{testNode.Name, nil},
expectBind: &v1.Binding{ObjectMeta: metav1.ObjectMeta{Name: "foo"}, Target: v1.ObjectReference{Kind: "Node", Name: testNode.Name}}, expectBind: &v1.Binding{ObjectMeta: metav1.ObjectMeta{Name: "foo", UID: types.UID("foo")}, Target: v1.ObjectReference{Kind: "Node", Name: testNode.Name}},
expectAssumedPod: podWithID("foo", testNode.Name), expectAssumedPod: podWithID("foo", testNode.Name),
injectBindError: errB, injectBindError: errB,
expectError: errB, expectError: errB,
...@@ -249,7 +259,7 @@ func TestSchedulerNoPhantomPodAfterExpire(t *testing.T) { ...@@ -249,7 +259,7 @@ func TestSchedulerNoPhantomPodAfterExpire(t *testing.T) {
queuedPodStore := clientcache.NewFIFO(clientcache.MetaNamespaceKeyFunc) queuedPodStore := clientcache.NewFIFO(clientcache.MetaNamespaceKeyFunc)
scache := schedulercache.New(100*time.Millisecond, stop) scache := schedulercache.New(100*time.Millisecond, stop)
pod := podWithPort("pod.Name", "", 8080) pod := podWithPort("pod.Name", "", 8080)
node := v1.Node{ObjectMeta: metav1.ObjectMeta{Name: "machine1"}} node := v1.Node{ObjectMeta: metav1.ObjectMeta{Name: "machine1", UID: types.UID("machine1")}}
scache.AddNode(&node) scache.AddNode(&node)
nodeLister := schedulertesting.FakeNodeLister([]*v1.Node{&node}) nodeLister := schedulertesting.FakeNodeLister([]*v1.Node{&node})
predicateMap := map[string]algorithm.FitPredicate{"PodFitsHostPorts": predicates.PodFitsHostPorts} predicateMap := map[string]algorithm.FitPredicate{"PodFitsHostPorts": predicates.PodFitsHostPorts}
...@@ -290,7 +300,7 @@ func TestSchedulerNoPhantomPodAfterExpire(t *testing.T) { ...@@ -290,7 +300,7 @@ func TestSchedulerNoPhantomPodAfterExpire(t *testing.T) {
select { select {
case b := <-bindingChan: case b := <-bindingChan:
expectBinding := &v1.Binding{ expectBinding := &v1.Binding{
ObjectMeta: metav1.ObjectMeta{Name: "bar"}, ObjectMeta: metav1.ObjectMeta{Name: "bar", UID: types.UID("bar")},
Target: v1.ObjectReference{Kind: "Node", Name: node.Name}, Target: v1.ObjectReference{Kind: "Node", Name: node.Name},
} }
if !reflect.DeepEqual(expectBinding, b) { if !reflect.DeepEqual(expectBinding, b) {
...@@ -307,7 +317,7 @@ func TestSchedulerNoPhantomPodAfterDelete(t *testing.T) { ...@@ -307,7 +317,7 @@ func TestSchedulerNoPhantomPodAfterDelete(t *testing.T) {
queuedPodStore := clientcache.NewFIFO(clientcache.MetaNamespaceKeyFunc) queuedPodStore := clientcache.NewFIFO(clientcache.MetaNamespaceKeyFunc)
scache := schedulercache.New(10*time.Minute, stop) scache := schedulercache.New(10*time.Minute, stop)
firstPod := podWithPort("pod.Name", "", 8080) firstPod := podWithPort("pod.Name", "", 8080)
node := v1.Node{ObjectMeta: metav1.ObjectMeta{Name: "machine1"}} node := v1.Node{ObjectMeta: metav1.ObjectMeta{Name: "machine1", UID: types.UID("machine1")}}
scache.AddNode(&node) scache.AddNode(&node)
nodeLister := schedulertesting.FakeNodeLister([]*v1.Node{&node}) nodeLister := schedulertesting.FakeNodeLister([]*v1.Node{&node})
predicateMap := map[string]algorithm.FitPredicate{"PodFitsHostPorts": predicates.PodFitsHostPorts} predicateMap := map[string]algorithm.FitPredicate{"PodFitsHostPorts": predicates.PodFitsHostPorts}
...@@ -351,7 +361,7 @@ func TestSchedulerNoPhantomPodAfterDelete(t *testing.T) { ...@@ -351,7 +361,7 @@ func TestSchedulerNoPhantomPodAfterDelete(t *testing.T) {
select { select {
case b := <-bindingChan: case b := <-bindingChan:
expectBinding := &v1.Binding{ expectBinding := &v1.Binding{
ObjectMeta: metav1.ObjectMeta{Name: "bar"}, ObjectMeta: metav1.ObjectMeta{Name: "bar", UID: types.UID("bar")},
Target: v1.ObjectReference{Kind: "Node", Name: node.Name}, Target: v1.ObjectReference{Kind: "Node", Name: node.Name},
} }
if !reflect.DeepEqual(expectBinding, b) { if !reflect.DeepEqual(expectBinding, b) {
...@@ -390,7 +400,7 @@ func TestSchedulerErrorWithLongBinding(t *testing.T) { ...@@ -390,7 +400,7 @@ func TestSchedulerErrorWithLongBinding(t *testing.T) {
queuedPodStore := clientcache.NewFIFO(clientcache.MetaNamespaceKeyFunc) queuedPodStore := clientcache.NewFIFO(clientcache.MetaNamespaceKeyFunc)
scache := schedulercache.New(test.CacheTTL, stop) scache := schedulercache.New(test.CacheTTL, stop)
node := v1.Node{ObjectMeta: metav1.ObjectMeta{Name: "machine1"}} node := v1.Node{ObjectMeta: metav1.ObjectMeta{Name: "machine1", UID: types.UID("machine1")}}
scache.AddNode(&node) scache.AddNode(&node)
nodeLister := schedulertesting.FakeNodeLister([]*v1.Node{&node}) nodeLister := schedulertesting.FakeNodeLister([]*v1.Node{&node})
...@@ -439,7 +449,7 @@ func setupTestSchedulerWithOnePodOnNode(t *testing.T, queuedPodStore *clientcach ...@@ -439,7 +449,7 @@ func setupTestSchedulerWithOnePodOnNode(t *testing.T, queuedPodStore *clientcach
select { select {
case b := <-bindingChan: case b := <-bindingChan:
expectBinding := &v1.Binding{ expectBinding := &v1.Binding{
ObjectMeta: metav1.ObjectMeta{Name: pod.Name}, ObjectMeta: metav1.ObjectMeta{Name: pod.Name, UID: types.UID(pod.Name)},
Target: v1.ObjectReference{Kind: "Node", Name: node.Name}, Target: v1.ObjectReference{Kind: "Node", Name: node.Name},
} }
if !reflect.DeepEqual(expectBinding, b) { if !reflect.DeepEqual(expectBinding, b) {
...@@ -471,8 +481,9 @@ func TestSchedulerFailedSchedulingReasons(t *testing.T) { ...@@ -471,8 +481,9 @@ func TestSchedulerFailedSchedulingReasons(t *testing.T) {
// create several nodes which cannot schedule the above pod // create several nodes which cannot schedule the above pod
nodes := []*v1.Node{} nodes := []*v1.Node{}
for i := 0; i < 100; i++ { for i := 0; i < 100; i++ {
uid := fmt.Sprintf("machine%v", i)
node := v1.Node{ node := v1.Node{
ObjectMeta: metav1.ObjectMeta{Name: fmt.Sprintf("machine%v", i)}, ObjectMeta: metav1.ObjectMeta{Name: uid, UID: types.UID(uid)},
Status: v1.NodeStatus{ Status: v1.NodeStatus{
Capacity: v1.ResourceList{ Capacity: v1.ResourceList{
v1.ResourceCPU: *(resource.NewQuantity(cpu/2, resource.DecimalSI)), v1.ResourceCPU: *(resource.NewQuantity(cpu/2, resource.DecimalSI)),
...@@ -622,7 +633,7 @@ func setupTestSchedulerLongBindingWithRetry(queuedPodStore *clientcache.FIFO, sc ...@@ -622,7 +633,7 @@ func setupTestSchedulerLongBindingWithRetry(queuedPodStore *clientcache.FIFO, sc
} }
func setupTestSchedulerWithVolumeBinding(fakeVolumeBinder *volumebinder.VolumeBinder, stop <-chan struct{}, broadcaster record.EventBroadcaster) (*Scheduler, chan *v1.Binding, chan error) { func setupTestSchedulerWithVolumeBinding(fakeVolumeBinder *volumebinder.VolumeBinder, stop <-chan struct{}, broadcaster record.EventBroadcaster) (*Scheduler, chan *v1.Binding, chan error) {
testNode := v1.Node{ObjectMeta: metav1.ObjectMeta{Name: "machine1"}} testNode := v1.Node{ObjectMeta: metav1.ObjectMeta{Name: "machine1", UID: types.UID("machine1")}}
nodeLister := schedulertesting.FakeNodeLister([]*v1.Node{&testNode}) nodeLister := schedulertesting.FakeNodeLister([]*v1.Node{&testNode})
queuedPodStore := clientcache.NewFIFO(clientcache.MetaNamespaceKeyFunc) queuedPodStore := clientcache.NewFIFO(clientcache.MetaNamespaceKeyFunc)
queuedPodStore.Add(podWithID("foo", "")) queuedPodStore.Add(podWithID("foo", ""))
...@@ -678,8 +689,9 @@ func TestSchedulerWithVolumeBinding(t *testing.T) { ...@@ -678,8 +689,9 @@ func TestSchedulerWithVolumeBinding(t *testing.T) {
FindBoundSatsified: true, FindBoundSatsified: true,
}, },
expectAssumeCalled: true, expectAssumeCalled: true,
expectPodBind: &v1.Binding{ObjectMeta: metav1.ObjectMeta{Name: "foo"}, Target: v1.ObjectReference{Kind: "Node", Name: "machine1"}}, expectPodBind: &v1.Binding{ObjectMeta: metav1.ObjectMeta{Name: "foo", UID: types.UID("foo")}, Target: v1.ObjectReference{Kind: "Node", Name: "machine1"}},
eventReason: "Scheduled",
eventReason: "Scheduled",
}, },
"bound,invalid-pv-affinity": { "bound,invalid-pv-affinity": {
volumeBinderConfig: &persistentvolume.FakeVolumeBinderConfig{ volumeBinderConfig: &persistentvolume.FakeVolumeBinderConfig{
......
...@@ -20,7 +20,6 @@ go_library( ...@@ -20,7 +20,6 @@ go_library(
"//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/labels:go_default_library", "//vendor/k8s.io/apimachinery/pkg/labels:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library",
"//vendor/k8s.io/client-go/tools/cache:go_default_library",
], ],
) )
...@@ -39,6 +38,7 @@ go_test( ...@@ -39,6 +38,7 @@ go_test(
"//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/labels:go_default_library", "//vendor/k8s.io/apimachinery/pkg/labels:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/util/intstr:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/intstr:go_default_library",
], ],
) )
......
...@@ -28,6 +28,7 @@ import ( ...@@ -28,6 +28,7 @@ import (
"k8s.io/apimachinery/pkg/api/resource" "k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/util/intstr"
priorityutil "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/util" priorityutil "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/util"
schedutil "k8s.io/kubernetes/pkg/scheduler/util" schedutil "k8s.io/kubernetes/pkg/scheduler/util"
...@@ -583,6 +584,7 @@ func makePodWithEphemeralStorage(nodeName, ephemeralStorage string) *v1.Pod { ...@@ -583,6 +584,7 @@ func makePodWithEphemeralStorage(nodeName, ephemeralStorage string) *v1.Pod {
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Namespace: "default-namespace", Namespace: "default-namespace",
Name: "pod-with-ephemeral-storage", Name: "pod-with-ephemeral-storage",
UID: types.UID("pod-with-ephemeral-storage"),
}, },
Spec: v1.PodSpec{ Spec: v1.PodSpec{
Containers: []v1.Container{{ Containers: []v1.Container{{
...@@ -809,6 +811,7 @@ func TestNodeOperators(t *testing.T) { ...@@ -809,6 +811,7 @@ func TestNodeOperators(t *testing.T) {
{ {
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: "pod1", Name: "pod1",
UID: types.UID("pod1"),
}, },
Spec: v1.PodSpec{ Spec: v1.PodSpec{
NodeName: nodeName, NodeName: nodeName,
...@@ -859,6 +862,7 @@ func TestNodeOperators(t *testing.T) { ...@@ -859,6 +862,7 @@ func TestNodeOperators(t *testing.T) {
{ {
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: "pod1", Name: "pod1",
UID: types.UID("pod1"),
}, },
Spec: v1.PodSpec{ Spec: v1.PodSpec{
NodeName: nodeName, NodeName: nodeName,
...@@ -877,6 +881,7 @@ func TestNodeOperators(t *testing.T) { ...@@ -877,6 +881,7 @@ func TestNodeOperators(t *testing.T) {
{ {
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: "pod2", Name: "pod2",
UID: types.UID("pod2"),
}, },
Spec: v1.PodSpec{ Spec: v1.PodSpec{
NodeName: nodeName, NodeName: nodeName,
...@@ -1000,6 +1005,7 @@ func makeBasePod(t testingMode, nodeName, objName, cpu, mem, extended string, po ...@@ -1000,6 +1005,7 @@ func makeBasePod(t testingMode, nodeName, objName, cpu, mem, extended string, po
} }
return &v1.Pod{ return &v1.Pod{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
UID: types.UID(objName),
Namespace: "node_info_cache_test", Namespace: "node_info_cache_test",
Name: objName, Name: objName,
}, },
......
...@@ -17,13 +17,13 @@ limitations under the License. ...@@ -17,13 +17,13 @@ limitations under the License.
package schedulercache package schedulercache
import ( import (
"errors"
"fmt" "fmt"
"github.com/golang/glog" "github.com/golang/glog"
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource" "k8s.io/apimachinery/pkg/api/resource"
clientcache "k8s.io/client-go/tools/cache"
v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper"
priorityutil "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/util" priorityutil "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities/util"
"k8s.io/kubernetes/pkg/scheduler/util" "k8s.io/kubernetes/pkg/scheduler/util"
...@@ -495,7 +495,11 @@ func (n *NodeInfo) FilterOutPods(pods []*v1.Pod) []*v1.Pod { ...@@ -495,7 +495,11 @@ func (n *NodeInfo) FilterOutPods(pods []*v1.Pod) []*v1.Pod {
// getPodKey returns the string key of a pod. // getPodKey returns the string key of a pod.
func getPodKey(pod *v1.Pod) (string, error) { func getPodKey(pod *v1.Pod) (string, error) {
return clientcache.MetaNamespaceKeyFunc(pod) uid := string(pod.UID)
if len(uid) == 0 {
return "", errors.New("Cannot get cache key for pod with empty UID")
}
return uid, nil
} }
// Filter implements PodFilter interface. It returns false only if the pod node name // Filter implements PodFilter interface. It returns false only if the pod node name
......
...@@ -24,6 +24,7 @@ import ( ...@@ -24,6 +24,7 @@ import (
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource" "k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"k8s.io/kubernetes/pkg/scheduler/util" "k8s.io/kubernetes/pkg/scheduler/util"
) )
...@@ -230,6 +231,7 @@ func TestNewNodeInfo(t *testing.T) { ...@@ -230,6 +231,7 @@ func TestNewNodeInfo(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Namespace: "node_info_cache_test", Namespace: "node_info_cache_test",
Name: "test-1", Name: "test-1",
UID: types.UID("test-1"),
}, },
Spec: v1.PodSpec{ Spec: v1.PodSpec{
Containers: []v1.Container{ Containers: []v1.Container{
...@@ -256,6 +258,7 @@ func TestNewNodeInfo(t *testing.T) { ...@@ -256,6 +258,7 @@ func TestNewNodeInfo(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Namespace: "node_info_cache_test", Namespace: "node_info_cache_test",
Name: "test-2", Name: "test-2",
UID: types.UID("test-2"),
}, },
Spec: v1.PodSpec{ Spec: v1.PodSpec{
Containers: []v1.Container{ Containers: []v1.Container{
...@@ -310,6 +313,7 @@ func TestNodeInfoClone(t *testing.T) { ...@@ -310,6 +313,7 @@ func TestNodeInfoClone(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Namespace: "node_info_cache_test", Namespace: "node_info_cache_test",
Name: "test-1", Name: "test-1",
UID: types.UID("test-1"),
}, },
Spec: v1.PodSpec{ Spec: v1.PodSpec{
Containers: []v1.Container{ Containers: []v1.Container{
...@@ -336,6 +340,7 @@ func TestNodeInfoClone(t *testing.T) { ...@@ -336,6 +340,7 @@ func TestNodeInfoClone(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Namespace: "node_info_cache_test", Namespace: "node_info_cache_test",
Name: "test-2", Name: "test-2",
UID: types.UID("test-2"),
}, },
Spec: v1.PodSpec{ Spec: v1.PodSpec{
Containers: []v1.Container{ Containers: []v1.Container{
...@@ -376,6 +381,7 @@ func TestNodeInfoClone(t *testing.T) { ...@@ -376,6 +381,7 @@ func TestNodeInfoClone(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Namespace: "node_info_cache_test", Namespace: "node_info_cache_test",
Name: "test-1", Name: "test-1",
UID: types.UID("test-1"),
}, },
Spec: v1.PodSpec{ Spec: v1.PodSpec{
Containers: []v1.Container{ Containers: []v1.Container{
...@@ -402,6 +408,7 @@ func TestNodeInfoClone(t *testing.T) { ...@@ -402,6 +408,7 @@ func TestNodeInfoClone(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Namespace: "node_info_cache_test", Namespace: "node_info_cache_test",
Name: "test-2", Name: "test-2",
UID: types.UID("test-2"),
}, },
Spec: v1.PodSpec{ Spec: v1.PodSpec{
Containers: []v1.Container{ Containers: []v1.Container{
...@@ -446,6 +453,7 @@ func TestNodeInfoAddPod(t *testing.T) { ...@@ -446,6 +453,7 @@ func TestNodeInfoAddPod(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Namespace: "node_info_cache_test", Namespace: "node_info_cache_test",
Name: "test-1", Name: "test-1",
UID: types.UID("test-1"),
}, },
Spec: v1.PodSpec{ Spec: v1.PodSpec{
Containers: []v1.Container{ Containers: []v1.Container{
...@@ -472,6 +480,7 @@ func TestNodeInfoAddPod(t *testing.T) { ...@@ -472,6 +480,7 @@ func TestNodeInfoAddPod(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Namespace: "node_info_cache_test", Namespace: "node_info_cache_test",
Name: "test-2", Name: "test-2",
UID: types.UID("test-2"),
}, },
Spec: v1.PodSpec{ Spec: v1.PodSpec{
Containers: []v1.Container{ Containers: []v1.Container{
...@@ -530,6 +539,7 @@ func TestNodeInfoAddPod(t *testing.T) { ...@@ -530,6 +539,7 @@ func TestNodeInfoAddPod(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Namespace: "node_info_cache_test", Namespace: "node_info_cache_test",
Name: "test-1", Name: "test-1",
UID: types.UID("test-1"),
}, },
Spec: v1.PodSpec{ Spec: v1.PodSpec{
Containers: []v1.Container{ Containers: []v1.Container{
...@@ -556,6 +566,7 @@ func TestNodeInfoAddPod(t *testing.T) { ...@@ -556,6 +566,7 @@ func TestNodeInfoAddPod(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Namespace: "node_info_cache_test", Namespace: "node_info_cache_test",
Name: "test-2", Name: "test-2",
UID: types.UID("test-2"),
}, },
Spec: v1.PodSpec{ Spec: v1.PodSpec{
Containers: []v1.Container{ Containers: []v1.Container{
...@@ -641,6 +652,7 @@ func TestNodeInfoRemovePod(t *testing.T) { ...@@ -641,6 +652,7 @@ func TestNodeInfoRemovePod(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Namespace: "node_info_cache_test", Namespace: "node_info_cache_test",
Name: "test-1", Name: "test-1",
UID: types.UID("test-1"),
}, },
Spec: v1.PodSpec{ Spec: v1.PodSpec{
Containers: []v1.Container{ Containers: []v1.Container{
...@@ -667,6 +679,7 @@ func TestNodeInfoRemovePod(t *testing.T) { ...@@ -667,6 +679,7 @@ func TestNodeInfoRemovePod(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Namespace: "node_info_cache_test", Namespace: "node_info_cache_test",
Name: "test-2", Name: "test-2",
UID: types.UID("test-2"),
}, },
Spec: v1.PodSpec{ Spec: v1.PodSpec{
Containers: []v1.Container{ Containers: []v1.Container{
...@@ -697,6 +710,7 @@ func TestNodeInfoRemovePod(t *testing.T) { ...@@ -697,6 +710,7 @@ func TestNodeInfoRemovePod(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Namespace: "node_info_cache_test", Namespace: "node_info_cache_test",
Name: "test-1", Name: "test-1",
UID: types.UID("test-1"),
}, },
Spec: v1.PodSpec{ Spec: v1.PodSpec{
Containers: []v1.Container{ Containers: []v1.Container{
...@@ -754,6 +768,7 @@ func TestNodeInfoRemovePod(t *testing.T) { ...@@ -754,6 +768,7 @@ func TestNodeInfoRemovePod(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Namespace: "node_info_cache_test", Namespace: "node_info_cache_test",
Name: "test-2", Name: "test-2",
UID: types.UID("test-2"),
}, },
Spec: v1.PodSpec{ Spec: v1.PodSpec{
Containers: []v1.Container{ Containers: []v1.Container{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment