From 84b8f181e4dc2c907a3f4c629b7ff5ebd44e0a2a Mon Sep 17 00:00:00 2001 From: niranjandarshann Date: Wed, 22 Jan 2025 16:10:12 +0530 Subject: [PATCH 1/2] Concurrentmap Iteration --- pkg/volume/plugins.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pkg/volume/plugins.go b/pkg/volume/plugins.go index de12664dc5e..8d2121f6d16 100644 --- a/pkg/volume/plugins.go +++ b/pkg/volume/plugins.go @@ -653,7 +653,12 @@ func (pm *VolumePluginMgr) FindPluginBySpec(spec *Spec) (VolumePlugin, error) { } } + pm.mutex.RUnlock() + pm.mutex.Lock() pm.refreshProbedPlugins() + pm.mutex.Unlock() + pm.mutex.RLock() + for _, plugin := range pm.probedPlugins { if plugin.CanSupport(spec) { match = plugin @@ -681,7 +686,11 @@ func (pm *VolumePluginMgr) FindPluginByName(name string) (VolumePlugin, error) { match = v } + pm.mutex.RUnlock() + pm.mutex.Lock() pm.refreshProbedPlugins() + pm.mutex.Unlock() + pm.mutex.RLock() if plugin, found := pm.probedPlugins[name]; found { if match != nil { return nil, fmt.Errorf("multiple volume plugins matched: %s and %s", match.GetPluginName(), plugin.GetPluginName()) From 7f766762d9103e5df3b40b3fd3401228f7a82f93 Mon Sep 17 00:00:00 2001 From: niranjandarshann Date: Fri, 24 Jan 2025 21:43:18 +0530 Subject: [PATCH 2/2] Updated Concurrentmap iter --- pkg/volume/plugins.go | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/pkg/volume/plugins.go b/pkg/volume/plugins.go index 8d2121f6d16..a02bd84c03c 100644 --- a/pkg/volume/plugins.go +++ b/pkg/volume/plugins.go @@ -637,9 +637,8 @@ func (pm *VolumePluginMgr) initProbedPlugin(probedPlugin VolumePlugin) error { // specification. If no plugins can support or more than one plugin can // support it, return error. func (pm *VolumePluginMgr) FindPluginBySpec(spec *Spec) (VolumePlugin, error) { - pm.mutex.RLock() - defer pm.mutex.RUnlock() - + pm.mutex.Lock() + defer pm.mutex.Unlock() if spec == nil { return nil, fmt.Errorf("could not find plugin because volume spec is nil") } @@ -652,12 +651,7 @@ func (pm *VolumePluginMgr) FindPluginBySpec(spec *Spec) (VolumePlugin, error) { matchedPluginNames = append(matchedPluginNames, v.GetPluginName()) } } - - pm.mutex.RUnlock() - pm.mutex.Lock() pm.refreshProbedPlugins() - pm.mutex.Unlock() - pm.mutex.RLock() for _, plugin := range pm.probedPlugins { if plugin.CanSupport(spec) { @@ -678,19 +672,14 @@ func (pm *VolumePluginMgr) FindPluginBySpec(spec *Spec) (VolumePlugin, error) { // FindPluginByName fetches a plugin by name. If no plugin is found, returns error. func (pm *VolumePluginMgr) FindPluginByName(name string) (VolumePlugin, error) { - pm.mutex.RLock() - defer pm.mutex.RUnlock() + pm.mutex.Lock() + defer pm.mutex.Unlock() var match VolumePlugin if v, found := pm.plugins[name]; found { match = v } - - pm.mutex.RUnlock() - pm.mutex.Lock() pm.refreshProbedPlugins() - pm.mutex.Unlock() - pm.mutex.RLock() if plugin, found := pm.probedPlugins[name]; found { if match != nil { return nil, fmt.Errorf("multiple volume plugins matched: %s and %s", match.GetPluginName(), plugin.GetPluginName()) @@ -716,6 +705,7 @@ func (pm *VolumePluginMgr) refreshProbedPlugins() { // because the probe function can return a list of valid plugins // even when an error is present we still must add the plugins // or they will be skipped because each event only fires once + for _, event := range events { if event.Op == ProbeAddOrUpdate { if err := pm.initProbedPlugin(event.Plugin); err != nil {