|
|
@@ -15,6 +15,8 @@
|
|
|
package v3election
|
|
|
|
|
|
import (
|
|
|
+ "errors"
|
|
|
+
|
|
|
"golang.org/x/net/context"
|
|
|
|
|
|
"github.com/coreos/etcd/clientv3"
|
|
|
@@ -22,6 +24,10 @@ import (
|
|
|
epb "github.com/coreos/etcd/etcdserver/api/v3election/v3electionpb"
|
|
|
)
|
|
|
|
|
|
+// ErrMissingLeaderKey is returned when election API request
|
|
|
+// is missing the "leader" field.
|
|
|
+var ErrMissingLeaderKey = errors.New(`"leader" field must be provided`)
|
|
|
+
|
|
|
type electionServer struct {
|
|
|
c *clientv3.Client
|
|
|
}
|
|
|
@@ -51,6 +57,9 @@ func (es *electionServer) Campaign(ctx context.Context, req *epb.CampaignRequest
|
|
|
}
|
|
|
|
|
|
func (es *electionServer) Proclaim(ctx context.Context, req *epb.ProclaimRequest) (*epb.ProclaimResponse, error) {
|
|
|
+ if req.Leader == nil {
|
|
|
+ return nil, ErrMissingLeaderKey
|
|
|
+ }
|
|
|
s, err := es.session(ctx, req.Leader.Lease)
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
@@ -98,6 +107,9 @@ func (es *electionServer) Leader(ctx context.Context, req *epb.LeaderRequest) (*
|
|
|
}
|
|
|
|
|
|
func (es *electionServer) Resign(ctx context.Context, req *epb.ResignRequest) (*epb.ResignResponse, error) {
|
|
|
+ if req.Leader == nil {
|
|
|
+ return nil, ErrMissingLeaderKey
|
|
|
+ }
|
|
|
s, err := es.session(ctx, req.Leader.Lease)
|
|
|
if err != nil {
|
|
|
return nil, err
|