Skip to content

Commit 1c548c3

Browse files
authored
Merge pull request kubernetes#93971 from Danil-Grigorev/vsphere-secret-deadlock
Refactor locks logic on registeredNodesLock to be non-blocking
2 parents 6da73aa + f67774b commit 1c548c3

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)