mirror of https://github.com/dragonflyoss/api.git
325 lines
12 KiB
Protocol Buffer
325 lines
12 KiB
Protocol Buffer
/*
|
|
* Copyright 2022 The Dragonfly Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
syntax = "proto3";
|
|
|
|
package dfdaemon.v2;
|
|
|
|
import "pkg/apis/common/v2/common.proto";
|
|
import "google/protobuf/duration.proto";
|
|
import "google/protobuf/empty.proto";
|
|
import "validate/validate.proto";
|
|
|
|
option go_package = "d7y.io/api/v2/pkg/apis/dfdaemon/v2;dfdaemon";
|
|
|
|
// DownloadTaskRequest represents request of DownloadTask.
|
|
message DownloadTaskRequest {
|
|
// Download information.
|
|
common.v2.Download download = 1 [(validate.rules).message.required = true];
|
|
}
|
|
|
|
// DownloadTaskStartedResponse represents task download started response of DownloadTaskResponse.
|
|
message DownloadTaskStartedResponse {
|
|
// Task content length.
|
|
uint64 content_length = 1;
|
|
|
|
// Range is url range of request. If protocol is http, range
|
|
// is parsed from http header. If other protocol, range comes
|
|
// from download range field.
|
|
optional common.v2.Range range = 2;
|
|
|
|
// Task response headers.
|
|
map<string, string> response_header = 3;
|
|
|
|
// Need to download pieces.
|
|
repeated common.v2.Piece pieces = 4;
|
|
}
|
|
|
|
// DownloadPieceFinishedResponse represents piece download finished response of DownloadTaskResponse.
|
|
message DownloadPieceFinishedResponse {
|
|
// Finished piece of task.
|
|
common.v2.Piece piece = 1 [(validate.rules).message.required = true];
|
|
}
|
|
|
|
// DownloadTaskResponse represents response of DownloadTask.
|
|
message DownloadTaskResponse {
|
|
// Host id.
|
|
string host_id = 1 [(validate.rules).string.min_len = 1];
|
|
// Task id.
|
|
string task_id = 2 [(validate.rules).string.min_len = 1];
|
|
// Peer id.
|
|
string peer_id = 3 [(validate.rules).string.min_len = 1];
|
|
|
|
oneof response {
|
|
option (validate.required) = true;
|
|
|
|
DownloadTaskStartedResponse download_task_started_response = 4;
|
|
DownloadPieceFinishedResponse download_piece_finished_response = 5;
|
|
}
|
|
}
|
|
|
|
// SyncPiecesRequest represents request of SyncPieces.
|
|
message SyncPiecesRequest {
|
|
// Host id.
|
|
string host_id = 1 [(validate.rules).string.min_len = 1];
|
|
// Task id.
|
|
string task_id = 2 [(validate.rules).string.min_len = 1];
|
|
// Interested piece numbers.
|
|
repeated uint32 interested_piece_numbers = 3 [(validate.rules).repeated = {min_items: 1}];
|
|
}
|
|
|
|
// SyncPiecesResponse represents response of SyncPieces.
|
|
message SyncPiecesResponse {
|
|
// Exist piece number.
|
|
uint32 number = 1;
|
|
// Piece offset.
|
|
uint64 offset = 2;
|
|
// Piece length.
|
|
uint64 length = 3;
|
|
}
|
|
|
|
// DownloadPieceRequest represents request of DownloadPiece.
|
|
message DownloadPieceRequest{
|
|
// Host id.
|
|
string host_id = 1 [(validate.rules).string.min_len = 1];
|
|
// Task id.
|
|
string task_id = 2 [(validate.rules).string.min_len = 1];
|
|
// Piece number.
|
|
uint32 piece_number = 3;
|
|
}
|
|
|
|
// DownloadPieceResponse represents response of DownloadPieces.
|
|
message DownloadPieceResponse {
|
|
// Piece information.
|
|
common.v2.Piece piece = 1 [(validate.rules).message.required = true];
|
|
// Piece digest.
|
|
optional string digest = 2 [(validate.rules).string = {pattern: "^(md5:[a-fA-F0-9]{32}|sha1:[a-fA-F0-9]{40}|sha256:[a-fA-F0-9]{64}|sha512:[a-fA-F0-9]{128}|blake3:[a-fA-F0-9]{64}|crc32:[a-fA-F0-9]+)$", ignore_empty: true}];
|
|
}
|
|
|
|
// UploadTaskRequest represents request of UploadTask.
|
|
message UploadTaskRequest {
|
|
// Task metadata.
|
|
common.v2.Task task = 1 [(validate.rules).message.required = true];
|
|
}
|
|
|
|
// StatTaskRequest represents request of StatTask.
|
|
message StatTaskRequest {
|
|
// Task id.
|
|
string task_id = 1 [(validate.rules).string.min_len = 1];
|
|
}
|
|
|
|
// DeleteTaskRequest represents request of DeleteTask.
|
|
message DeleteTaskRequest {
|
|
// Task id.
|
|
string task_id = 1 [(validate.rules).string.min_len = 1];
|
|
}
|
|
|
|
// DownloadPersistentCacheTaskRequest represents request of DownloadPersistentCacheTask.
|
|
message DownloadPersistentCacheTaskRequest {
|
|
// Task id.
|
|
string task_id = 1 [(validate.rules).string.min_len = 1];
|
|
// Persistent represents whether the persistent cache task is persistent.
|
|
// If the persistent cache task is persistent, the persistent cache peer will
|
|
// not be deleted when dfdaemon runs garbage collection.
|
|
bool persistent = 2;
|
|
// Tag is used to distinguish different persistent cache tasks.
|
|
optional string tag = 3;
|
|
// Application of task.
|
|
optional string application = 4;
|
|
// File path to be exported.
|
|
optional string output_path = 5 [(validate.rules).string = {min_len: 1, ignore_empty: true}];
|
|
// Download timeout.
|
|
optional google.protobuf.Duration timeout = 6;
|
|
// need_piece_content is the flag to indicate whether the response needs to return piece content.
|
|
bool need_piece_content = 7;
|
|
}
|
|
|
|
// DownloadPersistentCacheTaskStartedResponse represents task download started response of DownloadPersistentCacheTaskResponse.
|
|
message DownloadPersistentCacheTaskStartedResponse {
|
|
// Task content length.
|
|
uint64 content_length = 1;
|
|
}
|
|
|
|
// DownloadPersistentCacheTaskResponse represents response of DownloadPersistentCacheTask.
|
|
message DownloadPersistentCacheTaskResponse {
|
|
// Host id.
|
|
string host_id = 1 [(validate.rules).string.min_len = 1];
|
|
// Task id.
|
|
string task_id = 2 [(validate.rules).string.min_len = 1];
|
|
// Peer id.
|
|
string peer_id = 3 [(validate.rules).string.min_len = 1];
|
|
|
|
oneof response {
|
|
option (validate.required) = true;
|
|
|
|
DownloadPersistentCacheTaskStartedResponse download_persistent_cache_task_started_response = 4;
|
|
DownloadPieceFinishedResponse download_piece_finished_response = 5;
|
|
}
|
|
}
|
|
|
|
// UploadPersistentCacheTaskRequest represents request of UploadPersistentCacheTask.
|
|
message UploadPersistentCacheTaskRequest {
|
|
// Task id can specify the task id of the persistent cache task, its length must be 64 bytes.
|
|
// If task_id is none, dfdaemon will generate the new task id based on the file content, tag
|
|
// and application by wyhash algorithm.
|
|
optional string task_id = 1 [(validate.rules).string = {len: 64, ignore_empty: true}];
|
|
// Upload file path of persistent cache task.
|
|
string path = 2 [(validate.rules).string = {min_len: 1}];
|
|
// Replica count of the persistent persistent cache task.
|
|
uint64 persistent_replica_count = 3 [(validate.rules).uint64 = {gte: 1, lte: 5}];
|
|
// Tag is used to distinguish different persistent cache tasks.
|
|
optional string tag = 4;
|
|
// Application of task.
|
|
optional string application = 5;
|
|
// TTL of the persistent cache task.
|
|
google.protobuf.Duration ttl = 6 [(validate.rules).duration = {gte:{seconds: 60}, lte:{seconds: 604800}}];
|
|
// Download timeout.
|
|
optional google.protobuf.Duration timeout = 7;
|
|
}
|
|
|
|
// UpdatePersistentCacheTaskRequest represents request of UpdatePersistentCacheTask.
|
|
message UpdatePersistentCacheTaskRequest {
|
|
// Task id.
|
|
string task_id = 1 [(validate.rules).string.min_len = 1];
|
|
// Persistent represents whether the persistent cache peer is persistent.
|
|
// If the persistent cache peer is persistent, the persistent cache peer will
|
|
// not be deleted when dfdaemon runs garbage collection. It only be deleted
|
|
// when the task is deleted by the user.
|
|
bool persistent = 2;
|
|
}
|
|
|
|
// StatPersistentCacheTaskRequest represents request of StatPersistentCacheTask.
|
|
message StatPersistentCacheTaskRequest {
|
|
// Task id.
|
|
string task_id = 1 [(validate.rules).string.min_len = 1];
|
|
}
|
|
|
|
// DeletePersistentCacheTaskRequest represents request of DeletePersistentCacheTask.
|
|
message DeletePersistentCacheTaskRequest {
|
|
// Task id.
|
|
string task_id = 1 [(validate.rules).string.min_len = 1];
|
|
}
|
|
|
|
// SyncPersistentCachePiecesRequest represents request of SyncPersistentCachePieces.
|
|
message SyncPersistentCachePiecesRequest {
|
|
// Host id.
|
|
string host_id = 1 [(validate.rules).string.min_len = 1];
|
|
// Task id.
|
|
string task_id = 2 [(validate.rules).string.min_len = 1];
|
|
// Interested piece numbers.
|
|
repeated uint32 interested_piece_numbers = 3 [(validate.rules).repeated = {min_items: 1}];
|
|
}
|
|
|
|
// SyncPersistentCachePiecesResponse represents response of SyncPersistentCachePieces.
|
|
message SyncPersistentCachePiecesResponse {
|
|
// Exist piece number.
|
|
uint32 number = 1;
|
|
// Piece offset.
|
|
uint64 offset = 2;
|
|
// Piece length.
|
|
uint64 length = 3;
|
|
}
|
|
|
|
// DownloadPersistentCachePieceRequest represents request of DownloadPersistentCachePiece.
|
|
message DownloadPersistentCachePieceRequest{
|
|
// Host id.
|
|
string host_id = 1 [(validate.rules).string.min_len = 1];
|
|
// Task id.
|
|
string task_id = 2 [(validate.rules).string.min_len = 1];
|
|
// Piece number.
|
|
uint32 piece_number = 3;
|
|
}
|
|
|
|
// DownloadPersistentCachePieceResponse represents response of DownloadPersistentCachePieces.
|
|
message DownloadPersistentCachePieceResponse {
|
|
// Piece information.
|
|
common.v2.Piece piece = 1 [(validate.rules).message.required = true];
|
|
}
|
|
|
|
// SyncHostRequest represents request of SyncHost.
|
|
message SyncHostRequest {
|
|
// Host id.
|
|
string host_id = 1 [(validate.rules).string.min_len = 1];
|
|
// Peer id.
|
|
string peer_id = 2 [(validate.rules).string.min_len = 1];
|
|
}
|
|
|
|
// DfdaemonUpload represents dfdaemon upload service.
|
|
service DfdaemonUpload {
|
|
// DownloadTask downloads task from p2p network.
|
|
rpc DownloadTask(DownloadTaskRequest) returns(stream DownloadTaskResponse);
|
|
|
|
// StatTask stats task information.
|
|
rpc StatTask(StatTaskRequest) returns(common.v2.Task);
|
|
|
|
// DeleteTask deletes task from p2p network.
|
|
rpc DeleteTask(DeleteTaskRequest) returns(google.protobuf.Empty);
|
|
|
|
// SyncPieces syncs piece metadatas from remote peer.
|
|
rpc SyncPieces(SyncPiecesRequest) returns(stream SyncPiecesResponse);
|
|
|
|
// DownloadPiece downloads piece from the remote peer.
|
|
rpc DownloadPiece(DownloadPieceRequest)returns(DownloadPieceResponse);
|
|
|
|
// DownloadPersistentCacheTask downloads persistent cache task from p2p network.
|
|
rpc DownloadPersistentCacheTask(DownloadPersistentCacheTaskRequest) returns(stream DownloadPersistentCacheTaskResponse);
|
|
|
|
// UpdatePersistentCacheTask updates metadate of thr persistent cache task in p2p network.
|
|
rpc UpdatePersistentCacheTask(UpdatePersistentCacheTaskRequest) returns(google.protobuf.Empty);
|
|
|
|
// StatPersistentCacheTask stats persistent cache task information.
|
|
rpc StatPersistentCacheTask(StatPersistentCacheTaskRequest) returns(common.v2.PersistentCacheTask);
|
|
|
|
// DeletePersistentCacheTask deletes persistent cache task from p2p network.
|
|
rpc DeletePersistentCacheTask(DeletePersistentCacheTaskRequest) returns(google.protobuf.Empty);
|
|
|
|
// SyncPersistentCachePieces syncs persistent cache pieces from remote peer.
|
|
rpc SyncPersistentCachePieces(SyncPersistentCachePiecesRequest) returns(stream SyncPersistentCachePiecesResponse);
|
|
|
|
// DownloadPersistentCachePiece downloads persistent cache piece from the remote peer.
|
|
rpc DownloadPersistentCachePiece(DownloadPersistentCachePieceRequest)returns(DownloadPersistentCachePieceResponse);
|
|
|
|
// SyncHost sync host info from parents.
|
|
rpc SyncHost(SyncHostRequest) returns (stream common.v2.Host);
|
|
}
|
|
|
|
// DfdaemonDownload represents dfdaemon download service.
|
|
service DfdaemonDownload {
|
|
// DownloadTask downloads task from p2p network.
|
|
rpc DownloadTask(DownloadTaskRequest) returns(stream DownloadTaskResponse);
|
|
|
|
// UploadTask uploads task to p2p network.
|
|
rpc UploadTask(UploadTaskRequest) returns(google.protobuf.Empty);
|
|
|
|
// StatTask stats task information.
|
|
rpc StatTask(StatTaskRequest) returns(common.v2.Task);
|
|
|
|
// DeleteTask deletes task from p2p network.
|
|
rpc DeleteTask(DeleteTaskRequest) returns(google.protobuf.Empty);
|
|
|
|
// DeleteHost releases host in scheduler.
|
|
rpc DeleteHost(google.protobuf.Empty)returns(google.protobuf.Empty);
|
|
|
|
// DownloadPersistentCacheTask downloads persistent cache task from p2p network.
|
|
rpc DownloadPersistentCacheTask(DownloadPersistentCacheTaskRequest) returns(stream DownloadPersistentCacheTaskResponse);
|
|
|
|
// UploadPersistentCacheTask uploads persistent cache task to p2p network.
|
|
rpc UploadPersistentCacheTask(UploadPersistentCacheTaskRequest) returns(common.v2.PersistentCacheTask);
|
|
|
|
// StatPersistentCacheTask stats persistent cache task information.
|
|
rpc StatPersistentCacheTask(StatPersistentCacheTaskRequest) returns(common.v2.PersistentCacheTask);
|
|
}
|