syntax = "proto3"; package protocol; option optimize_for = SPEED; option go_package = "go.miragespace.co/specter/spec/protocol"; import "spec/proto/node.proto"; service VNodeService { rpc Identity(IdentityRequest) returns (IdentityResponse); rpc Ping(PingRequest) returns (PingResponse); rpc Notify(NotifyRequest) returns (NotifyResponse); rpc FindSuccessor(FindSuccessorRequest) returns (FindSuccessorResponse); rpc GetSuccessors(GetSuccessorsRequest) returns (GetSuccessorsResponse); rpc GetPredecessor(GetPredecessorRequest) returns (GetPredecessorResponse); rpc RequestToJoin(RequestToJoinRequest) returns (RequestToJoinResponse); rpc FinishJoin(MembershipConclusionRequest) returns (MembershipConclusionResponse); rpc RequestToLeave(RequestToLeaveRequest) returns (RequestToLeaveResponse); rpc FinishLeave(MembershipConclusionRequest) returns (MembershipConclusionResponse); } message Empty {} message IdentityRequest {} message IdentityResponse { Node identity = 1; } message PingRequest {} message PingResponse {} message NotifyRequest { Node predecessor = 1; } message NotifyResponse {} message FindSuccessorRequest { uint64 key = 1; } message FindSuccessorResponse { Node successor = 1; } message GetPredecessorRequest {} message GetPredecessorResponse { Node predecessor = 1; } message GetSuccessorsRequest {} message GetSuccessorsResponse { repeated Node successors = 1; } message RequestToJoinRequest { Node joiner = 1; } message RequestToJoinResponse { Node predecessor = 1; repeated Node successors = 2; } message RequestToLeaveRequest { Node leaver = 1; } message RequestToLeaveResponse {} message MembershipConclusionRequest { bool stabilize = 1; bool release = 2; } message MembershipConclusionResponse {}