You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							516 lines
						
					
					
						
							12 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							516 lines
						
					
					
						
							12 KiB
						
					
					
				| syntax = "proto3"; | |
|  | |
| package filer_pb; | |
|  | |
| option go_package = "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"; | |
| option java_package = "seaweedfs.client"; | |
| option java_outer_classname = "FilerProto"; | |
|  | |
| ////////////////////////////////////////////////// | |
|  | |
| service SeaweedFiler { | |
|  | |
|     rpc LookupDirectoryEntry (LookupDirectoryEntryRequest) returns (LookupDirectoryEntryResponse) { | |
|     } | |
|  | |
|     rpc ListEntries (ListEntriesRequest) returns (stream ListEntriesResponse) { | |
|     } | |
|  | |
|     rpc CreateEntry (CreateEntryRequest) returns (CreateEntryResponse) { | |
|     } | |
|  | |
|     rpc UpdateEntry (UpdateEntryRequest) returns (UpdateEntryResponse) { | |
|     } | |
|  | |
|     rpc AppendToEntry (AppendToEntryRequest) returns (AppendToEntryResponse) { | |
|     } | |
|  | |
|     rpc DeleteEntry (DeleteEntryRequest) returns (DeleteEntryResponse) { | |
|     } | |
|  | |
|     rpc AtomicRenameEntry (AtomicRenameEntryRequest) returns (AtomicRenameEntryResponse) { | |
|     } | |
|     rpc StreamRenameEntry (StreamRenameEntryRequest) returns (stream StreamRenameEntryResponse) { | |
|     } | |
|  | |
|     rpc AssignVolume (AssignVolumeRequest) returns (AssignVolumeResponse) { | |
|     } | |
|  | |
|     rpc LookupVolume (LookupVolumeRequest) returns (LookupVolumeResponse) { | |
|     } | |
|  | |
|     rpc CollectionList (CollectionListRequest) returns (CollectionListResponse) { | |
|     } | |
|  | |
|     rpc DeleteCollection (DeleteCollectionRequest) returns (DeleteCollectionResponse) { | |
|     } | |
|  | |
|     rpc Statistics (StatisticsRequest) returns (StatisticsResponse) { | |
|     } | |
|  | |
|     rpc Ping (PingRequest) returns (PingResponse) { | |
|     } | |
|  | |
|     rpc GetFilerConfiguration (GetFilerConfigurationRequest) returns (GetFilerConfigurationResponse) { | |
|     } | |
|  | |
|     rpc TraverseBfsMetadata (TraverseBfsMetadataRequest) returns (stream TraverseBfsMetadataResponse) { | |
|     } | |
|  | |
|     rpc SubscribeMetadata (SubscribeMetadataRequest) returns (stream SubscribeMetadataResponse) { | |
|     } | |
|  | |
|     rpc SubscribeLocalMetadata (SubscribeMetadataRequest) returns (stream SubscribeMetadataResponse) { | |
|     } | |
|  | |
|     rpc KvGet (KvGetRequest) returns (KvGetResponse) { | |
|     } | |
|  | |
|     rpc KvPut (KvPutRequest) returns (KvPutResponse) { | |
|     } | |
|  | |
|     rpc CacheRemoteObjectToLocalCluster (CacheRemoteObjectToLocalClusterRequest) returns (CacheRemoteObjectToLocalClusterResponse) { | |
|     } | |
|  | |
|     rpc DistributedLock(LockRequest) returns (LockResponse) { | |
|     } | |
|     rpc DistributedUnlock(UnlockRequest) returns (UnlockResponse) { | |
|     } | |
|     rpc FindLockOwner(FindLockOwnerRequest) returns (FindLockOwnerResponse) { | |
|     } | |
|     // distributed lock management internal use only | |
|     rpc TransferLocks(TransferLocksRequest) returns (TransferLocksResponse) { | |
|     } | |
| } | |
|  | |
| ////////////////////////////////////////////////// | |
|  | |
| message LookupDirectoryEntryRequest { | |
|     string directory = 1; | |
|     string name = 2; | |
| } | |
|  | |
| message LookupDirectoryEntryResponse { | |
|     Entry entry = 1; | |
| } | |
|  | |
| message ListEntriesRequest { | |
|     string directory = 1; | |
|     string prefix = 2; | |
|     string startFromFileName = 3; | |
|     bool inclusiveStartFrom = 4; | |
|     uint32 limit = 5; | |
| } | |
|  | |
| message ListEntriesResponse { | |
|     Entry entry = 1; | |
| } | |
|  | |
| message RemoteEntry { | |
|     string storage_name = 1; | |
|     int64 last_local_sync_ts_ns = 2; | |
|     string remote_e_tag = 3; | |
|     int64 remote_mtime = 4; | |
|     int64 remote_size = 5; | |
| } | |
| message Entry { | |
|     string name = 1; | |
|     bool is_directory = 2; | |
|     repeated FileChunk chunks = 3; | |
|     FuseAttributes attributes = 4; | |
|     map<string, bytes> extended = 5; | |
|     bytes hard_link_id = 7; | |
|     int32 hard_link_counter = 8; // only exists in hard link meta data | |
|     bytes content = 9; // if not empty, the file content | |
|  | |
|     RemoteEntry remote_entry = 10; | |
|     int64 quota = 11; // for bucket only. Positive/Negative means enabled/disabled. | |
|     int64 worm_enforced_at_ts_ns = 12; | |
| } | |
|  | |
| message FullEntry { | |
|     string dir = 1; | |
|     Entry entry = 2; | |
| } | |
|  | |
| message EventNotification { | |
|     Entry old_entry = 1; | |
|     Entry new_entry = 2; | |
|     bool delete_chunks = 3; | |
|     string new_parent_path = 4; | |
|     bool is_from_other_cluster = 5; | |
|     repeated int32 signatures = 6; | |
| } | |
|  | |
| enum SSEType { | |
|     NONE = 0;    // No server-side encryption | |
|     SSE_C = 1;   // Server-Side Encryption with Customer-Provided Keys   | |
|     SSE_KMS = 2; // Server-Side Encryption with KMS-Managed Keys | |
|     SSE_S3 = 3;  // Server-Side Encryption with S3-Managed Keys | |
| } | |
|  | |
| message FileChunk { | |
|     string file_id = 1; // to be deprecated | |
|     int64 offset = 2; | |
|     uint64 size = 3; | |
|     int64 modified_ts_ns = 4; | |
|     string e_tag = 5; | |
|     string source_file_id = 6; // to be deprecated | |
|     FileId fid = 7; | |
|     FileId source_fid = 8; | |
|     bytes cipher_key = 9; | |
|     bool is_compressed = 10; | |
|     bool is_chunk_manifest = 11; // content is a list of FileChunks | |
|     SSEType sse_type = 12;           // Server-side encryption type | |
|     bytes sse_metadata = 13;         // Serialized SSE metadata for this chunk (SSE-C, SSE-KMS, or SSE-S3) | |
| } | |
|  | |
| message FileChunkManifest { | |
|     repeated FileChunk chunks = 1; | |
| } | |
|  | |
| message FileId { | |
|     uint32 volume_id = 1; | |
|     uint64 file_key = 2; | |
|     fixed32 cookie = 3; | |
| } | |
|  | |
| message FuseAttributes { | |
|     uint64 file_size = 1; | |
|     int64 mtime = 2; // unix time in seconds | |
|     uint32 file_mode = 3; | |
|     uint32 uid = 4; | |
|     uint32 gid = 5; | |
|     int64 crtime = 6; // unix time in seconds | |
|     string mime = 7; | |
|     int32 ttl_sec = 10; | |
|     string user_name = 11; // for hdfs | |
|     repeated string group_name = 12; // for hdfs | |
|     string symlink_target = 13; | |
|     bytes md5 = 14; | |
|     uint32 rdev = 16; | |
|     uint64 inode = 17; | |
| } | |
|  | |
| message CreateEntryRequest { | |
|     string directory = 1; | |
|     Entry entry = 2; | |
|     bool o_excl = 3; | |
|     bool is_from_other_cluster = 4; | |
|     repeated int32 signatures = 5; | |
|     bool skip_check_parent_directory = 6; | |
| } | |
|  | |
| message CreateEntryResponse { | |
|     string error = 1; | |
| } | |
|  | |
| message UpdateEntryRequest { | |
|     string directory = 1; | |
|     Entry entry = 2; | |
|     bool is_from_other_cluster = 3; | |
|     repeated int32 signatures = 4; | |
| } | |
| message UpdateEntryResponse { | |
| } | |
|  | |
| message AppendToEntryRequest { | |
|     string directory = 1; | |
|     string entry_name = 2; | |
|     repeated FileChunk chunks = 3; | |
| } | |
| message AppendToEntryResponse { | |
| } | |
|  | |
| message DeleteEntryRequest { | |
|     string directory = 1; | |
|     string name = 2; | |
|     // bool is_directory = 3; | |
|     bool is_delete_data = 4; | |
|     bool is_recursive = 5; | |
|     bool ignore_recursive_error = 6; | |
|     bool is_from_other_cluster = 7; | |
|     repeated int32 signatures = 8; | |
|     int64 if_not_modified_after = 9; | |
| } | |
|  | |
| message DeleteEntryResponse { | |
|     string error = 1; | |
| } | |
|  | |
| message AtomicRenameEntryRequest { | |
|     string old_directory = 1; | |
|     string old_name = 2; | |
|     string new_directory = 3; | |
|     string new_name = 4; | |
|     repeated int32 signatures = 5; | |
| } | |
|  | |
| message AtomicRenameEntryResponse { | |
| } | |
|  | |
| message StreamRenameEntryRequest { | |
|     string old_directory = 1; | |
|     string old_name = 2; | |
|     string new_directory = 3; | |
|     string new_name = 4; | |
|     repeated int32 signatures = 5; | |
| } | |
| message StreamRenameEntryResponse { | |
|     string directory = 1; | |
|     EventNotification event_notification = 2; | |
|     int64 ts_ns = 3; | |
| } | |
| message AssignVolumeRequest { | |
|     int32 count = 1; | |
|     string collection = 2; | |
|     string replication = 3; | |
|     int32 ttl_sec = 4; | |
|     string data_center = 5; | |
|     string path = 6; | |
|     string rack = 7; | |
|     string data_node = 9; | |
|     string disk_type = 8; | |
| } | |
|  | |
| message AssignVolumeResponse { | |
|     string file_id = 1; | |
|     int32 count = 4; | |
|     string auth = 5; | |
|     string collection = 6; | |
|     string replication = 7; | |
|     string error = 8; | |
|     Location location = 9; | |
| } | |
|  | |
| message LookupVolumeRequest { | |
|     repeated string volume_ids = 1; | |
| } | |
|  | |
| message Locations { | |
|     repeated Location locations = 1; | |
| } | |
|  | |
| message Location { | |
|     string url = 1; | |
|     string public_url = 2; | |
|     uint32 grpc_port = 3; | |
|     string data_center = 4; | |
| } | |
| message LookupVolumeResponse { | |
|     map<string, Locations> locations_map = 1; | |
| } | |
|  | |
| message Collection { | |
|     string name = 1; | |
| } | |
| message CollectionListRequest { | |
|     bool include_normal_volumes = 1; | |
|     bool include_ec_volumes = 2; | |
| } | |
| message CollectionListResponse { | |
|     repeated Collection collections = 1; | |
| } | |
| message DeleteCollectionRequest { | |
|     string collection = 1; | |
| } | |
|  | |
| message DeleteCollectionResponse { | |
| } | |
|  | |
| 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; | |
| } | |
|  | |
| 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 GetFilerConfigurationRequest { | |
| } | |
| message GetFilerConfigurationResponse { | |
|     repeated string masters = 1; | |
|     string replication = 2; | |
|     string collection = 3; | |
|     uint32 max_mb = 4; | |
|     string dir_buckets = 5; | |
|     bool cipher = 7; | |
|     int32 signature = 8; | |
|     string metrics_address = 9; | |
|     int32 metrics_interval_sec = 10; | |
|     string version = 11; | |
|     string cluster_id = 12; | |
|     string filer_group = 13; | |
|     int32 major_version = 14; | |
|     int32 minor_version = 15; | |
| } | |
|  | |
| message SubscribeMetadataRequest { | |
|     string client_name = 1; | |
|     string path_prefix = 2; | |
|     int64 since_ns = 3; | |
|     int32 signature = 4; | |
|     repeated string path_prefixes = 6; | |
|     int32 client_id = 7; | |
|     int64 until_ns = 8; | |
|     int32 client_epoch = 9; | |
|     repeated string directories = 10;  // exact directory to watch | |
| } | |
| message SubscribeMetadataResponse { | |
|     string directory = 1; | |
|     EventNotification event_notification = 2; | |
|     int64 ts_ns = 3; | |
| } | |
|  | |
| message TraverseBfsMetadataRequest { | |
|     string directory = 1; | |
|     repeated string excluded_prefixes = 2; | |
| } | |
| message TraverseBfsMetadataResponse { | |
|     string directory = 1; | |
|     Entry entry = 2; | |
| } | |
|  | |
| message LogEntry { | |
|     int64 ts_ns = 1; | |
|     int32 partition_key_hash = 2; | |
|     bytes data = 3; | |
|     bytes key = 4; | |
|     int64 offset = 5;  // Sequential offset within partition | |
| } | |
|  | |
| message KeepConnectedRequest { | |
|     string name = 1; | |
|     uint32 grpc_port = 2; | |
|     repeated string resources = 3; | |
| } | |
| message KeepConnectedResponse { | |
| } | |
|  | |
| message LocateBrokerRequest { | |
|     string resource = 1; | |
| } | |
|  | |
| message LocateBrokerResponse { | |
|     bool found = 1; | |
|     // if found, send the exact address | |
|     // if not found, send the full list of existing brokers | |
|     message Resource { | |
|         string grpc_addresses = 1; | |
|         int32 resource_count = 2; | |
|     } | |
|     repeated Resource resources = 2; | |
| } | |
|  | |
| ///////////////////////// | |
| // Key-Value operations | |
| ///////////////////////// | |
| message KvGetRequest { | |
|     bytes key = 1; | |
| } | |
| message KvGetResponse { | |
|     bytes value = 1; | |
|     string error = 2; | |
| } | |
| message KvPutRequest { | |
|     bytes key = 1; | |
|     bytes value = 2; | |
| } | |
| message KvPutResponse { | |
|     string error = 1; | |
| } | |
|  | |
| ///////////////////////// | |
| // path-based configurations | |
| ///////////////////////// | |
| message FilerConf { | |
|     int32 version = 1; | |
|     message PathConf { | |
|         string location_prefix = 1; | |
|         string collection = 2; | |
|         string replication = 3; | |
|         string ttl = 4; | |
|         string disk_type = 5; | |
|         bool fsync = 6; | |
|         uint32 volume_growth_count = 7; | |
|         bool read_only = 8; | |
|         string data_center = 9; | |
|         string rack = 10; | |
|         string data_node = 11; | |
|         uint32 max_file_name_length = 12; | |
|         bool disable_chunk_deletion = 13; | |
|         bool worm = 14; | |
|         uint64 worm_grace_period_seconds = 15; | |
|         uint64 worm_retention_time_seconds = 16; | |
|     } | |
|     repeated PathConf locations = 2; | |
| } | |
|  | |
| ///////////////////////// | |
| // Remote Storage related | |
| ///////////////////////// | |
| message CacheRemoteObjectToLocalClusterRequest { | |
|     string directory = 1; | |
|     string name = 2; | |
| } | |
| message CacheRemoteObjectToLocalClusterResponse { | |
|     Entry entry = 1; | |
| } | |
|  | |
| ///////////////////////// | |
| // distributed lock management | |
| ///////////////////////// | |
| message LockRequest { | |
|     string name = 1; | |
|     int64 seconds_to_lock = 2; | |
|     string renew_token = 3; | |
|     bool is_moved = 4; | |
|     string owner = 5; | |
| } | |
| message LockResponse { | |
|     string renew_token = 1; | |
|     string lock_owner = 2; | |
|     string lock_host_moved_to = 3; | |
|     string error = 4; | |
| } | |
| message UnlockRequest { | |
|     string name = 1; | |
|     string renew_token = 2; | |
|     bool is_moved = 3; | |
| } | |
| message UnlockResponse { | |
|     string error = 1; | |
|     string moved_to = 2; | |
| } | |
| message FindLockOwnerRequest { | |
|     string name = 1; | |
|     bool is_moved = 2; | |
| } | |
| message FindLockOwnerResponse { | |
|     string owner = 1; | |
| } | |
| message Lock { | |
|     string name = 1; | |
|     string renew_token = 2; | |
|     int64 expired_at_ns = 3; | |
|     string owner = 4; | |
| } | |
| message TransferLocksRequest { | |
|     repeated Lock locks = 1; | |
| } | |
| message TransferLocksResponse { | |
| }
 |