@@ -40,6 +40,7 @@ type flexVolumeProber struct {
40
40
factory PluginFactory
41
41
fs utilfs.Filesystem
42
42
probeAllNeeded bool
43
+ probeAllOnce sync.Once
43
44
eventsMap map [string ]volume.ProbeOperation // the key is the driver directory path, the value is the corresponding operation
44
45
}
45
46
@@ -55,7 +56,7 @@ func GetDynamicPluginProber(pluginDir string, runner exec.Interface) volume.Dyna
55
56
}
56
57
57
58
func (prober * flexVolumeProber ) Init () error {
58
- prober .testAndSetProbeAllNeeded ( true )
59
+ prober .probeAllNeeded = true
59
60
prober .eventsMap = map [string ]volume.ProbeOperation {}
60
61
61
62
if err := prober .createPluginDir (); err != nil {
@@ -68,23 +69,18 @@ func (prober *flexVolumeProber) Init() error {
68
69
return nil
69
70
}
70
71
71
- // If probeAllNeeded is true , probe all pluginDir
72
+ // If we haven't yet done so , probe all pluginDir
72
73
// else probe events in eventsMap
73
74
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
86
83
}
87
- prober .mutex .RUnlock ()
88
84
return prober .probeMap ()
89
85
}
90
86
@@ -287,10 +283,3 @@ func (prober *flexVolumeProber) createPluginDir() error {
287
283
288
284
return nil
289
285
}
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