// Election service 以 gRPC 接口的方式暴露客户端选举机制。
service Election {
// Campaign 等待获得选举的领导地位,如果成功返回 LeaderKey 代表领导地位。
// 然后 LeaderKey 可以用来在选举时发起新的值,在依然持有领导地位时事务性的守护 API 请求,
// 还有从选举中辞职。
rpc Campaign(CampaignRequest) returns (CampaignResponse) {}
// Proclaim 用新值更新领导者的旧值
rpc Proclaim(ProclaimRequest) returns (ProclaimResponse) {}
// Leader 返回当前的选举公告,如果有。
rpc Leader(LeaderRequest) returns (LeaderResponse) {}
// Observe 以流的方式返回选举公告,和被选举的领导者发布的顺序一致。
rpc Observe(LeaderRequest) returns (stream LeaderResponse) {}
// Resign 放弃选举领导地位,以便其他参选人可以在选举中获得领导地位。
rpc Resign(ResignRequest) returns (ResignResponse) {}
}