@@ -57,7 +57,7 @@ type NetworkDB struct {
5757 // A map of nodes which are participating in a given
5858 // network. The key is a network ID.
5959
60- networkNodes map [string ][] string
60+ networkNodes map [string ]map [ string ] bool
6161
6262 // A table of ack channels for every node from which we are
6363 // waiting for an ack.
@@ -167,7 +167,7 @@ func New(c *Config) (*NetworkDB, error) {
167167 nodes : make (map [string ]* node ),
168168 failedNodes : make (map [string ]* node ),
169169 leftNodes : make (map [string ]* node ),
170- networkNodes : make (map [string ][] string ),
170+ networkNodes : make (map [string ]map [ string ] bool ),
171171 bulkSyncAckTbl : make (map [string ]chan struct {}),
172172 broadcaster : events .NewBroadcaster (),
173173 }
@@ -308,17 +308,8 @@ func (nDB *NetworkDB) DeleteEntry(tname, nid, key string) error {
308308
309309func (nDB * NetworkDB ) deleteNetworkEntriesForNode (deletedNode string ) {
310310 nDB .Lock ()
311- for nid , nodes := range nDB .networkNodes {
312- updatedNodes := make ([]string , 0 , len (nodes ))
313- for _ , node := range nodes {
314- if node == deletedNode {
315- continue
316- }
317-
318- updatedNodes = append (updatedNodes , node )
319- }
320-
321- nDB .networkNodes [nid ] = updatedNodes
311+ for _ , nodes := range nDB .networkNodes {
312+ delete (nodes , deletedNode )
322313 }
323314
324315 delete (nDB .networks , deletedNode )
@@ -402,16 +393,15 @@ func (nDB *NetworkDB) JoinNetwork(nid string) error {
402393 },
403394 RetransmitMult : 4 ,
404395 }
405- nDB .networkNodes [nid ] = append (nDB .networkNodes [nid ], nDB .config .NodeName )
406- networkNodes := nDB .networkNodes [nid ]
396+ nDB .addNetworkNode (nid , nDB .config .NodeName )
407397 nDB .Unlock ()
408398
409399 if err := nDB .sendNetworkEvent (nid , NetworkEventTypeJoin , ltime ); err != nil {
410400 return fmt .Errorf ("failed to send leave network event for %s: %v" , nid , err )
411401 }
412402
413403 logrus .Debugf ("%s: joined network %s" , nDB .config .NodeName , nid )
414- if _ , err := nDB .bulkSync (networkNodes , true ); err != nil {
404+ if _ , err := nDB .bulkSync (nDB . getNetworkNodes ( nid ) , true ); err != nil {
415405 logrus .Errorf ("Error bulk syncing while joining network %s: %v" , nid , err )
416406 }
417407
@@ -481,29 +471,19 @@ func (nDB *NetworkDB) LeaveNetwork(nid string) error {
481471// in the passed network only if it is not already present. Caller
482472// should hold the NetworkDB lock while calling this
483473func (nDB * NetworkDB ) addNetworkNode (nid string , nodeName string ) {
484- nodes := nDB .networkNodes [nid ]
485- for _ , node := range nodes {
486- if node == nodeName {
487- return
488- }
474+ networkNodes , ok := nDB .networkNodes [nid ]
475+ if ! ok {
476+ networkNodes = make (map [string ]bool )
477+ nDB .networkNodes [nid ] = networkNodes
489478 }
490-
491- nDB .networkNodes [nid ] = append (nDB .networkNodes [nid ], nodeName )
479+ networkNodes [nDB .config .NodeName ] = true
492480}
493481
494482// Deletes the node from the list of nodes which participate in the
495483// passed network. Caller should hold the NetworkDB lock while calling
496484// this
497485func (nDB * NetworkDB ) deleteNetworkNode (nid string , nodeName string ) {
498- nodes := nDB .networkNodes [nid ]
499- for i , name := range nodes {
500- if name == nodeName {
501- nodes [i ] = nodes [len (nodes )- 1 ]
502- nodes = nodes [:len (nodes )- 1 ]
503- break
504- }
505- }
506- nDB .networkNodes [nid ] = nodes
486+ delete (nDB .networkNodes [nid ], nodeName )
507487}
508488
509489// findCommonnetworks find the networks that both this node and the
@@ -557,3 +537,13 @@ func (nDB *NetworkDB) updateLocalTableTime() {
557537 return false
558538 })
559539}
540+
541+ // getNetworkNodes gets the list of nodes which participate
542+ // in the passed network.
543+ func (nDB * NetworkDB ) getNetworkNodes (nid string ) []string {
544+ names := []string {}
545+ for name := range nDB .networkNodes [nid ] {
546+ names = append (names , name )
547+ }
548+ return names
549+ }
0 commit comments