photoncloud-monorepo/lightningstor/crates/lightningstor-node/proto/node.proto

135 lines
3.6 KiB
Protocol Buffer

syntax = "proto3";
package lightningstor.node.v1;
option java_package = "com.lightningstor.node.v1";
option go_package = "lightningstor/node/v1;nodev1";
import "google/protobuf/empty.proto";
// =============================================================================
// Node Storage Service - Chunk-level operations for distributed storage
// =============================================================================
service NodeService {
// Chunk operations
rpc PutChunk(PutChunkRequest) returns (PutChunkResponse);
rpc GetChunk(GetChunkRequest) returns (GetChunkResponse);
rpc DeleteChunk(DeleteChunkRequest) returns (google.protobuf.Empty);
rpc ChunkExists(ChunkExistsRequest) returns (ChunkExistsResponse);
rpc ChunkSize(ChunkSizeRequest) returns (ChunkSizeResponse);
// Health and status
rpc Ping(PingRequest) returns (PingResponse);
rpc GetStatus(GetStatusRequest) returns (GetStatusResponse);
// Batch operations for efficiency
rpc BatchPutChunks(stream PutChunkRequest) returns (BatchPutChunksResponse);
rpc BatchGetChunks(BatchGetChunksRequest) returns (stream GetChunkResponse);
}
// =============================================================================
// Chunk Operations
// =============================================================================
message PutChunkRequest {
// Unique identifier for the chunk
string chunk_id = 1;
// Shard index (for erasure coding)
uint32 shard_index = 2;
// Whether this is a parity shard
bool is_parity = 3;
// Chunk data
bytes data = 4;
}
message PutChunkResponse {
// Size of data stored
uint64 size = 1;
}
message GetChunkRequest {
string chunk_id = 1;
uint32 shard_index = 2;
bool is_parity = 3;
}
message GetChunkResponse {
// Chunk data (or empty if streaming)
bytes data = 1;
// Size of the chunk
uint64 size = 2;
}
message DeleteChunkRequest {
string chunk_id = 1;
}
message ChunkExistsRequest {
string chunk_id = 1;
}
message ChunkExistsResponse {
bool exists = 1;
}
message ChunkSizeRequest {
string chunk_id = 1;
}
message ChunkSizeResponse {
// Size in bytes, or 0 if not found
uint64 size = 1;
bool exists = 2;
}
// =============================================================================
// Health and Status
// =============================================================================
message PingRequest {}
message PingResponse {
// Round-trip time in microseconds (server processing time)
uint64 latency_us = 1;
}
message GetStatusRequest {}
message GetStatusResponse {
// Node identifier
string node_id = 1;
// Endpoint address
string endpoint = 2;
// Zone/rack for placement
string zone = 3;
// Region
string region = 4;
// Storage capacity in bytes
uint64 capacity_bytes = 5;
// Used storage in bytes
uint64 used_bytes = 6;
// Number of chunks stored
uint64 chunk_count = 7;
// Node is healthy and accepting requests
bool healthy = 8;
// Uptime in seconds
uint64 uptime_seconds = 9;
}
// =============================================================================
// Batch Operations
// =============================================================================
message BatchPutChunksResponse {
// Number of chunks successfully stored
uint32 success_count = 1;
// Number of chunks that failed
uint32 failure_count = 2;
// Error messages for failed chunks
repeated string errors = 3;
}
message BatchGetChunksRequest {
repeated GetChunkRequest chunks = 1;
}