diff --git a/pkg/kubelet/volumemanager/reconciler/reconciler_common.go b/pkg/kubelet/volumemanager/reconciler/reconciler_common.go index 2894dc5238d..7fb53f9ce94 100644 --- a/pkg/kubelet/volumemanager/reconciler/reconciler_common.go +++ b/pkg/kubelet/volumemanager/reconciler/reconciler_common.go @@ -18,6 +18,7 @@ package reconciler import ( "fmt" + "sync" "time" v1 "k8s.io/api/core/v1" @@ -139,10 +140,12 @@ type reconciler struct { volumePluginMgr *volumepkg.VolumePluginMgr skippedDuringReconstruction map[v1.UniqueVolumeName]*globalVolumeInfo kubeletPodsDir string - timeOfLastSync time.Time - volumesFailedReconstruction []podVolume - volumesNeedDevicePath []v1.UniqueVolumeName - volumesNeedReportedInUse []v1.UniqueVolumeName + // lock protects timeOfLastSync for updating and checking + timeOfLastSyncLock sync.Mutex + timeOfLastSync time.Time + volumesFailedReconstruction []podVolume + volumesNeedDevicePath []v1.UniqueVolumeName + volumesNeedReportedInUse []v1.UniqueVolumeName } func (rc *reconciler) Run(stopCh <-chan struct{}) { diff --git a/pkg/kubelet/volumemanager/reconciler/reconstruct_common.go b/pkg/kubelet/volumemanager/reconciler/reconstruct_common.go index 73bb15934fa..220c917878e 100644 --- a/pkg/kubelet/volumemanager/reconciler/reconstruct_common.go +++ b/pkg/kubelet/volumemanager/reconciler/reconstruct_common.go @@ -72,10 +72,14 @@ type globalVolumeInfo struct { } func (rc *reconciler) updateLastSyncTime() { + rc.timeOfLastSyncLock.Lock() + defer rc.timeOfLastSyncLock.Unlock() rc.timeOfLastSync = time.Now() } func (rc *reconciler) StatesHasBeenSynced() bool { + rc.timeOfLastSyncLock.Lock() + defer rc.timeOfLastSyncLock.Unlock() return !rc.timeOfLastSync.IsZero() }