@@ -65,7 +65,7 @@ type ClusterManager interface {
65
65
66
66
type MemberlistManager struct {
67
67
sync.RWMutex
68
- members map [string ]HTTPNode // all members in the cluster, including this node.
68
+ members map [string ]HTTPNode // all members in the cluster, guaranteed to always have this node
69
69
nodeName string
70
70
list * memberlist.Memberlist
71
71
cfg * memberlist.Config
@@ -231,6 +231,12 @@ func (c *MemberlistManager) NotifyJoin(node *memberlist.Node) {
231
231
member .RemoteAddr = node .Addr .String ()
232
232
member .local = (member .Name == c .nodeName )
233
233
234
+ // we never want anyone else in the cluster to tell us anything about ourselves
235
+ // cause we know ourself best.
236
+ if member .local {
237
+ return
238
+ }
239
+
234
240
existing , ok := c .members [node .Name ]
235
241
if ok && ! member .Updated .After (existing .Updated ) {
236
242
return
@@ -240,6 +246,9 @@ func (c *MemberlistManager) NotifyJoin(node *memberlist.Node) {
240
246
}
241
247
242
248
func (c * MemberlistManager ) NotifyLeave (node * memberlist.Node ) {
249
+ if node .Name == c .nodeName {
250
+ return
251
+ }
243
252
eventsLeave .Inc ()
244
253
c .Lock ()
245
254
defer c .Unlock ()
@@ -260,8 +269,9 @@ func (c *MemberlistManager) NotifyUpdate(node *memberlist.Node) {
260
269
if err != nil {
261
270
log .Errorf ("CLU manager: Failed to decode node meta from %s: %s" , node .Name , err .Error ())
262
271
unmarshalErrUpdate .Inc ()
263
- // if the node is known, lets mark it as notReady until it starts sending valid data again.
264
- if p , ok := c .members [node .Name ]; ok {
272
+ // if the node is known and it is not thisNode,
273
+ // lets mark it as notReady until it starts sending valid data again.
274
+ if p , ok := c .members [node .Name ]; ok && node .Name != c .nodeName {
265
275
p .State = NodeNotReady
266
276
p .StateChange = time .Now ()
267
277
// we dont set Updated as we dont want the NotReady state to propagate incase we are the only node
@@ -274,6 +284,12 @@ func (c *MemberlistManager) NotifyUpdate(node *memberlist.Node) {
274
284
member .RemoteAddr = node .Addr .String ()
275
285
member .local = (member .Name == c .nodeName )
276
286
287
+ // we never want anyone else in the cluster to tell us anything about ourselves
288
+ // cause we know ourself best.
289
+ if member .local {
290
+ return
291
+ }
292
+
277
293
existing , ok := c .members [node .Name ]
278
294
if ok && ! member .Updated .After (existing .Updated ) {
279
295
return
0 commit comments