From 619c839dcec34a02743be9e494f8b673e168b5a2 Mon Sep 17 00:00:00 2001
From: Benjamin Wenger <ben@elixxir.ioo>
Date: Tue, 9 Mar 2021 13:32:17 -0800
Subject: [PATCH] made the number of parallel node registrations configurable
 and made it default of 8 to speed up registration with a large network

---
 interfaces/params/network.go |  3 +++
 network/manager.go           |  2 +-
 network/node/register.go     | 15 ++++++++++-----
 3 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/interfaces/params/network.go b/interfaces/params/network.go
index f3de8ea10..b73efc7a3 100644
--- a/interfaces/params/network.go
+++ b/interfaces/params/network.go
@@ -21,6 +21,8 @@ type Network struct {
 	// Longest delay between network events for Health tracker to denote that
 	// the network is in a bad state
 	NetworkHealthTimeout time.Duration
+	//Number of parallel node registration the client is capable of
+	ParallelNodeRegistrations uint
 
 	Rounds
 	Messages
@@ -36,6 +38,7 @@ func GetDefaultNetwork() Network {
 		RegNodesBufferLen:    500,
 		NetworkHealthTimeout: 30 * time.Second,
 		E2EParams:            GetDefaultE2ESessionParams(),
+		ParallelNodeRegistrations: 8,
 	}
 	n.Rounds = GetDefaultRounds()
 	n.Messages = GetDefaultMessage()
diff --git a/network/manager.go b/network/manager.go
index 8e929f2e9..a9c9f1ea3 100644
--- a/network/manager.go
+++ b/network/manager.go
@@ -124,7 +124,7 @@ func (m *manager) Follow(report interfaces.ClientErrorReport) (stoppable.Stoppab
 
 	// Node Updates
 	multi.Add(node.StartRegistration(m.Instance, m.Session, m.Rng,
-		m.Comms, m.NodeRegistration)) // Adding/Keys
+		m.Comms, m.NodeRegistration, m.param.ParallelNodeRegistrations)) // Adding/Keys
 	//TODO-remover
 	//m.runners.Add(StartNodeRemover(m.Context))        // Removing
 
diff --git a/network/node/register.go b/network/node/register.go
index 9393ec97e..fa1690aa2 100644
--- a/network/node/register.go
+++ b/network/node/register.go
@@ -41,14 +41,20 @@ type RegisterNodeCommsInterface interface {
 }
 
 func StartRegistration(instance *network.Instance, session *storage.Session, rngGen *fastRNG.StreamGenerator, comms RegisterNodeCommsInterface,
-	c chan network.NodeGateway) stoppable.Stoppable {
-	stop := stoppable.NewSingle("NodeRegistration")
+	c chan network.NodeGateway, numParallel uint) stoppable.Stoppable {
+
+	multi := stoppable.NewMulti("NodeRegistrations")
 
 	instance.SetAddGatewayChan(c)
 
-	go registerNodes(session, rngGen, comms, stop, c)
+	for i:=uint(0);i<numParallel;i++{
+		stop := stoppable.NewSingle(fmt.Sprintf("NodeRegistration %d", i))
+
+		go registerNodes(session, rngGen, comms, stop, c)
+		multi.Add(stop)
+	}
 
-	return stop
+	return multi
 }
 
 func registerNodes(session *storage.Session, rngGen *fastRNG.StreamGenerator, comms RegisterNodeCommsInterface,
@@ -74,7 +80,6 @@ func registerNodes(session *storage.Session, rngGen *fastRNG.StreamGenerator, co
 		case <-t.C:
 		}
 	}
-
 }
 
 //registerWithNode serves as a helper for RegisterWithNodes
-- 
GitLab