mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
concurrency: expose leader revision and proclaim headers for election
This commit is contained in:
parent
c0560be98a
commit
a6cab69c88
@ -19,6 +19,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
v3 "github.com/coreos/etcd/clientv3"
|
v3 "github.com/coreos/etcd/clientv3"
|
||||||
|
pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
|
||||||
"github.com/coreos/etcd/mvcc/mvccpb"
|
"github.com/coreos/etcd/mvcc/mvccpb"
|
||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
)
|
)
|
||||||
@ -36,6 +37,7 @@ type Election struct {
|
|||||||
leaderKey string
|
leaderKey string
|
||||||
leaderRev int64
|
leaderRev int64
|
||||||
leaderSession *Session
|
leaderSession *Session
|
||||||
|
hdr *pb.ResponseHeader
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewElection returns a new election on a given key prefix.
|
// 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
|
return err
|
||||||
}
|
}
|
||||||
|
e.hdr = resp.Header
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -101,6 +104,8 @@ func (e *Election) Proclaim(ctx context.Context, val string) error {
|
|||||||
e.leaderKey = ""
|
e.leaderKey = ""
|
||||||
return ErrElectionNotLeader
|
return ErrElectionNotLeader
|
||||||
}
|
}
|
||||||
|
|
||||||
|
e.hdr = tresp.Header
|
||||||
return nil
|
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.
|
// Key returns the leader key if elected, empty string otherwise.
|
||||||
func (e *Election) Key() string { return e.leaderKey }
|
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 }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user