Files
upstream-seaweedfs/weed/pb/mq_broker.proto
upstream-mirror 89f5be005d
Some checks failed
go: build dev binaries / cleanup (push) Successful in 4s
Codespell / Check for spelling errors (push) Failing after 3s
docker: build dev containers / build-rust-binaries (amd64, x86_64-unknown-linux-musl) (push) Failing after 3s
docker: build dev containers / build-dev-containers (push) Has been skipped
docker: build dev containers / build-rust-binaries (arm64, true, aarch64-unknown-linux-musl) (push) Failing after 3s
End to End / FUSE Mount (push) Failing after 2s
EC Integration Tests / EC Integration Tests (push) Failing after 30s
FUSE DLM Integration Tests / FUSE DLM Integration Tests (push) Failing after 3s
FUSE Volume Server Failover Tests / FUSE Volume Server Failover (push) Failing after 3s
FUSE Integration Tests / FUSE Integration Testing (push) Failing after 2s
FUSE P2P Peer Chunk Sharing Integration Tests / FUSE P2P Peer Chunk Sharing (push) Failing after 3s
go: build binary / Go Vet (push) Failing after 2s
go: build binary / Go Vet 32-bit (push) Failing after 3s
go: build binary / Build (push) Failing after 4s
go: build binary / Build cross-platform (freebsd/amd64) (push) Failing after 3s
go: build binary / Build cross-platform (windows/amd64) (push) Failing after 3s
go: build binary / Build cross-platform (darwin/arm64) (push) Failing after 3s
go: build binary / Build cross-platform (windows/arm64) (push) Failing after 3s
go: build binary / Test (push) Failing after 2s
go: build binary / Test 32-bit (push) Failing after 3s
helm: lint and test charts / lint-test (push) Failing after 3s
Java Client Integration Tests / Java Integration Tests (11) (push) Failing after 3s
Java Client Integration Tests / Java Integration Tests (17) (push) Failing after 3s
go: build dev binaries / build_dev_linux_windows (amd64, linux) (push) Failing after 2s
go: build dev binaries / build_dev_linux_windows (amd64, windows) (push) Failing after 3s
go: build dev binaries / build_dev_darwin (amd64, darwin) (push) Has been skipped
go: build dev binaries / build_dev_darwin (arm64, darwin) (push) Has been skipped
Java Client Unit Tests / Java Unit Tests (11) (push) Failing after 3s
Java Client Unit Tests / Java Unit Tests (17) (push) Failing after 2s
Java Client Unit Tests / Java Unit Tests (21) (push) Failing after 3s
Java Client Unit Tests / Java Unit Tests (8) (push) Failing after 3s
Kafka Quick Test (Load Test with Schema Registry) / Kafka Client Load Test (Quick) (push) Failing after 3s
Kafka Gateway Tests / Kafka Unit Tests (unit-tests-1) (push) Failing after 11s
Kafka Gateway Tests / Kafka Integration Tests (Critical) (integration-1) (push) Failing after 3s
Kafka Gateway Tests / Kafka End-to-End Tests (with SMQ) (e2e-1) (push) Failing after 3s
Kafka Gateway Tests / Kafka Consumer Group Tests (Highly Isolated) (consumer-group-1) (push) Failing after 2s
Kafka Gateway Tests / Kafka Client Compatibility (with SMQ) (client-compat-1) (push) Failing after 3s
Kafka Gateway Tests / Kafka SMQ Integration Tests (Full Stack) (smq-integration-1) (push) Failing after 3s
Kafka Gateway Tests / Kafka Protocol Tests (Isolated) (protocol-1) (push) Failing after 3s
KMS Tests / KMS Provider Integration Tests (push) Failing after 2s
KMS Tests / S3 KMS End-to-End Tests (push) Failing after 3s
Master Cold Start Tests / Master Cold Start Tests (push) Failing after 4s
Metadata Subscribe Integration Tests / Metadata Subscribe Integration Tests (push) Failing after 3s
Multi-Master Tests / Multi-Master Failover Tests (push) Failing after 3s
Performance / CPU and Heap Profile (push) Failing after 2s
Performance / S3 Read/Write Benchmark (rust volume) (push) Failing after 3s
pjdfstest POSIX Compliance / pjdfstest (push) Failing after 2s
Plugin Worker Integration Tests / Plugin Worker: erasure_coding (push) Failing after 3s
Plugin Worker Integration Tests / Plugin Worker: vacuum (push) Failing after 3s
Rust Volume Server Tests / Rust Integration Tests (push) Failing after 3s
Rust Volume Server Tests / Go Tests with Rust Volume (grpc - Shard 1) (push) Failing after 2s
Rust Volume Server Tests / Go Tests with Rust Volume (http - Shard 1) (push) Failing after 3s
Rust Volume Server Tests / Go Tests with Rust Volume (grpc - Shard 2) (push) Failing after 3s
Rust Volume Server Tests / Go Tests with Rust Volume (http - Shard 2) (push) Failing after 3s
Rust Volume Server Tests / Go Tests with Rust Volume (grpc - Shard 3) (push) Failing after 3s
S3 IAM Integration Tests / S3 IAM Distributed Tests (push) Failing after 2s
S3 IAM Integration Tests / S3 IAM Performance Tests (push) Failing after 3s
Performance / Throughput Benchmark (go volume) (push) Failing after 3s
Performance / Throughput Benchmark (rust volume) (push) Failing after 2s
Performance / S3 Read/Write Benchmark (go volume) (push) Failing after 3s
Plugin Worker Integration Tests / Plugin Worker: volume_balance (push) Failing after 3s
PostgreSQL Gateway Tests / PostgreSQL Basic Tests (push) Failing after 3s
Rust Volume Server Tests / Rust Unit Tests (push) Failing after 2s
Rust Volume Server Tests / Go Tests with Rust Volume (http - Shard 3) (push) Failing after 3s
Rust Plugin Worker Tests / Rust Plugin Worker Build and Unit Tests (push) Failing after 3s
rust: build dev volume server binaries / cleanup (push) Successful in 3s
S3 ETag and ACL Tests / S3 ETag + ACL Integration Tests (push) Failing after 3s
S3 IAM Integration Tests / IAM Unit Tests (push) Failing after 3s
S3 IAM Integration Tests / S3 IAM Integration Tests (advanced) (push) Failing after 3s
S3 IAM Integration Tests / S3 IAM Integration Tests (basic) (push) Failing after 2s
S3 IAM Integration Tests / S3 IAM Integration Tests (group) (push) Failing after 3s
S3 IAM Integration Tests / S3 IAM Integration Tests (policy-enforcement) (push) Failing after 2s
S3 IAM Integration Tests / S3 IAM Integration Tests (sts) (push) Failing after 4s
S3 Keycloak Integration Tests / S3 Keycloak Integration Tests (push) Failing after 3s
S3 PyArrow Parquet Tests / PyArrow Parquet Tests (Python 3.11) (push) Failing after 3s
S3 PyArrow Parquet Tests / Go Unit Tests (Implicit Directory) (push) Has been cancelled
S3 PyArrow Parquet Tests / PyArrow Parquet Tests (Python 3.12) (push) Has been cancelled
rust: build dev volume server binaries / build-rust-volume-dev-darwin (darwin-amd64, x86_64-apple-darwin) (push) Has been cancelled
rust: build dev volume server binaries / build-rust-volume-dev-darwin (darwin-arm64, aarch64-apple-darwin) (push) Has been cancelled
rust: build dev volume server binaries / build-rust-volume-dev-linux (linux-amd64, x86_64-unknown-linux-gnu) (push) Has been cancelled
S3 PyArrow Parquet Tests / PyArrow Parquet Tests (Python 3.9) (push) Has been cancelled
S3 Proxy Signature Tests / S3 Proxy Signature Verification Tests (push) Has been cancelled
S3 SDK V2 Route Disambiguation Tests / S3 SDK V2 Routing Tests (push) Has been cancelled
S3 SSE Tests / S3 SSE Integration Tests (quick) (push) Has been cancelled
S3 SSE Tests / S3 SSE Compatibility Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Metadata Persistence Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Copy Operations Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Multipart Upload Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Performance Test (push) Has been cancelled
S3 SSE Tests / S3 Volume Encryption Test (push) Has been cancelled
S3 SSE Tests / S3 SSE Integration Tests (comprehensive) (push) Has been cancelled
Spark Integration Tests / Spark Integration Tests (push) Failing after 2s
Telemetry Integration Tests / telemetry-integration-test (push) Failing after 3s
Volume Server Integration Tests / Volume Server Integration Tests (grpc - Shard 1) (push) Failing after 3s
Volume Server Integration Tests / Volume Server Integration Tests (http - Shard 1) (push) Failing after 3s
Ceph S3 tests / Basic S3 tests (KV store) (push) Has been cancelled
Ceph S3 tests / S3 Versioning & Object Lock tests (push) Has been cancelled
S3 Policy Integration Tests / S3 Policy Unit Tests (push) Failing after 3s
Ceph S3 tests / S3 CORS tests (push) Has been cancelled
Ceph S3 tests / SeaweedFS Custom S3 Copy tests (push) Has been cancelled
Ceph S3 tests / Basic S3 tests (SQL store) (push) Has been cancelled
test s3 over https using aws-cli / awscli-tests (push) Has been cancelled
TLS Rotation Integration Tests / TLS Rotation Integration Tests (push) Has been cancelled
Vacuum Integration Tests / Vacuum Integration Tests (push) Has been cancelled
S3 Policy Integration Tests / S3 Policy Variables Integration Tests (push) Failing after 3s
S3 Policy Integration Tests / S3 Policy Enforcement Integration Tests (advanced-policy) (push) Failing after 3s
S3 Policy Integration Tests / S3 Policy Enforcement Integration Tests (basic-policy) (push) Failing after 2s
S3 Policy Integration Tests / S3 Policy Enforcement Integration Tests (contextual-policy) (push) Failing after 4s
S3 Policy Integration Tests / Trusted Proxy Detection Tests (push) Failing after 2s
S3 Policy Integration Tests / S3 Policy Shell Integration Tests (push) Failing after 3s
Samba on FUSE Integration / samba-integration (push) Failing after 2s
SFTP Integration Tests / SFTP Integration Testing (push) Failing after 3s
terraform: validate and test modules / fmt, validate, plan-level tests (push) Failing after 3s
terraform: validate and test modules / local cluster smoke test (real weed) (push) Failing after 2s
Volume Server Integration Tests / Volume Server Integration Tests (grpc - Shard 3) (push) Failing after 3s
Volume Server Integration Tests / Volume Server Integration Tests (grpc - Shard 2) (push) Failing after 3s
Volume Server Integration Tests / Volume Server Integration Tests (http - Shard 2) (push) Failing after 2s
Volume Server Integration Tests / Volume Server Integration Tests (http - Shard 3) (push) Failing after 5s
mount: windows conformance / WinFsp conformance (push) Has been cancelled
mount: windows / Mount on Windows (push) Has been cancelled
snapshot of https://github.com/seaweedfs/seaweedfs.git (master, 2026-09-16; blobs > 131072B omitted)
2026-09-16 03:23:42 +05:00

