Browse Source
seaweed-volume: add Rust project skeleton with proto codegen
seaweed-volume: add Rust project skeleton with proto codegen
Cargo.toml with all dependencies (tonic, axum, clap, prometheus, etc.), build.rs for tonic-build proto compilation, and copies of volume_server.proto, master.proto, remote.proto for gRPC codegen.rust-volume-server
5 changed files with 1403 additions and 0 deletions
-
81seaweed-volume/Cargo.toml
-
14seaweed-volume/build.rs
-
474seaweed-volume/proto/master.proto
-
76seaweed-volume/proto/remote.proto
-
758seaweed-volume/proto/volume_server.proto
@ -0,0 +1,81 @@ |
|||||
|
[package] |
||||
|
name = "seaweed-volume" |
||||
|
version = "0.1.0" |
||||
|
edition = "2021" |
||||
|
description = "SeaweedFS Volume Server — Rust implementation" |
||||
|
|
||||
|
[dependencies] |
||||
|
# Async runtime |
||||
|
tokio = { version = "1", features = ["full"] } |
||||
|
|
||||
|
# gRPC + protobuf |
||||
|
tonic = { version = "0.12", features = ["tls"] } |
||||
|
prost = "0.13" |
||||
|
prost-types = "0.13" |
||||
|
|
||||
|
# HTTP server |
||||
|
axum = { version = "0.7", features = ["multipart"] } |
||||
|
hyper = { version = "1", features = ["full"] } |
||||
|
hyper-util = { version = "0.1", features = ["tokio"] } |
||||
|
tower = "0.4" |
||||
|
tower-http = { version = "0.5", features = ["cors", "trace"] } |
||||
|
|
||||
|
# CLI |
||||
|
clap = { version = "4", features = ["derive"] } |
||||
|
|
||||
|
# Metrics |
||||
|
prometheus = { version = "0.13", features = ["process"] } |
||||
|
|
||||
|
# JWT |
||||
|
jsonwebtoken = "9" |
||||
|
|
||||
|
# TLS |
||||
|
rustls = "0.23" |
||||
|
tokio-rustls = "0.26" |
||||
|
rustls-pemfile = "2" |
||||
|
|
||||
|
# LevelDB (via RocksDB for better Rust support) |
||||
|
# Using rusty-leveldb for pure Rust LevelDB |
||||
|
rusty-leveldb = "3" |
||||
|
|
||||
|
# Reed-Solomon erasure coding |
||||
|
reed-solomon-erasure = "6" |
||||
|
|
||||
|
# Logging |
||||
|
tracing = "0.1" |
||||
|
tracing-subscriber = { version = "0.3", features = ["env-filter"] } |
||||
|
|
||||
|
# Config |
||||
|
toml = "0.8" |
||||
|
serde = { version = "1", features = ["derive"] } |
||||
|
serde_json = "1" |
||||
|
|
||||
|
# CRC32 |
||||
|
crc32fast = "1" |
||||
|
|
||||
|
# Memory-mapped files |
||||
|
memmap2 = "0.9" |
||||
|
|
||||
|
# UUID |
||||
|
uuid = { version = "1", features = ["v4"] } |
||||
|
|
||||
|
# HTTP client (for proxying, remote fetch) |
||||
|
reqwest = { version = "0.12", features = ["rustls-tls", "stream"] } |
||||
|
|
||||
|
# Misc |
||||
|
bytes = "1" |
||||
|
rand = "0.8" |
||||
|
chrono = "0.4" |
||||
|
hex = "0.4" |
||||
|
parking_lot = "0.12" |
||||
|
dashmap = "6" |
||||
|
thiserror = "1" |
||||
|
anyhow = "1" |
||||
|
async-trait = "0.1" |
||||
|
futures = "0.3" |
||||
|
|
||||
|
# Disk space checking |
||||
|
sysinfo = "0.31" |
||||
|
|
||||
|
[build-dependencies] |
||||
|
tonic-build = "0.12" |
||||
@ -0,0 +1,14 @@ |
|||||
|
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
|
tonic_build::configure()
|
||||
|
.build_server(true)
|
||||
|
.build_client(true)
|
||||
|
.compile_protos(
|
||||
|
&[
|
||||
|
"proto/volume_server.proto",
|
||||
|
"proto/master.proto",
|
||||
|
"proto/remote.proto",
|
||||
|
],
|
||||
|
&["proto/"],
|
||||
|
)?;
|
||||
|
Ok(())
|
||||
|
}
|
||||
@ -0,0 +1,474 @@ |
|||||
|
syntax = "proto3"; |
||||
|
|
||||
|
package master_pb; |
||||
|
|
||||
|
option go_package = "github.com/seaweedfs/seaweedfs/weed/pb/master_pb"; |
||||
|
|
||||
|
import "volume_server.proto"; |
||||
|
|
||||
|
////////////////////////////////////////////////// |
||||
|
|
||||
|
service Seaweed { |
||||
|
rpc SendHeartbeat (stream Heartbeat) returns (stream HeartbeatResponse) { |
||||
|
} |
||||
|
rpc KeepConnected (stream KeepConnectedRequest) returns (stream KeepConnectedResponse) { |
||||
|
} |
||||
|
rpc LookupVolume (LookupVolumeRequest) returns (LookupVolumeResponse) { |
||||
|
} |
||||
|
rpc Assign (AssignRequest) returns (AssignResponse) { |
||||
|
} |
||||
|
rpc StreamAssign (stream AssignRequest) returns (stream AssignResponse) { |
||||
|
} |
||||
|
rpc Statistics (StatisticsRequest) returns (StatisticsResponse) { |
||||
|
} |
||||
|
rpc CollectionList (CollectionListRequest) returns (CollectionListResponse) { |
||||
|
} |
||||
|
rpc CollectionDelete (CollectionDeleteRequest) returns (CollectionDeleteResponse) { |
||||
|
} |
||||
|
rpc VolumeList (VolumeListRequest) returns (VolumeListResponse) { |
||||
|
} |
||||
|
rpc LookupEcVolume (LookupEcVolumeRequest) returns (LookupEcVolumeResponse) { |
||||
|
} |
||||
|
rpc VacuumVolume (VacuumVolumeRequest) returns (VacuumVolumeResponse) { |
||||
|
} |
||||
|
rpc DisableVacuum (DisableVacuumRequest) returns (DisableVacuumResponse) { |
||||
|
} |
||||
|
rpc EnableVacuum (EnableVacuumRequest) returns (EnableVacuumResponse) { |
||||
|
} |
||||
|
rpc VolumeMarkReadonly (VolumeMarkReadonlyRequest) returns (VolumeMarkReadonlyResponse) { |
||||
|
} |
||||
|
rpc GetMasterConfiguration (GetMasterConfigurationRequest) returns (GetMasterConfigurationResponse) { |
||||
|
} |
||||
|
rpc ListClusterNodes (ListClusterNodesRequest) returns (ListClusterNodesResponse) { |
||||
|
} |
||||
|
rpc LeaseAdminToken (LeaseAdminTokenRequest) returns (LeaseAdminTokenResponse) { |
||||
|
} |
||||
|
rpc ReleaseAdminToken (ReleaseAdminTokenRequest) returns (ReleaseAdminTokenResponse) { |
||||
|
} |
||||
|
rpc Ping (PingRequest) returns (PingResponse) { |
||||
|
} |
||||
|
rpc RaftListClusterServers (RaftListClusterServersRequest) returns (RaftListClusterServersResponse) { |
||||
|
} |
||||
|
rpc RaftAddServer (RaftAddServerRequest) returns (RaftAddServerResponse) { |
||||
|
} |
||||
|
rpc RaftRemoveServer (RaftRemoveServerRequest) returns (RaftRemoveServerResponse) { |
||||
|
} |
||||
|
rpc RaftLeadershipTransfer (RaftLeadershipTransferRequest) returns (RaftLeadershipTransferResponse) { |
||||
|
} |
||||
|
rpc VolumeGrow (VolumeGrowRequest) returns (VolumeGrowResponse) { |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
////////////////////////////////////////////////// |
||||
|
|
||||
|
message DiskTag { |
||||
|
uint32 disk_id = 1; |
||||
|
repeated string tags = 2; |
||||
|
} |
||||
|
|
||||
|
message Heartbeat { |
||||
|
string ip = 1; |
||||
|
uint32 port = 2; |
||||
|
string public_url = 3; |
||||
|
uint64 max_file_key = 5; |
||||
|
string data_center = 6; |
||||
|
string rack = 7; |
||||
|
uint32 admin_port = 8; |
||||
|
repeated VolumeInformationMessage volumes = 9; |
||||
|
// delta volumes |
||||
|
repeated VolumeShortInformationMessage new_volumes = 10; |
||||
|
repeated VolumeShortInformationMessage deleted_volumes = 11; |
||||
|
bool has_no_volumes = 12; |
||||
|
|
||||
|
// erasure coding |
||||
|
repeated VolumeEcShardInformationMessage ec_shards = 16; |
||||
|
// delta erasure coding shards |
||||
|
repeated VolumeEcShardInformationMessage new_ec_shards = 17; |
||||
|
repeated VolumeEcShardInformationMessage deleted_ec_shards = 18; |
||||
|
bool has_no_ec_shards = 19; |
||||
|
|
||||
|
map<string, uint32> max_volume_counts = 4; |
||||
|
uint32 grpc_port = 20; |
||||
|
repeated string location_uuids = 21; |
||||
|
string id = 22; // volume server id, independent of ip:port for stable identification |
||||
|
|
||||
|
// state flags |
||||
|
volume_server_pb.VolumeServerState state = 23; |
||||
|
|
||||
|
repeated DiskTag disk_tags = 24; |
||||
|
} |
||||
|
|
||||
|
message HeartbeatResponse { |
||||
|
uint64 volume_size_limit = 1; |
||||
|
string leader = 2; |
||||
|
string metrics_address = 3; |
||||
|
uint32 metrics_interval_seconds = 4; |
||||
|
repeated StorageBackend storage_backends = 5; |
||||
|
repeated string duplicated_uuids = 6; |
||||
|
bool preallocate = 7; |
||||
|
} |
||||
|
|
||||
|
message VolumeInformationMessage { |
||||
|
uint32 id = 1; |
||||
|
uint64 size = 2; |
||||
|
string collection = 3; |
||||
|
uint64 file_count = 4; |
||||
|
uint64 delete_count = 5; |
||||
|
uint64 deleted_byte_count = 6; |
||||
|
bool read_only = 7; |
||||
|
uint32 replica_placement = 8; |
||||
|
uint32 version = 9; |
||||
|
uint32 ttl = 10; |
||||
|
uint32 compact_revision = 11; |
||||
|
int64 modified_at_second = 12; |
||||
|
string remote_storage_name = 13; |
||||
|
string remote_storage_key = 14; |
||||
|
string disk_type = 15; |
||||
|
uint32 disk_id = 16; |
||||
|
} |
||||
|
|
||||
|
message VolumeShortInformationMessage { |
||||
|
uint32 id = 1; |
||||
|
string collection = 3; |
||||
|
uint32 replica_placement = 8; |
||||
|
uint32 version = 9; |
||||
|
uint32 ttl = 10; |
||||
|
string disk_type = 15; |
||||
|
uint32 disk_id = 16; |
||||
|
} |
||||
|
|
||||
|
message VolumeEcShardInformationMessage { |
||||
|
uint32 id = 1; |
||||
|
string collection = 2; |
||||
|
uint32 ec_index_bits = 3; |
||||
|
string disk_type = 4; |
||||
|
uint64 expire_at_sec = 5; // used to record the destruction time of ec volume |
||||
|
uint32 disk_id = 6; |
||||
|
repeated int64 shard_sizes = 7; // optimized: sizes for shards in order of set bits in ec_index_bits |
||||
|
} |
||||
|
|
||||
|
message StorageBackend { |
||||
|
string type = 1; |
||||
|
string id = 2; |
||||
|
map<string, string> properties = 3; |
||||
|
} |
||||
|
|
||||
|
message Empty { |
||||
|
} |
||||
|
|
||||
|
message SuperBlockExtra { |
||||
|
message ErasureCoding { |
||||
|
uint32 data = 1; |
||||
|
uint32 parity = 2; |
||||
|
repeated uint32 volume_ids = 3; |
||||
|
} |
||||
|
ErasureCoding erasure_coding = 1; |
||||
|
} |
||||
|
|
||||
|
message KeepConnectedRequest { |
||||
|
string client_type = 1; |
||||
|
string client_address = 3; |
||||
|
string version = 4; |
||||
|
string filer_group = 5; |
||||
|
string data_center = 6; |
||||
|
string rack = 7; |
||||
|
} |
||||
|
|
||||
|
message VolumeLocation { |
||||
|
string url = 1; |
||||
|
string public_url = 2; |
||||
|
repeated uint32 new_vids = 3; |
||||
|
repeated uint32 deleted_vids = 4; |
||||
|
string leader = 5; // optional when leader is not itself |
||||
|
string data_center = 6; // optional when DataCenter is in use |
||||
|
uint32 grpc_port = 7; |
||||
|
repeated uint32 new_ec_vids = 8; |
||||
|
repeated uint32 deleted_ec_vids = 9; |
||||
|
} |
||||
|
|
||||
|
message ClusterNodeUpdate { |
||||
|
string node_type = 1; |
||||
|
string address = 2; |
||||
|
bool is_add = 4; |
||||
|
string filer_group = 5; |
||||
|
int64 created_at_ns = 6; |
||||
|
} |
||||
|
|
||||
|
message KeepConnectedResponse { |
||||
|
VolumeLocation volume_location = 1; |
||||
|
ClusterNodeUpdate cluster_node_update = 2; |
||||
|
} |
||||
|
|
||||
|
message LookupVolumeRequest { |
||||
|
repeated string volume_or_file_ids = 1; |
||||
|
string collection = 2; // optional, a bit faster if provided. |
||||
|
} |
||||
|
message LookupVolumeResponse { |
||||
|
message VolumeIdLocation { |
||||
|
string volume_or_file_id = 1; |
||||
|
repeated Location locations = 2; |
||||
|
string error = 3; |
||||
|
string auth = 4; |
||||
|
} |
||||
|
repeated VolumeIdLocation volume_id_locations = 1; |
||||
|
} |
||||
|
|
||||
|
message Location { |
||||
|
string url = 1; |
||||
|
string public_url = 2; |
||||
|
uint32 grpc_port = 3; |
||||
|
string data_center = 4; |
||||
|
} |
||||
|
|
||||
|
message AssignRequest { |
||||
|
uint64 count = 1; |
||||
|
string replication = 2; |
||||
|
string collection = 3; |
||||
|
string ttl = 4; |
||||
|
string data_center = 5; |
||||
|
string rack = 6; |
||||
|
string data_node = 7; |
||||
|
uint32 memory_map_max_size_mb = 8; |
||||
|
uint32 writable_volume_count = 9; |
||||
|
string disk_type = 10; |
||||
|
} |
||||
|
|
||||
|
message VolumeGrowRequest { |
||||
|
uint32 writable_volume_count = 1; |
||||
|
string replication = 2; |
||||
|
string collection = 3; |
||||
|
string ttl = 4; |
||||
|
string data_center = 5; |
||||
|
string rack = 6; |
||||
|
string data_node = 7; |
||||
|
uint32 memory_map_max_size_mb = 8; |
||||
|
string disk_type = 9; |
||||
|
} |
||||
|
|
||||
|
message AssignResponse { |
||||
|
string fid = 1; |
||||
|
uint64 count = 4; |
||||
|
string error = 5; |
||||
|
string auth = 6; |
||||
|
repeated Location replicas = 7; |
||||
|
Location location = 8; |
||||
|
} |
||||
|
|
||||
|
message StatisticsRequest { |
||||
|
string replication = 1; |
||||
|
string collection = 2; |
||||
|
string ttl = 3; |
||||
|
string disk_type = 4; |
||||
|
} |
||||
|
message StatisticsResponse { |
||||
|
uint64 total_size = 4; |
||||
|
uint64 used_size = 5; |
||||
|
uint64 file_count = 6; |
||||
|
} |
||||
|
|
||||
|
// |
||||
|
// collection related |
||||
|
// |
||||
|
message Collection { |
||||
|
string name = 1; |
||||
|
} |
||||
|
message CollectionListRequest { |
||||
|
bool include_normal_volumes = 1; |
||||
|
bool include_ec_volumes = 2; |
||||
|
} |
||||
|
message CollectionListResponse { |
||||
|
repeated Collection collections = 1; |
||||
|
} |
||||
|
|
||||
|
message CollectionDeleteRequest { |
||||
|
string name = 1; |
||||
|
} |
||||
|
message CollectionDeleteResponse { |
||||
|
} |
||||
|
|
||||
|
// |
||||
|
// volume related |
||||
|
// |
||||
|
message DiskInfo { |
||||
|
string type = 1; |
||||
|
int64 volume_count = 2; |
||||
|
int64 max_volume_count = 3; |
||||
|
int64 free_volume_count = 4; |
||||
|
int64 active_volume_count = 5; |
||||
|
repeated VolumeInformationMessage volume_infos = 6; |
||||
|
repeated VolumeEcShardInformationMessage ec_shard_infos = 7; |
||||
|
int64 remote_volume_count = 8; |
||||
|
uint32 disk_id = 9; |
||||
|
repeated string tags = 10; |
||||
|
} |
||||
|
message DataNodeInfo { |
||||
|
string id = 1; |
||||
|
map<string, DiskInfo> diskInfos = 2; |
||||
|
uint32 grpc_port = 3; |
||||
|
string address = 4; // ip:port for connecting to the volume server |
||||
|
} |
||||
|
message RackInfo { |
||||
|
string id = 1; |
||||
|
repeated DataNodeInfo data_node_infos = 2; |
||||
|
map<string, DiskInfo> diskInfos = 3; |
||||
|
} |
||||
|
message DataCenterInfo { |
||||
|
string id = 1; |
||||
|
repeated RackInfo rack_infos = 2; |
||||
|
map<string, DiskInfo> diskInfos = 3; |
||||
|
} |
||||
|
message TopologyInfo { |
||||
|
string id = 1; |
||||
|
repeated DataCenterInfo data_center_infos = 2; |
||||
|
map<string, DiskInfo> diskInfos = 3; |
||||
|
} |
||||
|
message VolumeListRequest { |
||||
|
} |
||||
|
message VolumeListResponse { |
||||
|
TopologyInfo topology_info = 1; |
||||
|
uint64 volume_size_limit_mb = 2; |
||||
|
} |
||||
|
|
||||
|
message LookupEcVolumeRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
} |
||||
|
message LookupEcVolumeResponse { |
||||
|
uint32 volume_id = 1; |
||||
|
message EcShardIdLocation { |
||||
|
uint32 shard_id = 1; |
||||
|
repeated Location locations = 2; |
||||
|
} |
||||
|
repeated EcShardIdLocation shard_id_locations = 2; |
||||
|
} |
||||
|
|
||||
|
message VacuumVolumeRequest { |
||||
|
float garbage_threshold = 1; |
||||
|
uint32 volume_id = 2; |
||||
|
string collection = 3; |
||||
|
} |
||||
|
message VacuumVolumeResponse { |
||||
|
} |
||||
|
|
||||
|
message DisableVacuumRequest { |
||||
|
} |
||||
|
message DisableVacuumResponse { |
||||
|
} |
||||
|
|
||||
|
message EnableVacuumRequest { |
||||
|
} |
||||
|
message EnableVacuumResponse { |
||||
|
} |
||||
|
|
||||
|
message VolumeMarkReadonlyRequest { |
||||
|
string ip = 1; |
||||
|
uint32 port = 2; |
||||
|
uint32 volume_id = 4; |
||||
|
string collection = 5; |
||||
|
uint32 replica_placement = 6; |
||||
|
uint32 version = 7; |
||||
|
uint32 ttl = 8; |
||||
|
string disk_type = 9; |
||||
|
bool is_readonly = 10; |
||||
|
} |
||||
|
message VolumeMarkReadonlyResponse { |
||||
|
} |
||||
|
|
||||
|
message GetMasterConfigurationRequest { |
||||
|
} |
||||
|
message GetMasterConfigurationResponse { |
||||
|
string metrics_address = 1; |
||||
|
uint32 metrics_interval_seconds = 2; |
||||
|
repeated StorageBackend storage_backends = 3; |
||||
|
string default_replication = 4; |
||||
|
string leader = 5; |
||||
|
uint32 volume_size_limit_m_b = 6; |
||||
|
bool volume_preallocate = 7; |
||||
|
// MIGRATION: fields 8-9 help migrate master.toml [master.maintenance] to admin script plugin. Remove after March 2027. |
||||
|
string maintenance_scripts = 8; |
||||
|
uint32 maintenance_sleep_minutes = 9; |
||||
|
} |
||||
|
|
||||
|
message ListClusterNodesRequest { |
||||
|
string client_type = 1; |
||||
|
string filer_group = 2; |
||||
|
int32 limit = 4; |
||||
|
} |
||||
|
message ListClusterNodesResponse { |
||||
|
message ClusterNode { |
||||
|
string address = 1; |
||||
|
string version = 2; |
||||
|
int64 created_at_ns = 4; |
||||
|
string data_center = 5; |
||||
|
string rack = 6; |
||||
|
} |
||||
|
repeated ClusterNode cluster_nodes = 1; |
||||
|
} |
||||
|
|
||||
|
message LeaseAdminTokenRequest { |
||||
|
int64 previous_token = 1; |
||||
|
int64 previous_lock_time = 2; |
||||
|
string lock_name = 3; |
||||
|
string client_name = 4; |
||||
|
string message = 5; |
||||
|
} |
||||
|
message LeaseAdminTokenResponse { |
||||
|
int64 token = 1; |
||||
|
int64 lock_ts_ns = 2; |
||||
|
} |
||||
|
|
||||
|
message ReleaseAdminTokenRequest { |
||||
|
int64 previous_token = 1; |
||||
|
int64 previous_lock_time = 2; |
||||
|
string lock_name = 3; |
||||
|
} |
||||
|
message ReleaseAdminTokenResponse { |
||||
|
} |
||||
|
|
||||
|
message PingRequest { |
||||
|
string target = 1; // default to ping itself |
||||
|
string target_type = 2; |
||||
|
} |
||||
|
message PingResponse { |
||||
|
int64 start_time_ns = 1; |
||||
|
int64 remote_time_ns = 2; |
||||
|
int64 stop_time_ns = 3; |
||||
|
} |
||||
|
|
||||
|
message RaftAddServerRequest { |
||||
|
string id = 1; |
||||
|
string address = 2; |
||||
|
bool voter = 3; |
||||
|
} |
||||
|
message RaftAddServerResponse { |
||||
|
} |
||||
|
|
||||
|
message RaftRemoveServerRequest { |
||||
|
string id = 1; |
||||
|
bool force = 2; |
||||
|
} |
||||
|
message RaftRemoveServerResponse { |
||||
|
} |
||||
|
|
||||
|
message RaftListClusterServersRequest { |
||||
|
} |
||||
|
message RaftListClusterServersResponse { |
||||
|
message ClusterServers { |
||||
|
string id = 1; |
||||
|
string address = 2; |
||||
|
string suffrage = 3; |
||||
|
bool isLeader = 4; |
||||
|
} |
||||
|
repeated ClusterServers cluster_servers = 1; |
||||
|
} |
||||
|
|
||||
|
message RaftLeadershipTransferRequest { |
||||
|
string target_id = 1; // Optional: target server ID. If empty, transfers to any eligible follower |
||||
|
string target_address = 2; // Optional: target server address. Required if target_id is specified |
||||
|
} |
||||
|
message RaftLeadershipTransferResponse { |
||||
|
string previous_leader = 1; |
||||
|
string new_leader = 2; |
||||
|
} |
||||
|
|
||||
|
message VolumeGrowResponse { |
||||
|
} |
||||
@ -0,0 +1,76 @@ |
|||||
|
syntax = "proto3"; |
||||
|
|
||||
|
package remote_pb; |
||||
|
|
||||
|
option go_package = "github.com/seaweedfs/seaweedfs/weed/pb/remote_pb"; |
||||
|
option java_package = "seaweedfs.client"; |
||||
|
option java_outer_classname = "FilerProto"; |
||||
|
|
||||
|
///////////////////////// |
||||
|
// Remote Storage related |
||||
|
///////////////////////// |
||||
|
message RemoteConf { |
||||
|
string type = 1; |
||||
|
string name = 2; |
||||
|
string s3_access_key = 4; |
||||
|
string s3_secret_key = 5; |
||||
|
string s3_region = 6; |
||||
|
string s3_endpoint = 7; |
||||
|
string s3_storage_class = 8; |
||||
|
bool s3_force_path_style = 9; |
||||
|
bool s3_support_tagging = 13; |
||||
|
bool s3_v4_signature = 11; |
||||
|
|
||||
|
string gcs_google_application_credentials = 10; |
||||
|
string gcs_project_id = 12; |
||||
|
|
||||
|
string azure_account_name = 15; |
||||
|
string azure_account_key = 16; |
||||
|
|
||||
|
string backblaze_key_id = 20; |
||||
|
string backblaze_application_key = 21; |
||||
|
string backblaze_endpoint = 22; |
||||
|
string backblaze_region = 23; |
||||
|
|
||||
|
string aliyun_access_key = 25; |
||||
|
string aliyun_secret_key = 26; |
||||
|
string aliyun_endpoint = 27; |
||||
|
string aliyun_region = 28; |
||||
|
|
||||
|
string tencent_secret_id = 30; |
||||
|
string tencent_secret_key = 31; |
||||
|
string tencent_endpoint = 32; |
||||
|
|
||||
|
string baidu_access_key = 35; |
||||
|
string baidu_secret_key = 36; |
||||
|
string baidu_endpoint = 37; |
||||
|
string baidu_region = 38; |
||||
|
|
||||
|
string wasabi_access_key = 40; |
||||
|
string wasabi_secret_key = 41; |
||||
|
string wasabi_endpoint = 42; |
||||
|
string wasabi_region = 43; |
||||
|
|
||||
|
string filebase_access_key = 60; |
||||
|
string filebase_secret_key = 61; |
||||
|
string filebase_endpoint = 62; |
||||
|
|
||||
|
string storj_access_key = 65; |
||||
|
string storj_secret_key = 66; |
||||
|
string storj_endpoint = 67; |
||||
|
|
||||
|
string contabo_access_key = 68; |
||||
|
string contabo_secret_key = 69; |
||||
|
string contabo_endpoint = 70; |
||||
|
string contabo_region = 71; |
||||
|
} |
||||
|
|
||||
|
message RemoteStorageMapping { |
||||
|
map<string,RemoteStorageLocation> mappings = 1; |
||||
|
string primary_bucket_storage_name = 2; |
||||
|
} |
||||
|
message RemoteStorageLocation { |
||||
|
string name = 1; |
||||
|
string bucket = 2; |
||||
|
string path = 3; |
||||
|
} |
||||
@ -0,0 +1,758 @@ |
|||||
|
syntax = "proto3"; |
||||
|
|
||||
|
package volume_server_pb; |
||||
|
option go_package = "github.com/seaweedfs/seaweedfs/weed/pb/volume_server_pb"; |
||||
|
|
||||
|
import "remote.proto"; |
||||
|
|
||||
|
////////////////////////////////////////////////// |
||||
|
|
||||
|
// Persistent state for volume servers. |
||||
|
message VolumeServerState { |
||||
|
// whether the server is in maintenance (i.e. read-only) mode. |
||||
|
bool maintenance = 1; |
||||
|
// incremental version counter |
||||
|
uint32 version = 2; |
||||
|
} |
||||
|
|
||||
|
////////////////////////////////////////////////// |
||||
|
|
||||
|
service VolumeServer { |
||||
|
//Experts only: takes multiple fid parameters. This function does not propagate deletes to replicas. |
||||
|
rpc BatchDelete (BatchDeleteRequest) returns (BatchDeleteResponse) { |
||||
|
} |
||||
|
|
||||
|
rpc VacuumVolumeCheck (VacuumVolumeCheckRequest) returns (VacuumVolumeCheckResponse) { |
||||
|
} |
||||
|
rpc VacuumVolumeCompact (VacuumVolumeCompactRequest) returns (stream VacuumVolumeCompactResponse) { |
||||
|
} |
||||
|
rpc VacuumVolumeCommit (VacuumVolumeCommitRequest) returns (VacuumVolumeCommitResponse) { |
||||
|
} |
||||
|
rpc VacuumVolumeCleanup (VacuumVolumeCleanupRequest) returns (VacuumVolumeCleanupResponse) { |
||||
|
} |
||||
|
|
||||
|
rpc DeleteCollection (DeleteCollectionRequest) returns (DeleteCollectionResponse) { |
||||
|
} |
||||
|
rpc AllocateVolume (AllocateVolumeRequest) returns (AllocateVolumeResponse) { |
||||
|
} |
||||
|
|
||||
|
rpc VolumeSyncStatus (VolumeSyncStatusRequest) returns (VolumeSyncStatusResponse) { |
||||
|
} |
||||
|
rpc VolumeIncrementalCopy (VolumeIncrementalCopyRequest) returns (stream VolumeIncrementalCopyResponse) { |
||||
|
} |
||||
|
|
||||
|
rpc VolumeMount (VolumeMountRequest) returns (VolumeMountResponse) { |
||||
|
} |
||||
|
rpc VolumeUnmount (VolumeUnmountRequest) returns (VolumeUnmountResponse) { |
||||
|
} |
||||
|
rpc VolumeDelete (VolumeDeleteRequest) returns (VolumeDeleteResponse) { |
||||
|
} |
||||
|
rpc VolumeMarkReadonly (VolumeMarkReadonlyRequest) returns (VolumeMarkReadonlyResponse) { |
||||
|
} |
||||
|
rpc VolumeMarkWritable (VolumeMarkWritableRequest) returns (VolumeMarkWritableResponse) { |
||||
|
} |
||||
|
rpc VolumeConfigure (VolumeConfigureRequest) returns (VolumeConfigureResponse) { |
||||
|
} |
||||
|
rpc VolumeStatus (VolumeStatusRequest) returns (VolumeStatusResponse) { |
||||
|
} |
||||
|
|
||||
|
rpc GetState (GetStateRequest) returns (GetStateResponse) { |
||||
|
} |
||||
|
rpc SetState (SetStateRequest) returns (SetStateResponse) { |
||||
|
} |
||||
|
|
||||
|
// copy the .idx .dat files, and mount this volume |
||||
|
rpc VolumeCopy (VolumeCopyRequest) returns (stream VolumeCopyResponse) { |
||||
|
} |
||||
|
rpc ReadVolumeFileStatus (ReadVolumeFileStatusRequest) returns (ReadVolumeFileStatusResponse) { |
||||
|
} |
||||
|
rpc CopyFile (CopyFileRequest) returns (stream CopyFileResponse) { |
||||
|
} |
||||
|
rpc ReceiveFile (stream ReceiveFileRequest) returns (ReceiveFileResponse) { |
||||
|
} |
||||
|
|
||||
|
rpc ReadNeedleBlob (ReadNeedleBlobRequest) returns (ReadNeedleBlobResponse) { |
||||
|
} |
||||
|
rpc ReadNeedleMeta (ReadNeedleMetaRequest) returns (ReadNeedleMetaResponse) { |
||||
|
} |
||||
|
rpc WriteNeedleBlob (WriteNeedleBlobRequest) returns (WriteNeedleBlobResponse) { |
||||
|
} |
||||
|
rpc ReadAllNeedles (ReadAllNeedlesRequest) returns (stream ReadAllNeedlesResponse) { |
||||
|
} |
||||
|
|
||||
|
rpc VolumeTailSender (VolumeTailSenderRequest) returns (stream VolumeTailSenderResponse) { |
||||
|
} |
||||
|
rpc VolumeTailReceiver (VolumeTailReceiverRequest) returns (VolumeTailReceiverResponse) { |
||||
|
} |
||||
|
|
||||
|
// erasure coding |
||||
|
rpc VolumeEcShardsGenerate (VolumeEcShardsGenerateRequest) returns (VolumeEcShardsGenerateResponse) { |
||||
|
} |
||||
|
rpc VolumeEcShardsRebuild (VolumeEcShardsRebuildRequest) returns (VolumeEcShardsRebuildResponse) { |
||||
|
} |
||||
|
rpc VolumeEcShardsCopy (VolumeEcShardsCopyRequest) returns (VolumeEcShardsCopyResponse) { |
||||
|
} |
||||
|
rpc VolumeEcShardsDelete (VolumeEcShardsDeleteRequest) returns (VolumeEcShardsDeleteResponse) { |
||||
|
} |
||||
|
rpc VolumeEcShardsMount (VolumeEcShardsMountRequest) returns (VolumeEcShardsMountResponse) { |
||||
|
} |
||||
|
rpc VolumeEcShardsUnmount (VolumeEcShardsUnmountRequest) returns (VolumeEcShardsUnmountResponse) { |
||||
|
} |
||||
|
rpc VolumeEcShardRead (VolumeEcShardReadRequest) returns (stream VolumeEcShardReadResponse) { |
||||
|
} |
||||
|
rpc VolumeEcBlobDelete (VolumeEcBlobDeleteRequest) returns (VolumeEcBlobDeleteResponse) { |
||||
|
} |
||||
|
rpc VolumeEcShardsToVolume (VolumeEcShardsToVolumeRequest) returns (VolumeEcShardsToVolumeResponse) { |
||||
|
} |
||||
|
rpc VolumeEcShardsInfo (VolumeEcShardsInfoRequest) returns (VolumeEcShardsInfoResponse) { |
||||
|
} |
||||
|
|
||||
|
// tiered storage |
||||
|
rpc VolumeTierMoveDatToRemote (VolumeTierMoveDatToRemoteRequest) returns (stream VolumeTierMoveDatToRemoteResponse) { |
||||
|
} |
||||
|
rpc VolumeTierMoveDatFromRemote (VolumeTierMoveDatFromRemoteRequest) returns (stream VolumeTierMoveDatFromRemoteResponse) { |
||||
|
} |
||||
|
|
||||
|
rpc VolumeServerStatus (VolumeServerStatusRequest) returns (VolumeServerStatusResponse) { |
||||
|
} |
||||
|
rpc VolumeServerLeave (VolumeServerLeaveRequest) returns (VolumeServerLeaveResponse) { |
||||
|
} |
||||
|
|
||||
|
// remote storage |
||||
|
rpc FetchAndWriteNeedle (FetchAndWriteNeedleRequest) returns (FetchAndWriteNeedleResponse) { |
||||
|
} |
||||
|
|
||||
|
// scrubbing |
||||
|
rpc ScrubVolume (ScrubVolumeRequest) returns (ScrubVolumeResponse) { |
||||
|
} |
||||
|
rpc ScrubEcVolume (ScrubEcVolumeRequest) returns (ScrubEcVolumeResponse) { |
||||
|
} |
||||
|
|
||||
|
// <experimental> query |
||||
|
rpc Query (QueryRequest) returns (stream QueriedStripe) { |
||||
|
} |
||||
|
|
||||
|
rpc VolumeNeedleStatus (VolumeNeedleStatusRequest) returns (VolumeNeedleStatusResponse) { |
||||
|
} |
||||
|
|
||||
|
rpc Ping (PingRequest) returns (PingResponse) { |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
////////////////////////////////////////////////// |
||||
|
|
||||
|
message BatchDeleteRequest { |
||||
|
repeated string file_ids = 1; |
||||
|
bool skip_cookie_check = 2; |
||||
|
} |
||||
|
|
||||
|
message BatchDeleteResponse { |
||||
|
repeated DeleteResult results = 1; |
||||
|
} |
||||
|
message DeleteResult { |
||||
|
string file_id = 1; |
||||
|
int32 status = 2; |
||||
|
string error = 3; |
||||
|
uint32 size = 4; |
||||
|
uint32 version = 5; |
||||
|
} |
||||
|
|
||||
|
message Empty { |
||||
|
} |
||||
|
|
||||
|
message VacuumVolumeCheckRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
} |
||||
|
message VacuumVolumeCheckResponse { |
||||
|
double garbage_ratio = 1; |
||||
|
} |
||||
|
|
||||
|
message VacuumVolumeCompactRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
int64 preallocate = 2; |
||||
|
} |
||||
|
message VacuumVolumeCompactResponse { |
||||
|
int64 processed_bytes = 1; |
||||
|
float load_avg_1m = 2; |
||||
|
} |
||||
|
|
||||
|
message VacuumVolumeCommitRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
} |
||||
|
message VacuumVolumeCommitResponse { |
||||
|
bool is_read_only = 1; |
||||
|
uint64 volume_size = 2; |
||||
|
} |
||||
|
|
||||
|
message VacuumVolumeCleanupRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
} |
||||
|
message VacuumVolumeCleanupResponse { |
||||
|
} |
||||
|
|
||||
|
message DeleteCollectionRequest { |
||||
|
string collection = 1; |
||||
|
} |
||||
|
message DeleteCollectionResponse { |
||||
|
} |
||||
|
|
||||
|
message AllocateVolumeRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
string collection = 2; |
||||
|
int64 preallocate = 3; |
||||
|
string replication = 4; |
||||
|
string ttl = 5; |
||||
|
uint32 memory_map_max_size_mb = 6; |
||||
|
string disk_type = 7; |
||||
|
uint32 version = 8; |
||||
|
} |
||||
|
message AllocateVolumeResponse { |
||||
|
} |
||||
|
|
||||
|
message VolumeSyncStatusRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
} |
||||
|
message VolumeSyncStatusResponse { |
||||
|
uint32 volume_id = 1; |
||||
|
string collection = 2; |
||||
|
string replication = 4; |
||||
|
string ttl = 5; |
||||
|
uint64 tail_offset = 6; |
||||
|
uint32 compact_revision = 7; |
||||
|
uint64 idx_file_size = 8; |
||||
|
uint32 version = 9; |
||||
|
} |
||||
|
|
||||
|
message VolumeIncrementalCopyRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
uint64 since_ns = 2; |
||||
|
} |
||||
|
message VolumeIncrementalCopyResponse { |
||||
|
bytes file_content = 1; |
||||
|
} |
||||
|
|
||||
|
message VolumeMountRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
} |
||||
|
message VolumeMountResponse { |
||||
|
} |
||||
|
|
||||
|
message VolumeUnmountRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
} |
||||
|
message VolumeUnmountResponse { |
||||
|
} |
||||
|
|
||||
|
message VolumeDeleteRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
bool only_empty = 2; |
||||
|
} |
||||
|
message VolumeDeleteResponse { |
||||
|
} |
||||
|
|
||||
|
message VolumeMarkReadonlyRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
bool persist = 2; |
||||
|
} |
||||
|
message VolumeMarkReadonlyResponse { |
||||
|
} |
||||
|
|
||||
|
message VolumeMarkWritableRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
} |
||||
|
message VolumeMarkWritableResponse { |
||||
|
} |
||||
|
|
||||
|
message VolumeConfigureRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
string replication = 2; |
||||
|
} |
||||
|
message VolumeConfigureResponse { |
||||
|
string error = 1; |
||||
|
} |
||||
|
|
||||
|
message VolumeStatusRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
} |
||||
|
message VolumeStatusResponse { |
||||
|
bool is_read_only = 1; |
||||
|
uint64 volume_size = 2; |
||||
|
uint64 file_count = 3; |
||||
|
uint64 file_deleted_count = 4; |
||||
|
} |
||||
|
|
||||
|
message GetStateRequest { |
||||
|
} |
||||
|
message GetStateResponse { |
||||
|
VolumeServerState state = 1; |
||||
|
} |
||||
|
|
||||
|
message SetStateRequest { |
||||
|
// SetState updates *all* volume server flags at once. Retrieve state with GetState(), |
||||
|
// modify individual flags as required, then call this RPC to update. |
||||
|
VolumeServerState state = 1; |
||||
|
} |
||||
|
message SetStateResponse { |
||||
|
VolumeServerState state = 1; |
||||
|
} |
||||
|
|
||||
|
message VolumeCopyRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
string collection = 2; |
||||
|
string replication = 3; |
||||
|
string ttl = 4; |
||||
|
string source_data_node = 5; |
||||
|
string disk_type = 6; |
||||
|
int64 io_byte_per_second = 7; |
||||
|
} |
||||
|
message VolumeCopyResponse { |
||||
|
uint64 last_append_at_ns = 1; |
||||
|
int64 processed_bytes = 2; |
||||
|
} |
||||
|
|
||||
|
message CopyFileRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
string ext = 2; |
||||
|
uint32 compaction_revision = 3; |
||||
|
uint64 stop_offset = 4; |
||||
|
string collection = 5; |
||||
|
bool is_ec_volume = 6; |
||||
|
bool ignore_source_file_not_found = 7; |
||||
|
} |
||||
|
message CopyFileResponse { |
||||
|
bytes file_content = 1; |
||||
|
int64 modified_ts_ns = 2; |
||||
|
} |
||||
|
|
||||
|
message ReceiveFileRequest { |
||||
|
oneof data { |
||||
|
ReceiveFileInfo info = 1; |
||||
|
bytes file_content = 2; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
message ReceiveFileInfo { |
||||
|
uint32 volume_id = 1; |
||||
|
string ext = 2; |
||||
|
string collection = 3; |
||||
|
bool is_ec_volume = 4; |
||||
|
uint32 shard_id = 5; |
||||
|
uint64 file_size = 6; |
||||
|
} |
||||
|
|
||||
|
message ReceiveFileResponse { |
||||
|
uint64 bytes_written = 1; |
||||
|
string error = 2; |
||||
|
} |
||||
|
|
||||
|
message ReadNeedleBlobRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
int64 offset = 3; // actual offset |
||||
|
int32 size = 4; |
||||
|
} |
||||
|
message ReadNeedleBlobResponse { |
||||
|
bytes needle_blob = 1; |
||||
|
} |
||||
|
|
||||
|
message ReadNeedleMetaRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
uint64 needle_id = 2; |
||||
|
int64 offset = 3; // actual offset |
||||
|
int32 size = 4; |
||||
|
} |
||||
|
message ReadNeedleMetaResponse { |
||||
|
uint32 cookie = 1; |
||||
|
uint64 last_modified = 2; |
||||
|
uint32 crc = 3; |
||||
|
string ttl = 4; |
||||
|
uint64 append_at_ns = 5; |
||||
|
} |
||||
|
|
||||
|
message WriteNeedleBlobRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
uint64 needle_id = 2; |
||||
|
int32 size = 3; |
||||
|
bytes needle_blob = 4; |
||||
|
} |
||||
|
message WriteNeedleBlobResponse { |
||||
|
} |
||||
|
|
||||
|
message ReadAllNeedlesRequest { |
||||
|
repeated uint32 volume_ids = 1; |
||||
|
} |
||||
|
message ReadAllNeedlesResponse { |
||||
|
uint32 volume_id = 1; |
||||
|
uint64 needle_id = 2; |
||||
|
uint32 cookie = 3; |
||||
|
bytes needle_blob = 5; |
||||
|
bool needle_blob_compressed = 6; |
||||
|
uint64 last_modified = 7; |
||||
|
uint32 crc = 8; |
||||
|
bytes name = 9; |
||||
|
bytes mime = 10; |
||||
|
} |
||||
|
|
||||
|
message VolumeTailSenderRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
uint64 since_ns = 2; |
||||
|
uint32 idle_timeout_seconds = 3; |
||||
|
} |
||||
|
message VolumeTailSenderResponse { |
||||
|
bytes needle_header = 1; |
||||
|
bytes needle_body = 2; |
||||
|
bool is_last_chunk = 3; |
||||
|
uint32 version = 4; |
||||
|
} |
||||
|
|
||||
|
message VolumeTailReceiverRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
uint64 since_ns = 2; |
||||
|
uint32 idle_timeout_seconds = 3; |
||||
|
string source_volume_server = 4; |
||||
|
} |
||||
|
message VolumeTailReceiverResponse { |
||||
|
} |
||||
|
|
||||
|
message VolumeEcShardsGenerateRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
string collection = 2; |
||||
|
} |
||||
|
message VolumeEcShardsGenerateResponse { |
||||
|
} |
||||
|
|
||||
|
message VolumeEcShardsRebuildRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
string collection = 2; |
||||
|
} |
||||
|
message VolumeEcShardsRebuildResponse { |
||||
|
repeated uint32 rebuilt_shard_ids = 1; |
||||
|
} |
||||
|
|
||||
|
message VolumeEcShardsCopyRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
string collection = 2; |
||||
|
repeated uint32 shard_ids = 3; |
||||
|
bool copy_ecx_file = 4; |
||||
|
string source_data_node = 5; |
||||
|
bool copy_ecj_file = 6; |
||||
|
bool copy_vif_file = 7; |
||||
|
uint32 disk_id = 8; // Target disk ID for storing EC shards |
||||
|
} |
||||
|
message VolumeEcShardsCopyResponse { |
||||
|
} |
||||
|
|
||||
|
message VolumeEcShardsDeleteRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
string collection = 2; |
||||
|
repeated uint32 shard_ids = 3; |
||||
|
} |
||||
|
message VolumeEcShardsDeleteResponse { |
||||
|
} |
||||
|
|
||||
|
message VolumeEcShardsMountRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
string collection = 2; |
||||
|
repeated uint32 shard_ids = 3; |
||||
|
} |
||||
|
message VolumeEcShardsMountResponse { |
||||
|
} |
||||
|
|
||||
|
message VolumeEcShardsUnmountRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
repeated uint32 shard_ids = 3; |
||||
|
} |
||||
|
message VolumeEcShardsUnmountResponse { |
||||
|
} |
||||
|
|
||||
|
message VolumeEcShardReadRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
uint32 shard_id = 2; |
||||
|
int64 offset = 3; |
||||
|
int64 size = 4; |
||||
|
uint64 file_key = 5; |
||||
|
} |
||||
|
message VolumeEcShardReadResponse { |
||||
|
bytes data = 1; |
||||
|
bool is_deleted = 2; |
||||
|
} |
||||
|
|
||||
|
message VolumeEcBlobDeleteRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
string collection = 2; |
||||
|
uint64 file_key = 3; |
||||
|
uint32 version = 4; |
||||
|
} |
||||
|
message VolumeEcBlobDeleteResponse { |
||||
|
} |
||||
|
|
||||
|
message VolumeEcShardsToVolumeRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
string collection = 2; |
||||
|
} |
||||
|
message VolumeEcShardsToVolumeResponse { |
||||
|
} |
||||
|
|
||||
|
message VolumeEcShardsInfoRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
} |
||||
|
message VolumeEcShardsInfoResponse { |
||||
|
repeated EcShardInfo ec_shard_infos = 1; |
||||
|
uint64 volume_size = 2; |
||||
|
uint64 file_count = 3; |
||||
|
uint64 file_deleted_count = 4; |
||||
|
} |
||||
|
|
||||
|
message EcShardInfo { |
||||
|
uint32 shard_id = 1; |
||||
|
int64 size = 2; |
||||
|
string collection = 3; |
||||
|
uint32 volume_id = 4; |
||||
|
} |
||||
|
|
||||
|
message ReadVolumeFileStatusRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
} |
||||
|
message ReadVolumeFileStatusResponse { |
||||
|
uint32 volume_id = 1; |
||||
|
uint64 idx_file_timestamp_seconds = 2; |
||||
|
uint64 idx_file_size = 3; |
||||
|
uint64 dat_file_timestamp_seconds = 4; |
||||
|
uint64 dat_file_size = 5; |
||||
|
uint64 file_count = 6; |
||||
|
uint32 compaction_revision = 7; |
||||
|
string collection = 8; |
||||
|
string disk_type = 9; |
||||
|
VolumeInfo volume_info = 10; |
||||
|
uint32 version = 11; |
||||
|
} |
||||
|
|
||||
|
message DiskStatus { |
||||
|
string dir = 1; |
||||
|
uint64 all = 2; |
||||
|
uint64 used = 3; |
||||
|
uint64 free = 4; |
||||
|
float percent_free = 5; |
||||
|
float percent_used = 6; |
||||
|
string disk_type = 7; |
||||
|
} |
||||
|
|
||||
|
message MemStatus { |
||||
|
int32 goroutines = 1; |
||||
|
uint64 all = 2; |
||||
|
uint64 used = 3; |
||||
|
uint64 free = 4; |
||||
|
uint64 self = 5; |
||||
|
uint64 heap = 6; |
||||
|
uint64 stack = 7; |
||||
|
} |
||||
|
|
||||
|
// tired storage on volume servers |
||||
|
message RemoteFile { |
||||
|
string backend_type = 1; |
||||
|
string backend_id = 2; |
||||
|
string key = 3; |
||||
|
uint64 offset = 4; |
||||
|
uint64 file_size = 5; |
||||
|
uint64 modified_time = 6; |
||||
|
string extension = 7; |
||||
|
} |
||||
|
message VolumeInfo { |
||||
|
repeated RemoteFile files = 1; |
||||
|
uint32 version = 2; |
||||
|
string replication = 3; |
||||
|
uint32 bytes_offset = 4; |
||||
|
int64 dat_file_size = 5; // store the original dat file size |
||||
|
uint64 expire_at_sec = 6; // expiration time of ec volume |
||||
|
bool read_only = 7; |
||||
|
EcShardConfig ec_shard_config = 8; // EC shard configuration (optional, null = use default 10+4) |
||||
|
} |
||||
|
|
||||
|
// EcShardConfig specifies erasure coding shard configuration |
||||
|
message EcShardConfig { |
||||
|
uint32 data_shards = 1; // Number of data shards (e.g., 10) |
||||
|
uint32 parity_shards = 2; // Number of parity shards (e.g., 4) |
||||
|
} |
||||
|
message OldVersionVolumeInfo { |
||||
|
repeated RemoteFile files = 1; |
||||
|
uint32 version = 2; |
||||
|
string replication = 3; |
||||
|
uint32 BytesOffset = 4; |
||||
|
int64 dat_file_size = 5; // store the original dat file size |
||||
|
uint64 DestroyTime = 6; // expiration time of ec volume |
||||
|
bool read_only = 7; |
||||
|
} |
||||
|
|
||||
|
// tiered storage |
||||
|
message VolumeTierMoveDatToRemoteRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
string collection = 2; |
||||
|
string destination_backend_name = 3; |
||||
|
bool keep_local_dat_file = 4; |
||||
|
} |
||||
|
message VolumeTierMoveDatToRemoteResponse { |
||||
|
int64 processed = 1; |
||||
|
float processedPercentage = 2; |
||||
|
} |
||||
|
|
||||
|
message VolumeTierMoveDatFromRemoteRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
string collection = 2; |
||||
|
bool keep_remote_dat_file = 3; |
||||
|
} |
||||
|
message VolumeTierMoveDatFromRemoteResponse { |
||||
|
int64 processed = 1; |
||||
|
float processedPercentage = 2; |
||||
|
} |
||||
|
|
||||
|
message VolumeServerStatusRequest { |
||||
|
|
||||
|
} |
||||
|
message VolumeServerStatusResponse { |
||||
|
repeated DiskStatus disk_statuses = 1; |
||||
|
MemStatus memory_status = 2; |
||||
|
string version = 3; |
||||
|
string data_center = 4; |
||||
|
string rack = 5; |
||||
|
VolumeServerState state = 6; |
||||
|
} |
||||
|
|
||||
|
message VolumeServerLeaveRequest { |
||||
|
} |
||||
|
message VolumeServerLeaveResponse { |
||||
|
} |
||||
|
|
||||
|
// remote storage |
||||
|
message FetchAndWriteNeedleRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
uint64 needle_id = 2; |
||||
|
uint32 cookie = 3; |
||||
|
int64 offset = 4; |
||||
|
int64 size = 5; |
||||
|
message Replica { |
||||
|
string url = 1; |
||||
|
string public_url = 2; |
||||
|
int32 grpc_port = 3; |
||||
|
} |
||||
|
repeated Replica replicas = 6; |
||||
|
string auth = 7; |
||||
|
// remote conf |
||||
|
remote_pb.RemoteConf remote_conf = 15; |
||||
|
remote_pb.RemoteStorageLocation remote_location = 16; |
||||
|
} |
||||
|
message FetchAndWriteNeedleResponse { |
||||
|
string e_tag = 1; |
||||
|
} |
||||
|
|
||||
|
enum VolumeScrubMode { |
||||
|
UNKNOWN = 0; |
||||
|
INDEX = 1; |
||||
|
FULL = 2; |
||||
|
LOCAL = 3; |
||||
|
} |
||||
|
|
||||
|
message ScrubVolumeRequest { |
||||
|
VolumeScrubMode mode = 1; |
||||
|
// optional list of volume IDs to scrub. if empty, all volumes for the server are scrubbed. |
||||
|
repeated uint32 volume_ids = 2; |
||||
|
} |
||||
|
message ScrubVolumeResponse { |
||||
|
uint64 total_volumes = 1; |
||||
|
uint64 total_files = 2; |
||||
|
repeated uint32 broken_volume_ids = 3; |
||||
|
repeated string details = 4; |
||||
|
} |
||||
|
|
||||
|
message ScrubEcVolumeRequest { |
||||
|
VolumeScrubMode mode = 1; |
||||
|
// optional list of volume IDs to scrub. if empty, all EC volumes for the server are scrubbed. |
||||
|
repeated uint32 volume_ids = 2; |
||||
|
} |
||||
|
message ScrubEcVolumeResponse { |
||||
|
uint64 total_volumes = 1; |
||||
|
uint64 total_files = 2; |
||||
|
repeated uint32 broken_volume_ids = 3; |
||||
|
repeated EcShardInfo broken_shard_infos = 4; |
||||
|
repeated string details = 5; |
||||
|
} |
||||
|
|
||||
|
// select on volume servers |
||||
|
message QueryRequest { |
||||
|
repeated string selections = 1; |
||||
|
repeated string from_file_ids = 2; |
||||
|
message Filter { |
||||
|
string field = 1; |
||||
|
string operand = 2; |
||||
|
string value = 3; |
||||
|
} |
||||
|
Filter filter = 3; |
||||
|
|
||||
|
message InputSerialization { |
||||
|
// NONE | GZIP | BZIP2 |
||||
|
string compression_type = 1; |
||||
|
message CSVInput { |
||||
|
string file_header_info = 1; // Valid values: NONE | USE | IGNORE |
||||
|
string record_delimiter = 2; // Default: \n |
||||
|
string field_delimiter = 3; // Default: , |
||||
|
string quote_character = 4; // Default: " |
||||
|
string quote_escape_character = 5; // Default: " |
||||
|
string comments = 6; // Default: # |
||||
|
// If true, records might contain record delimiters within quote characters |
||||
|
bool allow_quoted_record_delimiter = 7; // default False. |
||||
|
} |
||||
|
message JSONInput { |
||||
|
string type = 1; // Valid values: DOCUMENT | LINES |
||||
|
} |
||||
|
message ParquetInput { |
||||
|
} |
||||
|
|
||||
|
CSVInput csv_input = 2; |
||||
|
JSONInput json_input = 3; |
||||
|
ParquetInput parquet_input = 4; |
||||
|
} |
||||
|
InputSerialization input_serialization = 4; |
||||
|
|
||||
|
message OutputSerialization { |
||||
|
message CSVOutput { |
||||
|
string quote_fields = 1; // Valid values: ALWAYS | ASNEEDED |
||||
|
string record_delimiter = 2; // Default: \n |
||||
|
string field_delimiter = 3; // Default: , |
||||
|
string quote_character = 4; // Default: " |
||||
|
string quote_escape_character = 5; // Default: " |
||||
|
} |
||||
|
message JSONOutput { |
||||
|
string record_delimiter = 1; |
||||
|
} |
||||
|
|
||||
|
CSVOutput csv_output = 2; |
||||
|
JSONOutput json_output = 3; |
||||
|
} |
||||
|
|
||||
|
OutputSerialization output_serialization = 5; |
||||
|
} |
||||
|
message QueriedStripe { |
||||
|
bytes records = 1; |
||||
|
} |
||||
|
|
||||
|
message VolumeNeedleStatusRequest { |
||||
|
uint32 volume_id = 1; |
||||
|
uint64 needle_id = 2; |
||||
|
} |
||||
|
message VolumeNeedleStatusResponse { |
||||
|
uint64 needle_id = 1; |
||||
|
uint32 cookie = 2; |
||||
|
uint32 size = 3; |
||||
|
uint64 last_modified = 4; |
||||
|
uint32 crc = 5; |
||||
|
string ttl = 6; |
||||
|
} |
||||
|
|
||||
|
message PingRequest { |
||||
|
string target = 1; // default to ping itself |
||||
|
string target_type = 2; |
||||
|
} |
||||
|
message PingResponse { |
||||
|
int64 start_time_ns = 1; |
||||
|
int64 remote_time_ns = 2; |
||||
|
int64 stop_time_ns = 3; |
||||
|
} |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue