mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-22 03:11:40 +00:00
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.
This commit is contained in:
parent
b497fa1d34
commit
f67774bdb0
@ -259,6 +259,16 @@ func (nm *NodeManager) GetNode(nodeName k8stypes.NodeName) (v1.Node, error) {
|
||||
return *node, nil
|
||||
}
|
||||
|
||||
func (nm *NodeManager) getNodes() map[string]*v1.Node {
|
||||
nm.registeredNodesLock.RLock()
|
||||
defer nm.registeredNodesLock.RUnlock()
|
||||
registeredNodes := make(map[string]*v1.Node, len(nm.registeredNodes))
|
||||
for nodeName, node := range nm.registeredNodes {
|
||||
registeredNodes[nodeName] = node
|
||||
}
|
||||
return registeredNodes
|
||||
}
|
||||
|
||||
func (nm *NodeManager) addNode(node *v1.Node) {
|
||||
nm.registeredNodesLock.Lock()
|
||||
nm.registeredNodes[node.ObjectMeta.Name] = node
|
||||
@ -288,11 +298,9 @@ func (nm *NodeManager) GetNodeInfo(nodeName k8stypes.NodeName) (NodeInfo, error)
|
||||
//
|
||||
// This method is a getter but it can cause side-effect of updating NodeInfo objects.
|
||||
func (nm *NodeManager) GetNodeDetails() ([]NodeDetails, error) {
|
||||
nm.registeredNodesLock.Lock()
|
||||
defer nm.registeredNodesLock.Unlock()
|
||||
var nodeDetails []NodeDetails
|
||||
|
||||
for nodeName, nodeObj := range nm.registeredNodes {
|
||||
for nodeName, nodeObj := range nm.getNodes() {
|
||||
nodeInfo, err := nm.GetNodeInfoWithNodeObject(nodeObj)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -304,10 +312,7 @@ func (nm *NodeManager) GetNodeDetails() ([]NodeDetails, error) {
|
||||
}
|
||||
|
||||
func (nm *NodeManager) refreshNodes() (errList []error) {
|
||||
nm.registeredNodesLock.Lock()
|
||||
defer nm.registeredNodesLock.Unlock()
|
||||
|
||||
for nodeName := range nm.registeredNodes {
|
||||
for nodeName := range nm.getNodes() {
|
||||
nodeInfo, err := nm.getRefreshedNodeInfo(convertToK8sType(nodeName))
|
||||
if err != nil {
|
||||
errList = append(errList, err)
|
||||
|
Loading…
Reference in New Issue
Block a user