syntax = “proto3”; package event_store.cluster; option java_package = “com.eventstore.dbclient.proto.cluster”;

import “shared.proto”;

service Gossip {

rpc Update (GossipRequest) returns (ClusterInfo);
rpc Read (event_store.client.shared.Empty) returns (ClusterInfo);

}

service Elections {

rpc ViewChange (ViewChangeRequest) returns (event_store.client.shared.Empty);
rpc ViewChangeProof (ViewChangeProofRequest) returns (event_store.client.shared.Empty);
rpc Prepare (PrepareRequest) returns (event_store.client.shared.Empty);
rpc PrepareOk (PrepareOkRequest) returns (event_store.client.shared.Empty);
rpc Proposal (ProposalRequest) returns (event_store.client.shared.Empty);
rpc Accept (AcceptRequest) returns (event_store.client.shared.Empty);

rpc LeaderIsResigning (LeaderIsResigningRequest) returns (event_store.client.shared.Empty);
rpc LeaderIsResigningOk (LeaderIsResigningOkRequest) returns (event_store.client.shared.Empty);

}

message GossipRequest {

ClusterInfo info = 1;
EndPoint server = 2;

}

message ViewChangeRequest {

event_store.client.shared.UUID server_id = 1;
EndPoint server_http = 2;
int32 attempted_view = 3;

}

message ViewChangeProofRequest {

event_store.client.shared.UUID server_id = 1;
EndPoint server_http = 2;
int32 installed_view = 3;

}

message PrepareRequest {

event_store.client.shared.UUID server_id = 1;
EndPoint server_http = 2;
int32 view = 3;

}

message PrepareOkRequest {

int32 view = 1;
event_store.client.shared.UUID server_id = 2;
EndPoint server_http = 3;
int32 epoch_number = 4;
int64 epoch_position = 5;
event_store.client.shared.UUID epoch_id = 6;
event_store.client.shared.UUID epoch_leader_instance_id = 7;
int64 last_commit_position = 8;
int64 writer_checkpoint = 9;
int64 chaser_checkpoint = 10;
int32 node_priority = 11;
ClusterInfo cluster_info = 12;

}

message ProposalRequest {

event_store.client.shared.UUID server_id = 1;
EndPoint server_http = 2;
event_store.client.shared.UUID leader_id = 3;
EndPoint leader_http = 4;
int32 view = 5;
int32 epoch_number = 6;
int64 epoch_position = 7;
event_store.client.shared.UUID epoch_id = 8;
event_store.client.shared.UUID epoch_leader_instance_id = 9;
int64 last_commit_position = 10;
int64 writer_checkpoint = 11;
int64 chaser_checkpoint = 12;
int32 node_priority = 13;

}

message AcceptRequest {

event_store.client.shared.UUID server_id = 1;
EndPoint server_http = 2;
event_store.client.shared.UUID leader_id = 3;
EndPoint leader_http = 4;
int32 view = 5;

}

message LeaderIsResigningRequest {

event_store.client.shared.UUID leader_id = 1;
EndPoint leader_http = 2;

}

message LeaderIsResigningOkRequest {

event_store.client.shared.UUID leader_id = 1;
EndPoint leader_http = 2;
event_store.client.shared.UUID server_id = 3;
EndPoint server_http = 4;

}

message ClusterInfo {

repeated MemberInfo members = 1;

}

message EndPoint {

string address = 1;
uint32 port = 2;

}

message MemberInfo {

    enum VNodeState {
            Initializing = 0;
            DiscoverLeader = 1;
            Unknown = 2;
            PreReplica = 3;
            CatchingUp = 4;
            Clone = 5;
            Follower = 6;
            PreLeader = 7;
            Leader = 8;
            Manager = 9;
            ShuttingDown = 10;
            Shutdown = 11;
            ReadOnlyLeaderless = 12;
            PreReadOnlyReplica = 13;
            ReadOnlyReplica = 14;
            ResigningLeader = 15;
    }
    event_store.client.shared.UUID instance_id = 1;
    int64 time_stamp = 2;
    VNodeState state = 3;
    bool is_alive = 4;
    EndPoint http_end_point = 5;
    EndPoint internal_tcp = 6;
    EndPoint external_tcp = 7;
    bool internal_tcp_uses_tls = 8;
    bool external_tcp_uses_tls = 9;

int64 last_commit_position = 10;
int64 writer_checkpoint = 11;
    int64 chaser_checkpoint = 12;
int64 epoch_position = 13;
int32 epoch_number = 14;
event_store.client.shared.UUID epoch_id = 15;

int32 node_priority = 16;
bool is_read_only_replica = 17;
string advertise_host_to_client_as = 18;
uint32 advertise_http_port_to_client_as = 19;
uint32 advertise_tcp_port_to_client_as = 20;

}