510 lines
16 KiB
Protocol Buffer

syntax = "proto3";
package messaging_pb;
import "mq_schema.proto";
import "filer.proto";
option go_package = "github.com/seaweedfs/seaweedfs/weed/pb/mq_pb";
option java_package = "seaweedfs.mq";
option java_outer_classname = "MessageQueueProto";
//////////////////////////////////////////////////
service SeaweedMessaging {
// control plane
rpc FindBrokerLeader (FindBrokerLeaderRequest) returns (FindBrokerLeaderResponse) {
}
// control plane for balancer
rpc PublisherToPubBalancer (stream PublisherToPubBalancerRequest) returns (stream PublisherToPubBalancerResponse) {
}
rpc BalanceTopics (BalanceTopicsRequest) returns (BalanceTopicsResponse) {
}
// control plane for topic partitions
rpc ListTopics (ListTopicsRequest) returns (ListTopicsResponse) {
}
rpc TopicExists (TopicExistsRequest) returns (TopicExistsResponse) {
}
rpc ConfigureTopic (ConfigureTopicRequest) returns (ConfigureTopicResponse) {
}
rpc LookupTopicBrokers (LookupTopicBrokersRequest) returns (LookupTopicBrokersResponse) {
}
rpc GetTopicConfiguration (GetTopicConfigurationRequest) returns (GetTopicConfigurationResponse) {
}
rpc GetTopicPublishers (GetTopicPublishersRequest) returns (GetTopicPublishersResponse) {
}
rpc GetTopicSubscribers (GetTopicSubscribersRequest) returns (GetTopicSubscribersResponse) {
}
// invoked by the balancer, running on each broker
rpc AssignTopicPartitions (AssignTopicPartitionsRequest) returns (AssignTopicPartitionsResponse) {
}
rpc ClosePublishers(ClosePublishersRequest) returns (ClosePublishersResponse) {
}
rpc CloseSubscribers(CloseSubscribersRequest) returns (CloseSubscribersResponse) {
}
// subscriber connects to broker balancer, which coordinates with the subscribers
rpc SubscriberToSubCoordinator (stream SubscriberToSubCoordinatorRequest) returns (stream SubscriberToSubCoordinatorResponse) {
}
// data plane for each topic partition
rpc PublishMessage (stream PublishMessageRequest) returns (stream PublishMessageResponse) {
}
rpc SubscribeMessage (stream SubscribeMessageRequest) returns (stream SubscribeMessageResponse) {
}
// The lead broker asks a follower broker to follow itself
rpc PublishFollowMe (stream PublishFollowMeRequest) returns (stream PublishFollowMeResponse) {
}
rpc SubscribeFollowMe (stream SubscribeFollowMeRequest) returns (SubscribeFollowMeResponse) {
}
// Stateless fetch API (Kafka-style) - request/response pattern
// This is the recommended API for Kafka gateway and other stateless clients
// No streaming, no session state - each request is completely independent
rpc FetchMessage (FetchMessageRequest) returns (FetchMessageResponse) {
}
// SQL query support - get unflushed messages from broker's in-memory buffer (streaming)
rpc GetUnflushedMessages (GetUnflushedMessagesRequest) returns (stream GetUnflushedMessagesResponse) {
}
// Get comprehensive partition range information (offsets, timestamps, and other fields)
rpc GetPartitionRangeInfo (GetPartitionRangeInfoRequest) returns (GetPartitionRangeInfoResponse) {
}
// Removed Kafka Gateway Registration - no longer needed
}
//////////////////////////////////////////////////
message FindBrokerLeaderRequest {
string filer_group = 1;
}
message FindBrokerLeaderResponse {
string broker = 1;
}
//////////////////////////////////////////////////
message BrokerStats {
int32 cpu_usage_percent = 1;
map<string, TopicPartitionStats> stats = 2;
}
message TopicPartitionStats {
schema_pb.Topic topic = 1;
schema_pb.Partition partition = 2;
int32 publisher_count = 3;
int32 subscriber_count = 4;
string follower = 5;
}
message PublisherToPubBalancerRequest {
message InitMessage {
string broker = 1;
}
oneof message {
InitMessage init = 1;
BrokerStats stats = 2;
}
}
message PublisherToPubBalancerResponse {
}
message BalanceTopicsRequest {
}
message BalanceTopicsResponse {
}
//////////////////////////////////////////////////
message TopicRetention {
int64 retention_seconds = 1; // retention duration in seconds
bool enabled = 2; // whether retention is enabled
}
message ConfigureTopicRequest {
schema_pb.Topic topic = 1;
int32 partition_count = 2;
TopicRetention retention = 3;
schema_pb.RecordType message_record_type = 4; // Complete flat schema for the message
repeated string key_columns = 5; // Names of columns that form the key
string schema_format = 6; // Serialization format: "AVRO", "PROTOBUF", "JSON_SCHEMA", or empty for schemaless
}
message ConfigureTopicResponse {
repeated BrokerPartitionAssignment broker_partition_assignments = 2;
TopicRetention retention = 3;
schema_pb.RecordType message_record_type = 4; // Complete flat schema for the message
repeated string key_columns = 5; // Names of columns that form the key
string schema_format = 6; // Serialization format: "AVRO", "PROTOBUF", "JSON_SCHEMA", or empty for schemaless
}
message ListTopicsRequest {
}
message ListTopicsResponse {
repeated schema_pb.Topic topics = 1;
}
message TopicExistsRequest {
schema_pb.Topic topic = 1;
}
message TopicExistsResponse {
bool exists = 1;
}
message LookupTopicBrokersRequest {
schema_pb.Topic topic = 1;
}
message LookupTopicBrokersResponse {
schema_pb.Topic topic = 1;
repeated BrokerPartitionAssignment broker_partition_assignments = 2;
}
message BrokerPartitionAssignment {
schema_pb.Partition partition = 1;
string leader_broker = 2;
string follower_broker = 3;
}
message GetTopicConfigurationRequest {
schema_pb.Topic topic = 1;
}
message GetTopicConfigurationResponse {
schema_pb.Topic topic = 1;
int32 partition_count = 2;
repeated BrokerPartitionAssignment broker_partition_assignments = 3;
int64 created_at_ns = 4;
int64 last_updated_ns = 5;
TopicRetention retention = 6;
schema_pb.RecordType message_record_type = 7; // Complete flat schema for the message
repeated string key_columns = 8; // Names of columns that form the key
string schema_format = 9; // Serialization format: "AVRO", "PROTOBUF", "JSON_SCHEMA", or empty for schemaless
}
message GetTopicPublishersRequest {
schema_pb.Topic topic = 1;
}
message GetTopicPublishersResponse {
repeated TopicPublisher publishers = 1;
}
message GetTopicSubscribersRequest {
schema_pb.Topic topic = 1;
}
message GetTopicSubscribersResponse {
repeated TopicSubscriber subscribers = 1;
}
message TopicPublisher {
string publisher_name = 1;
string client_id = 2;
schema_pb.Partition partition = 3;
int64 connect_time_ns = 4;
int64 last_seen_time_ns = 5;
string broker = 6;
bool is_active = 7;
int64 last_published_offset = 8;
int64 last_acked_offset = 9;
}
message TopicSubscriber {
string consumer_group = 1;
string consumer_id = 2;
string client_id = 3;
schema_pb.Partition partition = 4;
int64 connect_time_ns = 5;
int64 last_seen_time_ns = 6;
string broker = 7;
bool is_active = 8;
int64 current_offset = 9; // last acknowledged offset
int64 last_received_offset = 10;
}
message AssignTopicPartitionsRequest {
schema_pb.Topic topic = 1;
repeated BrokerPartitionAssignment broker_partition_assignments = 2;
bool is_leader = 3;
bool is_draining = 4;
}
message AssignTopicPartitionsResponse {
}
message SubscriberToSubCoordinatorRequest {
message InitMessage {
string consumer_group = 1;
string consumer_group_instance_id = 2;
schema_pb.Topic topic = 3;
// The consumer group instance will be assigned at most max_partition_count partitions.
// If the number of partitions is less than the sum of max_partition_count,
// the consumer group instance may be assigned partitions less than max_partition_count.
// Default is 1.
int32 max_partition_count = 4;
// If consumer group instance changes, wait for rebalance_seconds before reassigning partitions
// Exception: if adding a new consumer group instance and sum of max_partition_count equals the number of partitions,
// the rebalance will happen immediately.
// Default is 10 seconds.
int32 rebalance_seconds = 5;
}
message AckUnAssignmentMessage {
schema_pb.Partition partition = 1;
}
message AckAssignmentMessage {
schema_pb.Partition partition = 1;
}
oneof message {
InitMessage init = 1;
AckAssignmentMessage ack_assignment = 2;
AckUnAssignmentMessage ack_un_assignment = 3;
}
}
message SubscriberToSubCoordinatorResponse {
message Assignment {
BrokerPartitionAssignment partition_assignment = 1;
}
message UnAssignment {
schema_pb.Partition partition = 1;
}
oneof message {
Assignment assignment = 1;
UnAssignment un_assignment = 2;
}
}
//////////////////////////////////////////////////
message ControlMessage {
bool is_close = 1;
string publisher_name = 2;
}
message DataMessage {
bytes key = 1;
bytes value = 2;
int64 ts_ns = 3;
ControlMessage ctrl = 4;
}
message PublishMessageRequest {
message InitMessage {
schema_pb.Topic topic = 1;
schema_pb.Partition partition = 2;
int32 ack_interval = 3;
string follower_broker = 4;
string publisher_name = 5; // for debugging
}
oneof message {
InitMessage init = 1;
DataMessage data = 2;
}
}
message PublishMessageResponse {
int64 ack_ts_ns = 1; // Acknowledgment timestamp in nanoseconds
string error = 2;
bool should_close = 3;
int32 error_code = 4; // Structured error code for reliable error mapping
int64 assigned_offset = 5; // The actual offset assigned by SeaweedMQ for this message
}
message PublishFollowMeRequest {
message InitMessage {
schema_pb.Topic topic = 1;
schema_pb.Partition partition = 2;
}
message FlushMessage {
int64 ts_ns = 1;
}
message CloseMessage {
}
oneof message {
InitMessage init = 1;
DataMessage data = 2;
FlushMessage flush = 3;
CloseMessage close = 4;
}
}
message PublishFollowMeResponse {
int64 ack_ts_ns = 1;
}
message SubscribeMessageRequest {
message InitMessage {
string consumer_group = 1;
string consumer_id = 2;
string client_id = 3;
schema_pb.Topic topic = 4;
schema_pb.PartitionOffset partition_offset = 5;
schema_pb.OffsetType offset_type = 6;
string filter = 10;
string follower_broker = 11;
int32 sliding_window_size = 12;
}
message AckMessage {
int64 ts_ns = 1; // Timestamp in nanoseconds for acknowledgment tracking
bytes key = 2;
}
message SeekMessage {
int64 offset = 1; // New offset to seek to
schema_pb.OffsetType offset_type = 2; // EXACT_OFFSET, RESET_TO_LATEST, etc.
}
oneof message {
InitMessage init = 1;
AckMessage ack = 2;
SeekMessage seek = 3;
}
}
message SubscribeMessageResponse {
message SubscribeCtrlMessage {
string error = 1;
bool is_end_of_stream = 2;
bool is_end_of_topic = 3;
}
oneof message {
SubscribeCtrlMessage ctrl = 1;
DataMessage data = 2;
}
}
message SubscribeFollowMeRequest {
message InitMessage {
schema_pb.Topic topic = 1;
schema_pb.Partition partition = 2;
string consumer_group = 3;
}
message AckMessage {
int64 ts_ns = 1;
}
message CloseMessage {
}
oneof message {
InitMessage init = 1;
AckMessage ack = 2;
CloseMessage close = 3;
}
}
message SubscribeFollowMeResponse {
int64 ack_ts_ns = 1;
}
//////////////////////////////////////////////////
// Stateless Fetch API (Kafka-style)
// Unlike SubscribeMessage which maintains long-lived Subscribe loops,
// FetchMessage is completely stateless - each request is independent.
// This eliminates concurrent access issues and stream corruption.
//
// Key differences from SubscribeMessage:
// 1. Request/Response pattern (not streaming)
// 2. No session state maintained
// 3. Each fetch is independent
// 4. Natural support for concurrent reads at different offsets
// 5. Client manages offset tracking (like Kafka)
//////////////////////////////////////////////////
message FetchMessageRequest {
// Topic and partition to fetch from
schema_pb.Topic topic = 1;
schema_pb.Partition partition = 2;
// Starting offset for this fetch
int64 start_offset = 3;
// Maximum number of bytes to return (limit response size)
int32 max_bytes = 4;
// Maximum number of messages to return
int32 max_messages = 5;
// Maximum time to wait for data if partition is empty (milliseconds)
// 0 = return immediately, >0 = wait up to this long
int32 max_wait_ms = 6;
// Minimum bytes before responding (0 = respond immediately)
// This allows batching for efficiency
int32 min_bytes = 7;
// Consumer identity (for monitoring/debugging)
string consumer_group = 8;
string consumer_id = 9;
}
message FetchMessageResponse {
// Messages fetched (may be empty if no data available)
repeated DataMessage messages = 1;
// Metadata about partition state
int64 high_water_mark = 2; // Highest offset available
int64 log_start_offset = 3; // Earliest offset available
bool end_of_partition = 4; // True if no more data available
// Error handling
string error = 5;
int32 error_code = 6;
// Next offset to fetch (for client convenience)
// Client should fetch from this offset next
int64 next_offset = 7;
}
message ClosePublishersRequest {
schema_pb.Topic topic = 1;
int64 unix_time_ns = 2;
}
message ClosePublishersResponse {
}
message CloseSubscribersRequest {
schema_pb.Topic topic = 1;
int64 unix_time_ns = 2;
}
message CloseSubscribersResponse {
}
//////////////////////////////////////////////////
// SQL query support messages
message GetUnflushedMessagesRequest {
schema_pb.Topic topic = 1;
schema_pb.Partition partition = 2;
int64 start_buffer_offset = 3; // Filter by buffer offset (messages from buffers >= this offset)
}
message GetUnflushedMessagesResponse {
filer_pb.LogEntry message = 1; // Single message per response (streaming)
string error = 2; // Error message if any
bool end_of_stream = 3; // Indicates this is the final response
}
//////////////////////////////////////////////////
// Partition range information messages
message GetPartitionRangeInfoRequest {
schema_pb.Topic topic = 1;
schema_pb.Partition partition = 2;
}
message GetPartitionRangeInfoResponse {
// Offset range information
OffsetRangeInfo offset_range = 1;
// Timestamp range information
TimestampRangeInfo timestamp_range = 2;
// Future: ID range information (for ordered IDs, UUIDs, etc.)
// IdRangeInfo id_range = 3;
// Partition metadata
int64 record_count = 10;
int64 active_subscriptions = 11;
string error = 12;
}
message OffsetRangeInfo {
int64 earliest_offset = 1;
int64 latest_offset = 2;
int64 high_water_mark = 3;
}
message TimestampRangeInfo {
int64 earliest_timestamp_ns = 1; // Earliest message timestamp in nanoseconds
int64 latest_timestamp_ns = 2; // Latest message timestamp in nanoseconds
}
// Future extension for ID ranges
// message IdRangeInfo {
// string earliest_id = 1;
// string latest_id = 2;
// string id_type = 3; // "uuid", "sequential", "custom", etc.
// }
// Removed Kafka Gateway Registration messages - no longer needed