mirror of https://github.com/k3s-io/k3s
Scheduler internal NodeTree thread-safe NumNodes
Signed-off-by: Adrián Orive <adrian.orive.oneca@gmail.com>pull/564/head
parent
468c99ea24
commit
c7cba7370f
|
@ -390,7 +390,7 @@ func (g *genericScheduler) findNodesThatFit(pod *v1.Pod, nodes []*v1.Node) ([]*v
|
|||
if len(g.predicates) == 0 {
|
||||
filtered = nodes
|
||||
} else {
|
||||
allNodes := int32(g.cache.NodeTree().NumNodes)
|
||||
allNodes := int32(g.cache.NodeTree().NumNodes())
|
||||
numNodesToFind := g.numFeasibleNodesToFind(allNodes)
|
||||
|
||||
// Create filtered list with enough space to avoid growing it
|
||||
|
|
|
@ -1056,7 +1056,7 @@ func TestNodeOperators(t *testing.T) {
|
|||
if !found {
|
||||
t.Errorf("Failed to find node %v in schedulerinternalcache.", node.Name)
|
||||
}
|
||||
if cache.nodeTree.NumNodes != 1 || cache.nodeTree.Next() != node.Name {
|
||||
if cache.nodeTree.NumNodes() != 1 || cache.nodeTree.Next() != node.Name {
|
||||
t.Errorf("cache.nodeTree is not updated correctly after adding node: %v", node.Name)
|
||||
}
|
||||
|
||||
|
@ -1099,7 +1099,7 @@ func TestNodeOperators(t *testing.T) {
|
|||
t.Errorf("Failed to update node in schedulercache:\n got: %+v \nexpected: %+v", got, expected)
|
||||
}
|
||||
// Check nodeTree after update
|
||||
if cache.nodeTree.NumNodes != 1 || cache.nodeTree.Next() != node.Name {
|
||||
if cache.nodeTree.NumNodes() != 1 || cache.nodeTree.Next() != node.Name {
|
||||
t.Errorf("unexpected cache.nodeTree after updating node: %v", node.Name)
|
||||
}
|
||||
|
||||
|
@ -1110,7 +1110,7 @@ func TestNodeOperators(t *testing.T) {
|
|||
}
|
||||
// Check nodeTree after remove. The node should be removed from the nodeTree even if there are
|
||||
// still pods on it.
|
||||
if cache.nodeTree.NumNodes != 0 || cache.nodeTree.Next() != "" {
|
||||
if cache.nodeTree.NumNodes() != 0 || cache.nodeTree.Next() != "" {
|
||||
t.Errorf("unexpected cache.nodeTree after removing node: %v", node.Name)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ type NodeTree struct {
|
|||
tree map[string]*nodeArray // a map from zone (region-zone) to an array of nodes in the zone.
|
||||
zones []string // a list of all the zones in the tree (keys)
|
||||
zoneIndex int
|
||||
NumNodes int
|
||||
numNodes int
|
||||
mu sync.RWMutex
|
||||
}
|
||||
|
||||
|
@ -91,7 +91,7 @@ func (nt *NodeTree) addNode(n *v1.Node) {
|
|||
nt.tree[zone] = &nodeArray{nodes: []string{n.Name}, lastIndex: 0}
|
||||
}
|
||||
klog.V(5).Infof("Added node %v in group %v to NodeTree", n.Name, zone)
|
||||
nt.NumNodes++
|
||||
nt.numNodes++
|
||||
}
|
||||
|
||||
// RemoveNode removes a node from the NodeTree.
|
||||
|
@ -111,7 +111,7 @@ func (nt *NodeTree) removeNode(n *v1.Node) error {
|
|||
nt.removeZone(zone)
|
||||
}
|
||||
klog.V(5).Infof("Removed node %v in group %v from NodeTree", n.Name, zone)
|
||||
nt.NumNodes--
|
||||
nt.numNodes--
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
@ -184,3 +184,10 @@ func (nt *NodeTree) Next() string {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// NumNodes returns the number of nodes.
|
||||
func (nt *NodeTree) NumNodes() int {
|
||||
nt.mu.RLock()
|
||||
defer nt.mu.RUnlock()
|
||||
return nt.numNodes
|
||||
}
|
||||
|
|
|
@ -116,8 +116,8 @@ func verifyNodeTree(t *testing.T, nt *NodeTree, expectedTree map[string]*nodeArr
|
|||
for _, na := range expectedTree {
|
||||
expectedNumNodes += len(na.nodes)
|
||||
}
|
||||
if nt.NumNodes != expectedNumNodes {
|
||||
t.Errorf("unexpected NodeTree.numNodes. Expected: %v, Got: %v", expectedNumNodes, nt.NumNodes)
|
||||
if numNodes := nt.NumNodes(); numNodes != expectedNumNodes {
|
||||
t.Errorf("unexpected NodeTree.numNodes. Expected: %v, Got: %v", expectedNumNodes, numNodes)
|
||||
}
|
||||
if !reflect.DeepEqual(nt.tree, expectedTree) {
|
||||
t.Errorf("The node tree is not the same as expected. Expected: %v, Got: %v", expectedTree, nt.tree)
|
||||
|
|
Loading…
Reference in New Issue