From b1818e4a5ff5b37050cbc4d83c9597683142a93c Mon Sep 17 00:00:00 2001 From: networkop Date: Fri, 16 Jul 2021 10:45:58 +0100 Subject: [PATCH] fixing a case with no serialWorkers --- clab/clab.go | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/clab/clab.go b/clab/clab.go index 81d019256..0e9548658 100644 --- a/clab/clab.go +++ b/clab/clab.go @@ -171,10 +171,6 @@ func (c *CLab) GlobalRuntime() runtime.ContainerRuntime { func (c *CLab) CreateNodes(ctx context.Context, maxWorkers uint, serialNodes map[string]struct{}) { wg := new(sync.WaitGroup) - wg.Add(int(maxWorkers)) - if len(serialNodes) > 0 { - wg.Add(1) - } concurrentChan := make(chan nodes.Node) serialChan := make(chan nodes.Node) @@ -208,12 +204,18 @@ func (c *CLab) CreateNodes(ctx context.Context, maxWorkers uint, serialNodes map } // start concurrent workers + wg.Add(int(maxWorkers)) + // it's safe to not check if all nodes are serial because in that case + // maxWorkers will be 0 for i := uint(0); i < maxWorkers; i++ { go workerFunc(i, concurrentChan, wg) } // start the serial worker - go workerFunc(maxWorkers, serialChan, wg) + if len(serialNodes) > 0 { + wg.Add(1) + go workerFunc(maxWorkers, serialChan, wg) + } // send nodes to workers for _, n := range c.Nodes { @@ -289,10 +291,6 @@ func (c *CLab) CreateLinks(ctx context.Context, workers uint, postdeploy bool) { func (c *CLab) DeleteNodes(ctx context.Context, workers uint, deleteCandidates map[string]nodes.Node, serialNodes map[string]struct{}) { wg := new(sync.WaitGroup) - wg.Add(int(workers)) - if len(serialNodes) > 0 { - wg.Add(1) - } concurrentChan := make(chan nodes.Node) serialChan := make(chan nodes.Node) @@ -317,12 +315,16 @@ func (c *CLab) DeleteNodes(ctx context.Context, workers uint, deleteCandidates m } // start concurrent workers + wg.Add(int(workers)) for i := uint(0); i < workers; i++ { go workerFunc(i, concurrentChan, wg) } // start the serial worker - go workerFunc(workers, serialChan, wg) + if len(serialNodes) > 0 { + wg.Add(1) + go workerFunc(workers, serialChan, wg) + } // send nodes to workers for _, n := range c.Nodes {