From adcba975cbda41fc22513fa881d645ad3f67eab0 Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Thu, 10 Mar 2016 17:06:10 -0800 Subject: [PATCH] *: recover lessor when applying snapshot --- etcdserver/server.go | 4 ++++ lease/lessor.go | 8 ++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/etcdserver/server.go b/etcdserver/server.go index f57930bdb..dc401f69e 100644 --- a/etcdserver/server.go +++ b/etcdserver/server.go @@ -616,6 +616,10 @@ func (s *EtcdServer) applySnapshot(ep *etcdProgress, apply *apply) { s.be = newbe s.bemu.Unlock() + + if s.lessor != nil { + s.lessor.Recover(s.be, s.kv) + } } if err := s.store.Recovery(apply.snapshot.Data); err != nil { plog.Panicf("recovery store error: %v", err) diff --git a/lease/lessor.go b/lease/lessor.go index 8dd5f0fa5..cc368e03e 100644 --- a/lease/lessor.go +++ b/lease/lessor.go @@ -93,6 +93,9 @@ type Lessor interface { // ExpiredLeasesC returns a chan that is used to receive expired leases. ExpiredLeasesC() <-chan []*Lease + // Recover recovers the lessor state from the given backend and RangeDeleter. + Recover(b backend.Backend, rd RangeDeleter) + // Stop stops the lessor for managing leases. The behavior of calling Stop multiple // times is undefined. Stop() @@ -476,8 +479,7 @@ func int64ToBytes(n int64) []byte { // FakeLessor is a fake implementation of Lessor interface. // Used for testing only. -type FakeLessor struct { -} +type FakeLessor struct{} func (fl *FakeLessor) SetRangeDeleter(dr RangeDeleter) {} @@ -499,4 +501,6 @@ func (le *FakeLessor) Lookup(id LeaseID) *Lease { return nil } func (fl *FakeLessor) ExpiredLeasesC() <-chan []*Lease { return nil } +func (fl *FakeLessor) Recover(b backend.Backend, rd RangeDeleter) {} + func (fl *FakeLessor) Stop() {}