Merge pull request #93717 from liggitt/deflake-nodestatus

Deflake TestUpdateNodeStatusWithLease - guard cached machineInfo
This commit is contained in:
Kubernetes Prow Robot 2020-08-06 16:16:19 -07:00 committed by GitHub
commit 92e51c1901
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 27 additions and 12 deletions

View File

@ -561,7 +561,7 @@ func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration,
if err != nil { if err != nil {
return nil, err return nil, err
} }
klet.machineInfo = machineInfo klet.setCachedMachineInfo(machineInfo)
imageBackOff := flowcontrol.NewBackOff(backOffPeriod, MaxContainerBackOff) imageBackOff := flowcontrol.NewBackOff(backOffPeriod, MaxContainerBackOff)
@ -911,7 +911,8 @@ type Kubelet struct {
configMapManager configmap.Manager configMapManager configmap.Manager
// Cached MachineInfo returned by cadvisor. // Cached MachineInfo returned by cadvisor.
machineInfo *cadvisorapi.MachineInfo machineInfoLock sync.RWMutex
machineInfo *cadvisorapi.MachineInfo
// Handles certificate rotations. // Handles certificate rotations.
serverCertificateManager certificate.Manager serverCertificateManager certificate.Manager

View File

@ -382,5 +382,13 @@ func (kl *Kubelet) GetVersionInfo() (*cadvisorapiv1.VersionInfo, error) {
// GetCachedMachineInfo assumes that the machine info can't change without a reboot // GetCachedMachineInfo assumes that the machine info can't change without a reboot
func (kl *Kubelet) GetCachedMachineInfo() (*cadvisorapiv1.MachineInfo, error) { func (kl *Kubelet) GetCachedMachineInfo() (*cadvisorapiv1.MachineInfo, error) {
kl.machineInfoLock.RLock()
defer kl.machineInfoLock.RUnlock()
return kl.machineInfo, nil return kl.machineInfo, nil
} }
func (kl *Kubelet) setCachedMachineInfo(info *cadvisorapiv1.MachineInfo) {
kl.machineInfoLock.Lock()
defer kl.machineInfoLock.Unlock()
kl.machineInfo = info
}

View File

@ -212,7 +212,7 @@ func TestUpdateNewNodeStatus(t *testing.T) {
NumCores: 2, NumCores: 2,
MemoryCapacity: 10e9, // 10G MemoryCapacity: 10e9, // 10G
} }
kubelet.machineInfo = machineInfo kubelet.setCachedMachineInfo(machineInfo)
expectedNode := &v1.Node{ expectedNode := &v1.Node{
ObjectMeta: metav1.ObjectMeta{Name: testKubeletHostname}, ObjectMeta: metav1.ObjectMeta{Name: testKubeletHostname},
@ -390,7 +390,7 @@ func TestUpdateExistingNodeStatus(t *testing.T) {
NumCores: 2, NumCores: 2,
MemoryCapacity: 20e9, MemoryCapacity: 20e9,
} }
kubelet.machineInfo = machineInfo kubelet.setCachedMachineInfo(machineInfo)
expectedNode := &v1.Node{ expectedNode := &v1.Node{
ObjectMeta: metav1.ObjectMeta{Name: testKubeletHostname}, ObjectMeta: metav1.ObjectMeta{Name: testKubeletHostname},
@ -596,7 +596,7 @@ func TestUpdateNodeStatusWithRuntimeStateError(t *testing.T) {
NumCores: 2, NumCores: 2,
MemoryCapacity: 10e9, MemoryCapacity: 10e9,
} }
kubelet.machineInfo = machineInfo kubelet.setCachedMachineInfo(machineInfo)
expectedNode := &v1.Node{ expectedNode := &v1.Node{
ObjectMeta: metav1.ObjectMeta{Name: testKubeletHostname}, ObjectMeta: metav1.ObjectMeta{Name: testKubeletHostname},
@ -816,7 +816,7 @@ func TestUpdateNodeStatusWithLease(t *testing.T) {
NumCores: 2, NumCores: 2,
MemoryCapacity: 20e9, MemoryCapacity: 20e9,
} }
kubelet.machineInfo = machineInfo kubelet.setCachedMachineInfo(machineInfo)
now := metav1.NewTime(clock.Now()).Rfc3339Copy() now := metav1.NewTime(clock.Now()).Rfc3339Copy()
expectedNode := &v1.Node{ expectedNode := &v1.Node{
@ -961,7 +961,13 @@ func TestUpdateNodeStatusWithLease(t *testing.T) {
// Report node status even if it is still within the duration of nodeStatusReportFrequency. // Report node status even if it is still within the duration of nodeStatusReportFrequency.
clock.Step(10 * time.Second) clock.Step(10 * time.Second)
var newMemoryCapacity int64 = 40e9 var newMemoryCapacity int64 = 40e9
kubelet.machineInfo.MemoryCapacity = uint64(newMemoryCapacity) oldMachineInfo, err := kubelet.GetCachedMachineInfo()
if err != nil {
t.Fatal(err)
}
newMachineInfo := oldMachineInfo.Clone()
newMachineInfo.MemoryCapacity = uint64(newMemoryCapacity)
kubelet.setCachedMachineInfo(newMachineInfo)
assert.NoError(t, kubelet.updateNodeStatus()) assert.NoError(t, kubelet.updateNodeStatus())
// 2 more action (There were 5 actions before). // 2 more action (There were 5 actions before).
@ -1073,7 +1079,7 @@ func TestUpdateNodeStatusAndVolumesInUseWithNodeLease(t *testing.T) {
kubelet.containerManager = &localCM{ContainerManager: cm.NewStubContainerManager()} kubelet.containerManager = &localCM{ContainerManager: cm.NewStubContainerManager()}
kubelet.lastStatusReportTime = kubelet.clock.Now() kubelet.lastStatusReportTime = kubelet.clock.Now()
kubelet.nodeStatusReportFrequency = time.Hour kubelet.nodeStatusReportFrequency = time.Hour
kubelet.machineInfo = &cadvisorapi.MachineInfo{} kubelet.setCachedMachineInfo(&cadvisorapi.MachineInfo{})
// override test volumeManager // override test volumeManager
fakeVolumeManager := kubeletvolume.NewFakeVolumeManager(tc.existingVolumes) fakeVolumeManager := kubeletvolume.NewFakeVolumeManager(tc.existingVolumes)
@ -1147,7 +1153,7 @@ func TestRegisterWithApiServer(t *testing.T) {
NumCores: 2, NumCores: 2,
MemoryCapacity: 1024, MemoryCapacity: 1024,
} }
kubelet.machineInfo = machineInfo kubelet.setCachedMachineInfo(machineInfo)
done := make(chan struct{}) done := make(chan struct{})
go func() { go func() {
@ -1356,7 +1362,7 @@ func TestUpdateNewNodeStatusTooLargeReservation(t *testing.T) {
NumCores: 2, NumCores: 2,
MemoryCapacity: 10e9, // 10G MemoryCapacity: 10e9, // 10G
} }
kubelet.machineInfo = machineInfo kubelet.setCachedMachineInfo(machineInfo)
expectedNode := &v1.Node{ expectedNode := &v1.Node{
ObjectMeta: metav1.ObjectMeta{Name: testKubeletHostname}, ObjectMeta: metav1.ObjectMeta{Name: testKubeletHostname},
@ -2183,7 +2189,7 @@ func TestRegisterWithApiServerWithTaint(t *testing.T) {
NumCores: 2, NumCores: 2,
MemoryCapacity: 1024, MemoryCapacity: 1024,
} }
kubelet.machineInfo = machineInfo kubelet.setCachedMachineInfo(machineInfo)
var gotNode runtime.Object var gotNode runtime.Object
kubeClient.AddReactor("create", "nodes", func(action core.Action) (bool, runtime.Object, error) { kubeClient.AddReactor("create", "nodes", func(action core.Action) (bool, runtime.Object, error) {

View File

@ -215,7 +215,7 @@ func newTestKubeletWithImageList(
kubelet.cadvisor = &cadvisortest.Fake{} kubelet.cadvisor = &cadvisortest.Fake{}
machineInfo, _ := kubelet.cadvisor.MachineInfo() machineInfo, _ := kubelet.cadvisor.MachineInfo()
kubelet.machineInfo = machineInfo kubelet.setCachedMachineInfo(machineInfo)
fakeMirrorClient := podtest.NewFakeMirrorClient() fakeMirrorClient := podtest.NewFakeMirrorClient()
secretManager := secret.NewSimpleSecretManager(kubelet.kubeClient) secretManager := secret.NewSimpleSecretManager(kubelet.kubeClient)