MCPcopy
hub / github.com/hashicorp/memberlist / newMemberlist

Function newMemberlist

memberlist.go:100–241  ·  view source on GitHub ↗

newMemberlist creates the network listeners. Does not schedule execution of background maintenance.

(conf *Config)

Source from the content-addressed store, hash-verified

98// newMemberlist creates the network listeners.
99// Does not schedule execution of background maintenance.
100func 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

Callers 3

GetMemberlistFunction · 0.85
CreateFunction · 0.85
HostMemberlistFunction · 0.85

Calls 14

GetAutoBindPortMethod · 0.95
estNumNodesMethod · 0.95
refreshAdvertiseMethod · 0.95
streamListenMethod · 0.95
packetListenMethod · 0.95
packetHandlerMethod · 0.95
NewKeyringFunction · 0.85
NewNetTransportFunction · 0.85
newAwarenessFunction · 0.85
ErrorfMethod · 0.80
AddKeyMethod · 0.80

Tested by 2

GetMemberlistFunction · 0.68
HostMemberlistFunction · 0.68

Used in the wild real call sites across dependent graphs

searching dependent graphs…