Skip to content

Commit a13e9f6

Browse files
committed
use sync.Once instead of a mutex
Signed-off-by: Olga Shestopalova <[email protected]>
1 parent 0746672 commit a13e9f6

File tree

1 file changed

+11
-22
lines changed

1 file changed

+11
-22
lines changed

pkg/volume/flexvolume/probe.go

Lines changed: 11 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ type flexVolumeProber struct {
4040
factory PluginFactory
4141
fs utilfs.Filesystem
4242
probeAllNeeded bool
43+
probeAllOnce sync.Once
4344
eventsMap map[string]volume.ProbeOperation // the key is the driver directory path, the value is the corresponding operation
4445
}
4546

@@ -55,7 +56,7 @@ func GetDynamicPluginProber(pluginDir string, runner exec.Interface) volume.Dyna
5556
}
5657

5758
func (prober *flexVolumeProber) Init() error {
58-
prober.testAndSetProbeAllNeeded(true)
59+
prober.probeAllNeeded = true
5960
prober.eventsMap = map[string]volume.ProbeOperation{}
6061

6162
if err := prober.createPluginDir(); err != nil {
@@ -68,23 +69,18 @@ func (prober *flexVolumeProber) Init() error {
6869
return nil
6970
}
7071

71-
// If probeAllNeeded is true, probe all pluginDir
72+
// If we haven't yet done so, probe all pluginDir
7273
// else probe events in eventsMap
7374
func (prober *flexVolumeProber) Probe() (events []volume.ProbeEvent, err error) {
74-
prober.mutex.RLock()
75-
if prober.probeAllNeeded {
76-
prober.mutex.RUnlock()
77-
prober.mutex.Lock()
78-
// check again, if multiple readers got through the first if, only one should probeAll
79-
if prober.probeAllNeeded {
80-
events, err = prober.probeAll()
81-
prober.probeAllNeeded = false
82-
prober.mutex.Unlock()
83-
return
84-
}
85-
prober.mutex.Unlock()
75+
probedAll := false
76+
prober.probeAllOnce.Do(func() {
77+
events, err = prober.probeAll()
78+
probedAll = true
79+
prober.probeAllNeeded = false
80+
})
81+
if probedAll {
82+
return events, err
8683
}
87-
prober.mutex.RUnlock()
8884
return prober.probeMap()
8985
}
9086

@@ -287,10 +283,3 @@ func (prober *flexVolumeProber) createPluginDir() error {
287283

288284
return nil
289285
}
290-
291-
func (prober *flexVolumeProber) testAndSetProbeAllNeeded(newval bool) (oldval bool) {
292-
prober.mutex.Lock()
293-
defer prober.mutex.Unlock()
294-
oldval, prober.probeAllNeeded = prober.probeAllNeeded, newval
295-
return
296-
}

0 commit comments

Comments
 (0)