diff --git a/clientv3/concurrency/election.go b/clientv3/concurrency/election.go index f69508e14..2598220f8 100644 --- a/clientv3/concurrency/election.go +++ b/clientv3/concurrency/election.go @@ -19,6 +19,7 @@ import ( "fmt" v3 "github.com/coreos/etcd/clientv3" + pb "github.com/coreos/etcd/etcdserver/etcdserverpb" "github.com/coreos/etcd/mvcc/mvccpb" "golang.org/x/net/context" ) @@ -36,6 +37,7 @@ type Election struct { leaderKey string leaderRev int64 leaderSession *Session + hdr *pb.ResponseHeader } // NewElection returns a new election on a given key prefix. @@ -80,6 +82,7 @@ func (e *Election) Campaign(ctx context.Context, val string) error { } return err } + e.hdr = resp.Header return nil } @@ -101,6 +104,8 @@ func (e *Election) Proclaim(ctx context.Context, val string) error { e.leaderKey = "" return ErrElectionNotLeader } + + e.hdr = tresp.Header return nil } @@ -201,3 +206,9 @@ func (e *Election) observe(ctx context.Context, ch chan<- v3.GetResponse) { // Key returns the leader key if elected, empty string otherwise. func (e *Election) Key() string { return e.leaderKey } + +// Rev returns the leader key's creation revision, if elected. +func (e *Election) Rev() int64 { return e.leaderRev } + +// Header is the response header from the last successful election proposal. +func (m *Election) Header() *pb.ResponseHeader { return m.hdr }