concurrency: expose leader revision and proclaim headers for election

This commit is contained in:
Anthony Romano 2017-03-30 10:40:02 -07:00
parent c0560be98a
commit a6cab69c88

View File

@ -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 }