concurrency: expose leader revision and proclaim headers for election
@@ -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 }
