syntax = "proto3"; package messaging_pb; option go_package = "github.com/seaweedfs/seaweedfs/weed/pb/mq_pb"; option java_package = "seaweedfs.mq"; option java_outer_classname = "MessagQueueProto"; ////////////////////////////////////////////////// service SeaweedMessaging { // control plane rpc FindBrokerLeader (FindBrokerLeaderRequest) returns (FindBrokerLeaderResponse) { } rpc AssignSegmentBrokers (AssignSegmentBrokersRequest) returns (AssignSegmentBrokersResponse) { } rpc CheckSegmentStatus (CheckSegmentStatusRequest) returns (CheckSegmentStatusResponse) { } rpc CheckBrokerLoad (CheckBrokerLoadRequest) returns (CheckBrokerLoadResponse) { } // control plane for topic partitions rpc FindTopicBrokers (FindTopicBrokersRequest) returns (FindTopicBrokersResponse) { } // a pub client will call this to get the topic partitions assignment rpc RequestTopicPartitions (RequestTopicPartitionsRequest) returns (RequestTopicPartitionsResponse) { } rpc AssignTopicPartitions (AssignTopicPartitionsRequest) returns (AssignTopicPartitionsResponse) { } rpc CheckTopicPartitionsStatus (CheckTopicPartitionsStatusRequest) returns (CheckTopicPartitionsStatusResponse) { } // data plane rpc Publish (stream PublishRequest) returns (stream PublishResponse) { } rpc Subscribe (SubscribeRequest) returns (stream SubscribeResponse) { } } ////////////////////////////////////////////////// message SegmentInfo { Segment segment = 1; int64 start_ts_ns = 2; repeated string brokers = 3; int64 stop_ts_ns = 4; repeated int32 previous_segments = 5; repeated int32 next_segments = 6; } ////////////////////////////////////////////////// message FindBrokerLeaderRequest { string filer_group = 1; } message FindBrokerLeaderResponse { string broker = 1; } message Topic { string namespace = 1; string name = 2; } message Partition { int32 ring_size = 1; int32 range_start = 2; int32 range_stop = 3; } message Segment { string namespace = 1; string topic = 2; int32 id = 3; Partition partition = 4; } message AssignSegmentBrokersRequest { Segment segment = 1; } message AssignSegmentBrokersResponse { repeated string brokers = 1; } message CheckSegmentStatusRequest { Segment segment = 1; } message CheckSegmentStatusResponse { bool is_active = 1; } message CheckBrokerLoadRequest { } message CheckBrokerLoadResponse { int64 message_count = 1; int64 bytes_count = 2; } message FindTopicBrokersRequest { Topic topic = 1; bool is_for_publish = 2; } message FindTopicBrokersResponse { Topic topic = 1; TopicPartitionsAssignment topic_partitions_assignment = 2; } message BrokerPartitionsAssignment { int32 partition_start = 1; int32 partition_stop = 2; string leader_broker = 3; repeated string follower_brokers = 4; } message TopicPartitionsAssignment { int32 partition_count = 1; // over-sharded partitions, usually 1024 repeated BrokerPartitionsAssignment broker_partitions = 2; } message RequestTopicPartitionsRequest { Topic topic = 1; int32 partition_count = 2; } message RequestTopicPartitionsResponse { TopicPartitionsAssignment topic_partitions_assignment = 1; } message AssignTopicPartitionsRequest { Topic topic = 1; TopicPartitionsAssignment topic_partitions_assignment = 2; bool is_leader = 3; } message AssignTopicPartitionsResponse { } message CheckTopicPartitionsStatusRequest { string namespace = 1; string topic = 2; BrokerPartitionsAssignment broker_partitions_assignment = 3; bool should_cancel_if_not_match = 4; } message CheckTopicPartitionsStatusResponse { TopicPartitionsAssignment topic_partitions_assignment = 1; } ////////////////////////////////////////////////// message DataMessage { bytes key = 1; bytes value = 2; } message PublishRequest { message InitMessage { Topic topic = 1; Partition partition = 2; } oneof message { InitMessage init = 1; DataMessage data = 2; } int64 sequence = 3; } message PublishResponse { int64 ack_sequence = 1; string error = 2; string redirect_to_broker = 3; } message SubscribeRequest { message InitMessage { Topic topic = 1; Partition partition = 2; } InitMessage init = 1; int64 sequence = 2; } message SubscribeResponse { message CtrlMessage { string error = 1; string redirect_to_broker = 2; } oneof message { CtrlMessage ctrl = 1; DataMessage data = 2; } }