File tree 1 file changed +12
-1
lines changed
1 file changed +12
-1
lines changed Original file line number Diff line number Diff line change @@ -55,6 +55,9 @@ type Server struct {
55
55
// strong consistency.
56
56
fsm * consulFSM
57
57
58
+ // Have we attempted to leave the cluster
59
+ left bool
60
+
58
61
// Logger uses the provided LogOutput
59
62
logger * log.Logger
60
63
@@ -364,6 +367,12 @@ func (s *Server) Shutdown() error {
364
367
s .logger .Printf ("[WARN] consul: Error shutting down raft: %s" , err )
365
368
}
366
369
s .raftStore .Close ()
370
+
371
+ // Clear the peer set on a graceful leave to avoid
372
+ // triggering elections on a rejoin.
373
+ if s .left {
374
+ s .raftPeers .SetPeers (nil )
375
+ }
367
376
}
368
377
369
378
if s .rpcListener != nil {
@@ -391,6 +400,7 @@ func (s *Server) Shutdown() error {
391
400
// Leave is used to prepare for a graceful shutdown of the server
392
401
func (s * Server ) Leave () error {
393
402
s .logger .Printf ("[INFO] consul: server starting leave" )
403
+ s .left = true
394
404
395
405
// Leave the WAN pool
396
406
if s .serfWAN != nil {
@@ -434,7 +444,8 @@ func (s *Server) Leave() error {
434
444
// Wait for the commit
435
445
select {
436
446
case err := <- ch :
437
- if err != nil {
447
+ // Ignore if we have already been deregistered by the leader
448
+ if err != nil && err .Error () != raft .UnknownPeer .Error () {
438
449
s .logger .Printf ("[ERR] consul: failed to leave Raft cluster: %v" , err )
439
450
}
440
451
case <- time .After (3 * time .Second ):
You can’t perform that action at this time.
0 commit comments