code: func New(c *Config) (*NetworkDB, error) {
  	// The garbage collection logic for entries leverage the presence of the network.
  	// For this reason the expiration time of the network is put slightly higher than the entry expiration so that
  	// there is at least 5 extra cycle to make sure that all the entries are properly deleted before deleting the network.
  	c.reapNetworkInterval = c.reapEntryInterval + 5*reapPeriod
  
  	nDB := &NetworkDB{
  		config:         c,
  		indexes:        make(map[int]*radix.Tree),
  		networks:       make(map[string]map[string]*network),
  		nodes:          make(map[string]*node),
  		failedNodes:    make(map[string]*node),
  		leftNodes:      make(map[string]*node),
  		networkNodes:   make(map[string][]string),
  		bulkSyncAckTbl: make(map[string]chan struct{}),
  		broadcaster:    events.NewBroadcaster(),
  	}
  
  	nDB.indexes[byTable] = radix.New()
  	nDB.indexes[byNetwork] = radix.New()
  
  	logrus.Infof("New memberlist node - Node:%v will use memberlist nodeID:%v with config:%+v", c.Hostname, c.NodeID, c)
  	if err := nDB.clusterInit(); err != nil {
  		return nil, err
  	}
  
  	return nDB, nil
  }
docs: // New creates a new instance of NetworkDB using the Config passed by
  // the caller.