Skip to content

Commit 92e51c1

Browse files
authored
Merge pull request kubernetes#93717 from liggitt/deflake-nodestatus
Deflake TestUpdateNodeStatusWithLease - guard cached machineInfo
2 parents f5334fa + b181c76 commit 92e51c1

File tree

4 files changed

+27
-12
lines changed

4 files changed

+27
-12
lines changed

pkg/kubelet/kubelet.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -561,7 +561,7 @@ func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration,
561561
if err != nil {
562562
return nil, err
563563
}
564-
klet.machineInfo = machineInfo
564+
klet.setCachedMachineInfo(machineInfo)
565565

566566
imageBackOff := flowcontrol.NewBackOff(backOffPeriod, MaxContainerBackOff)
567567

@@ -911,7 +911,8 @@ type Kubelet struct {
911911
configMapManager configmap.Manager
912912

913913
// Cached MachineInfo returned by cadvisor.
914-
machineInfo *cadvisorapi.MachineInfo
914+
machineInfoLock sync.RWMutex
915+
machineInfo *cadvisorapi.MachineInfo
915916

916917
// Handles certificate rotations.
917918
serverCertificateManager certificate.Manager

pkg/kubelet/kubelet_getters.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,5 +382,13 @@ func (kl *Kubelet) GetVersionInfo() (*cadvisorapiv1.VersionInfo, error) {
382382

383383
// GetCachedMachineInfo assumes that the machine info can't change without a reboot
384384
func (kl *Kubelet) GetCachedMachineInfo() (*cadvisorapiv1.MachineInfo, error) {
385+
kl.machineInfoLock.RLock()
386+
defer kl.machineInfoLock.RUnlock()
385387
return kl.machineInfo, nil
386388
}
389+
390+
func (kl *Kubelet) setCachedMachineInfo(info *cadvisorapiv1.MachineInfo) {
391+
kl.machineInfoLock.Lock()
392+
defer kl.machineInfoLock.Unlock()
393+
kl.machineInfo = info
394+
}

pkg/kubelet/kubelet_node_status_test.go

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ func TestUpdateNewNodeStatus(t *testing.T) {
212212
NumCores: 2,
213213
MemoryCapacity: 10e9, // 10G
214214
}
215-
kubelet.machineInfo = machineInfo
215+
kubelet.setCachedMachineInfo(machineInfo)
216216

217217
expectedNode := &v1.Node{
218218
ObjectMeta: metav1.ObjectMeta{Name: testKubeletHostname},
@@ -390,7 +390,7 @@ func TestUpdateExistingNodeStatus(t *testing.T) {
390390
NumCores: 2,
391391
MemoryCapacity: 20e9,
392392
}
393-
kubelet.machineInfo = machineInfo
393+
kubelet.setCachedMachineInfo(machineInfo)
394394

395395
expectedNode := &v1.Node{
396396
ObjectMeta: metav1.ObjectMeta{Name: testKubeletHostname},
@@ -596,7 +596,7 @@ func TestUpdateNodeStatusWithRuntimeStateError(t *testing.T) {
596596
NumCores: 2,
597597
MemoryCapacity: 10e9,
598598
}
599-
kubelet.machineInfo = machineInfo
599+
kubelet.setCachedMachineInfo(machineInfo)
600600

601601
expectedNode := &v1.Node{
602602
ObjectMeta: metav1.ObjectMeta{Name: testKubeletHostname},
@@ -816,7 +816,7 @@ func TestUpdateNodeStatusWithLease(t *testing.T) {
816816
NumCores: 2,
817817
MemoryCapacity: 20e9,
818818
}
819-
kubelet.machineInfo = machineInfo
819+
kubelet.setCachedMachineInfo(machineInfo)
820820

821821
now := metav1.NewTime(clock.Now()).Rfc3339Copy()
822822
expectedNode := &v1.Node{
@@ -961,7 +961,13 @@ func TestUpdateNodeStatusWithLease(t *testing.T) {
961961
// Report node status even if it is still within the duration of nodeStatusReportFrequency.
962962
clock.Step(10 * time.Second)
963963
var newMemoryCapacity int64 = 40e9
964-
kubelet.machineInfo.MemoryCapacity = uint64(newMemoryCapacity)
964+
oldMachineInfo, err := kubelet.GetCachedMachineInfo()
965+
if err != nil {
966+
t.Fatal(err)
967+
}
968+
newMachineInfo := oldMachineInfo.Clone()
969+
newMachineInfo.MemoryCapacity = uint64(newMemoryCapacity)
970+
kubelet.setCachedMachineInfo(newMachineInfo)
965971
assert.NoError(t, kubelet.updateNodeStatus())
966972

967973
// 2 more action (There were 5 actions before).
@@ -1073,7 +1079,7 @@ func TestUpdateNodeStatusAndVolumesInUseWithNodeLease(t *testing.T) {
10731079
kubelet.containerManager = &localCM{ContainerManager: cm.NewStubContainerManager()}
10741080
kubelet.lastStatusReportTime = kubelet.clock.Now()
10751081
kubelet.nodeStatusReportFrequency = time.Hour
1076-
kubelet.machineInfo = &cadvisorapi.MachineInfo{}
1082+
kubelet.setCachedMachineInfo(&cadvisorapi.MachineInfo{})
10771083

10781084
// override test volumeManager
10791085
fakeVolumeManager := kubeletvolume.NewFakeVolumeManager(tc.existingVolumes)
@@ -1147,7 +1153,7 @@ func TestRegisterWithApiServer(t *testing.T) {
11471153
NumCores: 2,
11481154
MemoryCapacity: 1024,
11491155
}
1150-
kubelet.machineInfo = machineInfo
1156+
kubelet.setCachedMachineInfo(machineInfo)
11511157

11521158
done := make(chan struct{})
11531159
go func() {
@@ -1356,7 +1362,7 @@ func TestUpdateNewNodeStatusTooLargeReservation(t *testing.T) {
13561362
NumCores: 2,
13571363
MemoryCapacity: 10e9, // 10G
13581364
}
1359-
kubelet.machineInfo = machineInfo
1365+
kubelet.setCachedMachineInfo(machineInfo)
13601366

13611367
expectedNode := &v1.Node{
13621368
ObjectMeta: metav1.ObjectMeta{Name: testKubeletHostname},
@@ -2183,7 +2189,7 @@ func TestRegisterWithApiServerWithTaint(t *testing.T) {
21832189
NumCores: 2,
21842190
MemoryCapacity: 1024,
21852191
}
2186-
kubelet.machineInfo = machineInfo
2192+
kubelet.setCachedMachineInfo(machineInfo)
21872193

21882194
var gotNode runtime.Object
21892195
kubeClient.AddReactor("create", "nodes", func(action core.Action) (bool, runtime.Object, error) {

pkg/kubelet/kubelet_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ func newTestKubeletWithImageList(
215215

216216
kubelet.cadvisor = &cadvisortest.Fake{}
217217
machineInfo, _ := kubelet.cadvisor.MachineInfo()
218-
kubelet.machineInfo = machineInfo
218+
kubelet.setCachedMachineInfo(machineInfo)
219219

220220
fakeMirrorClient := podtest.NewFakeMirrorClient()
221221
secretManager := secret.NewSimpleSecretManager(kubelet.kubeClient)

0 commit comments

Comments
 (0)