@@ -280,19 +280,12 @@ func (d *gossipDiscoveryImpl) handleAliveMessage(m *proto.AliveMessage) {
280
280
d .logger .Debug ("Got alive message about ourselves," , m )
281
281
return
282
282
}
283
- endpoint := m .Membership .Endpoint
284
283
ts := m .Timestamp
285
- meta := m .Membership .Metadata
286
284
287
285
d .lock .RLock ()
288
286
_ , known := d .id2Member [id ]
289
287
d .lock .RUnlock ()
290
288
291
- netMember := & NetworkMember {
292
- Id : id ,
293
- Endpoint : endpoint ,
294
- Metadata : meta ,
295
- }
296
289
297
290
if ! known {
298
291
d .learnNewMembers ([]* proto.AliveMessage {m }, []* proto.AliveMessage {})
@@ -316,7 +309,7 @@ func (d *gossipDiscoveryImpl) handleAliveMessage(m *proto.AliveMessage) {
316
309
317
310
if ! isAlive && uint64 (lastDeadTS .incTime .Nanosecond ()) <= ts .IncNumber && lastDeadTS .seqNum < ts .SeqNum {
318
311
// resurrect peer
319
- d .resurrectMember (id , netMember , * ts )
312
+ d .resurrectMember (m , * ts )
320
313
return
321
314
}
322
315
@@ -332,30 +325,37 @@ func (d *gossipDiscoveryImpl) handleAliveMessage(m *proto.AliveMessage) {
332
325
// else, ignore the message because it is too old
333
326
}
334
327
335
- func (d * gossipDiscoveryImpl ) resurrectMember (id string , member * NetworkMember , t proto.PeerTime ) {
336
- d .logger .Info ("Entering, id = " , id , "member = " , member , "t = " , t )
328
+ func (d * gossipDiscoveryImpl ) resurrectMember (m * proto. AliveMessage , t proto.PeerTime ) {
329
+ d .logger .Info ("Entering," , m , t )
337
330
defer d .logger .Info ("Exiting" )
338
331
d .lock .Lock ()
339
332
defer d .lock .Unlock ()
340
333
334
+ id := m .Membership .Id
335
+
341
336
d .aliveLastTS [id ] = & timestamp {
342
337
lastSeen : time .Now (),
343
338
seqNum : t .SeqNum ,
344
339
incTime : tsToTime (t .IncNumber ),
345
340
}
346
341
347
- d .id2Member [id ] = member
342
+ d .id2Member [id ] = & NetworkMember {
343
+ Id : id ,
344
+ Endpoint : m .Membership .Endpoint ,
345
+ Metadata : m .Membership .Metadata ,
346
+ }
348
347
delete (d .deadLastTS , id )
349
348
aliveMsgWithId := & proto.AliveMessage {
350
349
Membership : & proto.Member {Id : id },
351
350
}
352
351
352
+ // If the member is in the dead list, delete it from there
353
353
i := util .IndexInSlice (d .cachedMembership .Dead , aliveMsgWithId , sameIdAliveMessages )
354
354
if i != - 1 {
355
- resurrectedMember := d .cachedMembership .Dead [i ]
356
355
d .cachedMembership .Dead = append (d .cachedMembership .Dead [:i ], d .cachedMembership .Dead [i + 1 :]... )
357
- d .cachedMembership .Alive = append (d .cachedMembership .Alive , resurrectedMember )
358
356
}
357
+ // add the member to the alive list
358
+ d .cachedMembership .Alive = append (d .cachedMembership .Alive , m )
359
359
}
360
360
361
361
func (d * gossipDiscoveryImpl ) periodicalReconnectToDead () {
@@ -467,9 +467,12 @@ func (d *gossipDiscoveryImpl) expireDeadMembers(dead []string) {
467
467
for _ , id := range dead {
468
468
d .comm .CloseConn (id )
469
469
// move lastTS from alive to dead
470
- lastTS := d .aliveLastTS [id ]
471
- d .deadLastTS [id ] = lastTS
472
- delete (d .aliveLastTS , id )
470
+ lastTS , hasLastTS := d .aliveLastTS [id ]
471
+ if hasLastTS {
472
+ d .deadLastTS [id ] = lastTS
473
+ delete (d .aliveLastTS , id )
474
+ }
475
+
473
476
aliveMsgWithId := & proto.AliveMessage {
474
477
Membership : & proto.Member {Id : id },
475
478
}
0 commit comments