newMemberlist creates the network listeners. Does not schedule execution of background maintenance.
(conf *Config)
| 98 | // newMemberlist creates the network listeners. |
| 99 | // Does not schedule execution of background maintenance. |
| 100 | func newMemberlist(conf *Config) (*Memberlist, error) { |
| 101 | if conf.ProtocolVersion < ProtocolVersionMin { |
| 102 | return nil, fmt.Errorf("protocol version '%d' too low. Must be in range: [%d, %d]", |
| 103 | conf.ProtocolVersion, ProtocolVersionMin, ProtocolVersionMax) |
| 104 | } else if conf.ProtocolVersion > ProtocolVersionMax { |
| 105 | return nil, fmt.Errorf("protocol version '%d' too high. Must be in range: [%d, %d]", |
| 106 | conf.ProtocolVersion, ProtocolVersionMin, ProtocolVersionMax) |
| 107 | } |
| 108 | |
| 109 | if len(conf.SecretKey) > 0 { |
| 110 | if conf.Keyring == nil { |
| 111 | keyring, err := NewKeyring(nil, conf.SecretKey) |
| 112 | if err != nil { |
| 113 | return nil, err |
| 114 | } |
| 115 | conf.Keyring = keyring |
| 116 | } else { |
| 117 | if err := conf.Keyring.AddKey(conf.SecretKey); err != nil { |
| 118 | return nil, err |
| 119 | } |
| 120 | if err := conf.Keyring.UseKey(conf.SecretKey); err != nil { |
| 121 | return nil, err |
| 122 | } |
| 123 | } |
| 124 | } |
| 125 | |
| 126 | if conf.LogOutput != nil && conf.Logger != nil { |
| 127 | return nil, fmt.Errorf("cannot specify both LogOutput and Logger; please choose a single log configuration setting") |
| 128 | } |
| 129 | |
| 130 | logDest := conf.LogOutput |
| 131 | if logDest == nil { |
| 132 | logDest = os.Stderr |
| 133 | } |
| 134 | |
| 135 | logger := conf.Logger |
| 136 | if logger == nil { |
| 137 | logger = log.New(logDest, "", log.LstdFlags) |
| 138 | } |
| 139 | |
| 140 | // Set up a network transport by default if a custom one wasn't given |
| 141 | // by the config. |
| 142 | transport := conf.Transport |
| 143 | if transport == nil { |
| 144 | nc := &NetTransportConfig{ |
| 145 | BindAddrs: []string{conf.BindAddr}, |
| 146 | BindPort: conf.BindPort, |
| 147 | Logger: logger, |
| 148 | MetricLabels: conf.MetricLabels, |
| 149 | } |
| 150 | |
| 151 | // See comment below for details about the retry in here. |
| 152 | makeNetRetry := func(limit int) (*NetTransport, error) { |
| 153 | var err error |
| 154 | for try := 0; try < limit; try++ { |
| 155 | var nt *NetTransport |
| 156 | if nt, err = NewNetTransport(nc); err == nil { |
| 157 | return nt, nil |
searching dependent graphs…