90 lines
3.1 KiB
Protocol Buffer
90 lines
3.1 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
package messages;
|
|
|
|
option go_package = "git.tornberg.me/go-cart-actor/proto;messages";
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// Control Plane gRPC API
|
|
// -----------------------------------------------------------------------------
|
|
// Replaces the legacy custom frame-based control channel (previously port 1338).
|
|
// Responsibilities:
|
|
// - Liveness (Ping)
|
|
// - Membership negotiation (Negotiate)
|
|
// - Cart ownership change propagation (ConfirmOwner)
|
|
// - Cart ID listing for remote grain spawning (GetCartIds)
|
|
// - Graceful shutdown notifications (Closing)
|
|
// No authentication / TLS is defined initially (can be added later).
|
|
// -----------------------------------------------------------------------------
|
|
|
|
// Empty request placeholder (common pattern).
|
|
message Empty {}
|
|
|
|
// Ping reply includes responding host and its current unix time (seconds).
|
|
message PingReply {
|
|
string host = 1;
|
|
int64 unix_time = 2;
|
|
}
|
|
|
|
// NegotiateRequest carries the caller's full view of known hosts (including self).
|
|
message NegotiateRequest {
|
|
repeated string known_hosts = 1;
|
|
}
|
|
|
|
// NegotiateReply returns the callee's healthy hosts (including itself).
|
|
message NegotiateReply {
|
|
repeated string hosts = 1;
|
|
}
|
|
|
|
// CartIdsReply returns the list of cart IDs (string form) currently owned locally.
|
|
message CartIdsReply {
|
|
repeated string cart_ids = 1;
|
|
}
|
|
|
|
// OwnerChangeRequest notifies peers that ownership of a cart moved (or is moving) to new_host.
|
|
message OwnerChangeRequest {
|
|
string cart_id = 1;
|
|
string new_host = 2;
|
|
}
|
|
|
|
// OwnerChangeAck indicates acceptance or rejection of an ownership change.
|
|
message OwnerChangeAck {
|
|
bool accepted = 1;
|
|
string message = 2;
|
|
}
|
|
|
|
// ClosingNotice notifies peers this host is terminating (so they can drop / re-resolve).
|
|
message ClosingNotice {
|
|
string host = 1;
|
|
}
|
|
|
|
// ControlPlane defines cluster coordination and ownership operations.
|
|
service ControlPlane {
|
|
// Ping for liveness; lightweight health signal.
|
|
rpc Ping(Empty) returns (PingReply);
|
|
|
|
// Negotiate merges host views; used during discovery & convergence.
|
|
rpc Negotiate(NegotiateRequest) returns (NegotiateReply);
|
|
|
|
// GetCartIds lists currently owned cart IDs on this node.
|
|
rpc GetCartIds(Empty) returns (CartIdsReply);
|
|
|
|
// ConfirmOwner announces/asks peers to acknowledge ownership transfer.
|
|
rpc ConfirmOwner(OwnerChangeRequest) returns (OwnerChangeAck);
|
|
|
|
// Closing announces graceful shutdown so peers can proactively adjust.
|
|
rpc Closing(ClosingNotice) returns (OwnerChangeAck);
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// Generation Instructions:
|
|
// protoc --go_out=. --go_opt=paths=source_relative \
|
|
// --go-grpc_out=. --go-grpc_opt=paths=source_relative \
|
|
// control_plane.proto
|
|
//
|
|
// Future Enhancements:
|
|
// - Add a streaming membership watch (server -> client) for immediate updates.
|
|
// - Add TLS / mTLS for secure intra-cluster communication.
|
|
// - Add richer health metadata (load, grain count) in PingReply.
|
|
// -----------------------------------------------------------------------------
|