@ -542,12 +542,13 @@ func (s *EtcdServer) run() {
|
|||||||
defer func() {
|
defer func() {
|
||||||
sched.Stop()
|
sched.Stop()
|
||||||
|
|
||||||
|
// wait for snapshots before closing raft so wal stays open
|
||||||
|
s.wg.Wait()
|
||||||
|
|
||||||
// must stop raft after scheduler-- etcdserver can leak rafthttp pipelines
|
// must stop raft after scheduler-- etcdserver can leak rafthttp pipelines
|
||||||
// by adding a peer after raft stops the transport
|
// by adding a peer after raft stops the transport
|
||||||
s.r.stop()
|
s.r.stop()
|
||||||
|
|
||||||
s.wg.Wait()
|
|
||||||
|
|
||||||
// kv, lessor and backend can be nil if running without v3 enabled
|
// kv, lessor and backend can be nil if running without v3 enabled
|
||||||
// or running unit tests.
|
// or running unit tests.
|
||||||
if s.lessor != nil {
|
if s.lessor != nil {
|
||||||
|
@ -232,9 +232,14 @@ func TestIssue2681(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Ensure we can remove a member after a snapshot then add a new one back.
|
// Ensure we can remove a member after a snapshot then add a new one back.
|
||||||
func TestIssue2746(t *testing.T) {
|
func TestIssue2746(t *testing.T) { testIssue2746(t, 5) }
|
||||||
|
|
||||||
|
// With 3 nodes TestIssue2476 sometimes had a shutdown with an inflight snapshot.
|
||||||
|
func TestIssue2746WithThree(t *testing.T) { testIssue2746(t, 3) }
|
||||||
|
|
||||||
|
func testIssue2746(t *testing.T, members int) {
|
||||||
defer testutil.AfterTest(t)
|
defer testutil.AfterTest(t)
|
||||||
c := NewCluster(t, 5)
|
c := NewCluster(t, members)
|
||||||
|
|
||||||
for _, m := range c.Members {
|
for _, m := range c.Members {
|
||||||
m.SnapCount = 10
|
m.SnapCount = 10
|
||||||
@ -248,7 +253,7 @@ func TestIssue2746(t *testing.T) {
|
|||||||
clusterMustProgress(t, c.Members)
|
clusterMustProgress(t, c.Members)
|
||||||
}
|
}
|
||||||
|
|
||||||
c.RemoveMember(t, uint64(c.Members[4].s.ID()))
|
c.RemoveMember(t, uint64(c.Members[members-1].s.ID()))
|
||||||
c.waitLeader(t, c.Members)
|
c.waitLeader(t, c.Members)
|
||||||
|
|
||||||
c.AddMember(t)
|
c.AddMember(t)
|
||||||
|
Reference in New Issue
Block a user