mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-30 06:54:01 +00:00
use sync.Once instead of a mutex
Signed-off-by: Olga Shestopalova <oshestopalova1@gmail.com>
This commit is contained in:
parent
0746672679
commit
a13e9f6457
@ -40,6 +40,7 @@ type flexVolumeProber struct {
|
||||
factory PluginFactory
|
||||
fs utilfs.Filesystem
|
||||
probeAllNeeded bool
|
||||
probeAllOnce sync.Once
|
||||
eventsMap map[string]volume.ProbeOperation // the key is the driver directory path, the value is the corresponding operation
|
||||
}
|
||||
|
||||
@ -55,7 +56,7 @@ func GetDynamicPluginProber(pluginDir string, runner exec.Interface) volume.Dyna
|
||||
}
|
||||
|
||||
func (prober *flexVolumeProber) Init() error {
|
||||
prober.testAndSetProbeAllNeeded(true)
|
||||
prober.probeAllNeeded = true
|
||||
prober.eventsMap = map[string]volume.ProbeOperation{}
|
||||
|
||||
if err := prober.createPluginDir(); err != nil {
|
||||
@ -68,23 +69,18 @@ func (prober *flexVolumeProber) Init() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// If probeAllNeeded is true, probe all pluginDir
|
||||
// If we haven't yet done so, probe all pluginDir
|
||||
// else probe events in eventsMap
|
||||
func (prober *flexVolumeProber) Probe() (events []volume.ProbeEvent, err error) {
|
||||
prober.mutex.RLock()
|
||||
if prober.probeAllNeeded {
|
||||
prober.mutex.RUnlock()
|
||||
prober.mutex.Lock()
|
||||
// check again, if multiple readers got through the first if, only one should probeAll
|
||||
if prober.probeAllNeeded {
|
||||
events, err = prober.probeAll()
|
||||
prober.probeAllNeeded = false
|
||||
prober.mutex.Unlock()
|
||||
return
|
||||
}
|
||||
prober.mutex.Unlock()
|
||||
probedAll := false
|
||||
prober.probeAllOnce.Do(func() {
|
||||
events, err = prober.probeAll()
|
||||
probedAll = true
|
||||
prober.probeAllNeeded = false
|
||||
})
|
||||
if probedAll {
|
||||
return events, err
|
||||
}
|
||||
prober.mutex.RUnlock()
|
||||
return prober.probeMap()
|
||||
}
|
||||
|
||||
@ -287,10 +283,3 @@ func (prober *flexVolumeProber) createPluginDir() error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (prober *flexVolumeProber) testAndSetProbeAllNeeded(newval bool) (oldval bool) {
|
||||
prober.mutex.Lock()
|
||||
defer prober.mutex.Unlock()
|
||||
oldval, prober.probeAllNeeded = prober.probeAllNeeded, newval
|
||||
return
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user