Skip to content

Commit f67774b

Browse files
author
Danil-Grigorev
committed
Refactor locks on registeredNodesLocks
Their presence brought no need, as internal calls were already using atomic operatons such as addNode or GetNode. This lock, instead was blocking volume creation, and destroying the ability to provision volume with `thin` SC. Now the node map will be copied, and all group operatons will be executed on a copy, leaving lock for others to use.
1 parent b497fa1 commit f67774b

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

staging/src/k8s.io/legacy-cloud-providers/vsphere/nodemanager.go

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,16 @@ func (nm *NodeManager) GetNode(nodeName k8stypes.NodeName) (v1.Node, error) {
259259
return *node, nil
260260
}
261261

262+
func (nm *NodeManager) getNodes() map[string]*v1.Node {
263+
nm.registeredNodesLock.RLock()
264+
defer nm.registeredNodesLock.RUnlock()
265+
registeredNodes := make(map[string]*v1.Node, len(nm.registeredNodes))
266+
for nodeName, node := range nm.registeredNodes {
267+
registeredNodes[nodeName] = node
268+
}
269+
return registeredNodes
270+
}
271+
262272
func (nm *NodeManager) addNode(node *v1.Node) {
263273
nm.registeredNodesLock.Lock()
264274
nm.registeredNodes[node.ObjectMeta.Name] = node
@@ -288,11 +298,9 @@ func (nm *NodeManager) GetNodeInfo(nodeName k8stypes.NodeName) (NodeInfo, error)
288298
//
289299
// This method is a getter but it can cause side-effect of updating NodeInfo objects.
290300
func (nm *NodeManager) GetNodeDetails() ([]NodeDetails, error) {
291-
nm.registeredNodesLock.Lock()
292-
defer nm.registeredNodesLock.Unlock()
293301
var nodeDetails []NodeDetails
294302

295-
for nodeName, nodeObj := range nm.registeredNodes {
303+
for nodeName, nodeObj := range nm.getNodes() {
296304
nodeInfo, err := nm.GetNodeInfoWithNodeObject(nodeObj)
297305
if err != nil {
298306
return nil, err
@@ -304,10 +312,7 @@ func (nm *NodeManager) GetNodeDetails() ([]NodeDetails, error) {
304312
}
305313

306314
func (nm *NodeManager) refreshNodes() (errList []error) {
307-
nm.registeredNodesLock.Lock()
308-
defer nm.registeredNodesLock.Unlock()
309-
310-
for nodeName := range nm.registeredNodes {
315+
for nodeName := range nm.getNodes() {
311316
nodeInfo, err := nm.getRefreshedNodeInfo(convertToK8sType(nodeName))
312317
if err != nil {
313318
errList = append(errList, err)

0 commit comments

Comments
 (0)