mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-31 15:25:57 +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
|
factory PluginFactory
|
||||||
fs utilfs.Filesystem
|
fs utilfs.Filesystem
|
||||||
probeAllNeeded bool
|
probeAllNeeded bool
|
||||||
|
probeAllOnce sync.Once
|
||||||
eventsMap map[string]volume.ProbeOperation // the key is the driver directory path, the value is the corresponding operation
|
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 {
|
func (prober *flexVolumeProber) Init() error {
|
||||||
prober.testAndSetProbeAllNeeded(true)
|
prober.probeAllNeeded = true
|
||||||
prober.eventsMap = map[string]volume.ProbeOperation{}
|
prober.eventsMap = map[string]volume.ProbeOperation{}
|
||||||
|
|
||||||
if err := prober.createPluginDir(); err != nil {
|
if err := prober.createPluginDir(); err != nil {
|
||||||
@ -68,23 +69,18 @@ func (prober *flexVolumeProber) Init() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// If probeAllNeeded is true, probe all pluginDir
|
// If we haven't yet done so, probe all pluginDir
|
||||||
// else probe events in eventsMap
|
// else probe events in eventsMap
|
||||||
func (prober *flexVolumeProber) Probe() (events []volume.ProbeEvent, err error) {
|
func (prober *flexVolumeProber) Probe() (events []volume.ProbeEvent, err error) {
|
||||||
prober.mutex.RLock()
|
probedAll := false
|
||||||
if prober.probeAllNeeded {
|
prober.probeAllOnce.Do(func() {
|
||||||
prober.mutex.RUnlock()
|
events, err = prober.probeAll()
|
||||||
prober.mutex.Lock()
|
probedAll = true
|
||||||
// check again, if multiple readers got through the first if, only one should probeAll
|
prober.probeAllNeeded = false
|
||||||
if prober.probeAllNeeded {
|
})
|
||||||
events, err = prober.probeAll()
|
if probedAll {
|
||||||
prober.probeAllNeeded = false
|
return events, err
|
||||||
prober.mutex.Unlock()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
prober.mutex.Unlock()
|
|
||||||
}
|
}
|
||||||
prober.mutex.RUnlock()
|
|
||||||
return prober.probeMap()
|
return prober.probeMap()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -287,10 +283,3 @@ func (prober *flexVolumeProber) createPluginDir() error {
|
|||||||
|
|
||||||
return nil
|
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