cmd/swarm: speed up StartNewNodes() by parallelization

Reduce cluster startup time from 13s to 7s.
This commit is contained in:
Ferenc Szabo 2019-03-19 15:18:33 +01:00
parent 985f2b8ceb
commit 5facd22fa2

View file

@ -165,10 +165,8 @@ outer:
} }
func (c *testCluster) Shutdown() { func (c *testCluster) Shutdown() {
for _, node := range c.Nodes { c.Stop()
node.Shutdown() c.Cleanup()
}
os.RemoveAll(c.TmpDir)
} }
func (c *testCluster) Stop() { func (c *testCluster) Stop() {
@ -179,16 +177,35 @@ func (c *testCluster) Stop() {
func (c *testCluster) StartNewNodes(t *testing.T, size int) { func (c *testCluster) StartNewNodes(t *testing.T, size int) {
c.Nodes = make([]*testNode, 0, size) c.Nodes = make([]*testNode, 0, size)
errors := make(chan error, size)
nodes := make(chan *testNode, size)
for i := 0; i < size; i++ { for i := 0; i < size; i++ {
dir := filepath.Join(c.TmpDir, fmt.Sprintf("swarm%02d", i)) go func(nodeIndex int) {
if err := os.Mkdir(dir, 0700); err != nil { dir := filepath.Join(c.TmpDir, fmt.Sprintf("swarm%02d", nodeIndex))
t.Fatal(err) if err := os.Mkdir(dir, 0700); err != nil {
errors <- err
return
}
node := newTestNode(t, dir)
node.Name = fmt.Sprintf("swarm%02d", nodeIndex)
nodes <- node
}(i)
}
for i := 0; i < size; i++ {
select {
case node := <-nodes:
c.Nodes = append(c.Nodes, node)
case err := <-errors:
t.Error(err)
} }
}
node := newTestNode(t, dir) if t.Failed() {
node.Name = fmt.Sprintf("swarm%02d", i) c.Shutdown()
t.FailNow()
c.Nodes = append(c.Nodes, node)
} }
} }