/* * 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 scheduler.v2; import "common.proto"; import "google/protobuf/empty.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; // RegisterPeerRequest represents peer registered request of AnnouncePeerRequest. message RegisterPeerRequest { // Download information. common.v2.Download download = 1; } // RegisterSeedPeerRequest represents seed peer registered request of AnnouncePeerRequest. message RegisterSeedPeerRequest { // Download information. common.v2.Download download = 1; } // DownloadPeerStartedRequest represents peer download started request of AnnouncePeerRequest. message DownloadPeerStartedRequest { } // DownloadPeerBackToSourceStartedRequest represents peer download back-to-source started request of AnnouncePeerRequest. message DownloadPeerBackToSourceStartedRequest { // The description of the back-to-source reason. string description = 1; } // DownloadPeerFinishedRequest represents peer download finished request of AnnouncePeerRequest. message DownloadPeerFinishedRequest { // Total content length. int64 content_length = 1; // Total piece count. int32 piece_count = 2; } // DownloadPeerBackToSourceFinishedRequest represents peer download back-to-source finished request of AnnouncePeerRequest. message DownloadPeerBackToSourceFinishedRequest { // Total content length. int64 content_length = 1; // Total piece count. int32 piece_count = 2; } // DownloadPeerFailedRequest represents peer download failed request of AnnouncePeerRequest. message DownloadPeerFailedRequest { // The description of the download failed. string description = 1; } // DownloadPeerBackToSourceFailedRequest represents peer download back-to-source failed request of AnnouncePeerRequest. message DownloadPeerBackToSourceFailedRequest { // The description of the download back-to-source failed. string description = 1; } // DownloadPieceFinishedRequest represents piece download finished request of AnnouncePeerRequest. message DownloadPieceFinishedRequest { // Piece info. common.v2.Piece piece = 1; } // DownloadPieceBackToSourceFinishedRequest represents piece download back-to-source finished request of AnnouncePeerRequest. message DownloadPieceBackToSourceFinishedRequest { // Piece info. common.v2.Piece piece = 1; } // DownloadPieceFailedRequest downloads piece failed request of AnnouncePeerRequest. message DownloadPieceFailedRequest { // Piece info. common.v2.Piece piece = 1; // Temporary indicates whether the error is temporary. bool temporary = 2; } // HTTPResponse represents http protocol response of DownloadPieceBackToSourceFailedRequest. message HTTPResponse { // HTTP Response Header. map header = 1; // HTTP Status Code. int32 status_code = 2; // HTTP Status. string status = 3; } // HDFSResponse represents hdfs protocol response of DownloadPieceBackToSourceFailedRequest. message HDFSResponse { } // S3Response represents s3 protocol response of DownloadPieceBackToSourceFailedRequest. message S3Response { } // OSSResponse represents oss protocol response of DownloadPieceBackToSourceFailedRequest. message OSSResponse { } // DownloadPieceBackToSourceFailedRequest downloads piece back-to-source failed request of AnnouncePeerRequest. message DownloadPieceBackToSourceFailedRequest { // Piece info. common.v2.Piece piece = 1; oneof response { HTTPResponse http_response = 2; HDFSResponse hdfs_response = 3; S3Response s3_response = 4; OSSResponse oss_response = 5; } } // SyncPiecesFailedRequest syncs pieces failed request of AnnouncePeerRequest. message SyncPiecesFailedRequest { // Parent peer id. string parent_id = 1; // The description of the error. string description = 2; } // AnnouncePeerRequest represents request of AnnouncePeer. message AnnouncePeerRequest { // Host id. string host_id = 1; // Task id. string task_id = 2; // Peer id. string peer_id = 3; oneof request { RegisterPeerRequest register_peer_request = 4; RegisterSeedPeerRequest register_seed_peer_request = 5; DownloadPeerStartedRequest download_peer_started_request = 6; DownloadPeerBackToSourceStartedRequest download_peer_back_to_source_started_request = 7; DownloadPeerFinishedRequest download_peer_finished_request = 8; DownloadPeerBackToSourceFinishedRequest download_peer_back_to_source_finished_request = 9; DownloadPeerFailedRequest download_peer_failed_request = 10; DownloadPeerBackToSourceFailedRequest download_peer_back_to_source_failed_request = 11; DownloadPieceFinishedRequest download_piece_finished_request = 12; DownloadPieceBackToSourceFinishedRequest download_piece_back_to_source_finished_request = 13; DownloadPieceFailedRequest download_piece_failed_request = 14; DownloadPieceBackToSourceFailedRequest download_piece_back_to_source_failed_request = 15; SyncPiecesFailedRequest sync_pieces_failed_request = 16; } } // EmptyTaskResponse represents empty task response of AnnouncePeerResponse. message EmptyTaskResponse { } // TinyTaskResponse represents tiny task response of AnnouncePeerResponse. message TinyTaskResponse { // Tiny task content. bytes content = 1; } // SmallTaskResponse represents small task response of AnnouncePeerResponse. message SmallTaskResponse { // TODO Fix clippy lint PR into new version. // The version of tonic needs to be upgraded, // refer to https://github.com/hyperium/tonic/pull/1181. // // Candidate parent. // common.Peer candidate_parent = 1; } // NormalTaskResponse represents normal task response of AnnouncePeerResponse. message NormalTaskResponse { // Candidate parents. repeated common.v2.Peer candidate_parents = 1; // Concurrent downloading piece count from the peers. int32 concurrent_piece_count = 2; } // NeedBackToSourceResponse represents need back-to-source response of AnnouncePeerResponse. message NeedBackToSourceResponse { // The description of the back-to-source reason. string description = 1; } // AnnouncePeerResponse represents response of AnnouncePeer. message AnnouncePeerResponse { oneof response { EmptyTaskResponse empty_task_response = 1; TinyTaskResponse tiny_task_response = 2; SmallTaskResponse small_task_response = 3; NormalTaskResponse normal_task_response = 4; NeedBackToSourceResponse need_back_to_source_response = 5; } } // StatPeerRequest represents request of StatPeer. message StatPeerRequest { // Host id. string host_id = 1; // Task id. string task_id = 2; // Peer id. string peer_id = 3; } // TODO exchange peer request definition. // ExchangePeerRequest represents request of ExchangePeer. message ExchangePeerRequest { // Host id. string host_id = 1; // Task id. string task_id = 2; // Peer id. string peer_id = 3; } // TODO exchange peer response definition. // ExchangePeerResponse represents response of ExchangePeer. message ExchangePeerResponse { } // LeavePeerRequest represents request of LeavePeer. message LeavePeerRequest { // Host id. string host_id = 1; // Task id. string task_id = 2; // Peer id. string peer_id = 3; } // StatTaskRequest represents request of StatTask. message StatTaskRequest { // Task id. string id = 1; } // AnnounceHostRequest represents request of AnnounceHost. message AnnounceHostRequest { common.v2.Host host = 1; } // LeaveHostRequest represents request of LeaveHost. message LeaveHostRequest{ // Host id. string id = 1; } // ProbeStartedRequest represents started request of SyncProbesRequest. message ProbeStartedRequest { } // Probe information. message Probe { // Destination host metadata. common.v2.Host host = 1; // RTT is the round-trip time sent via this pinger. google.protobuf.Duration rtt = 2; // Probe create time. google.protobuf.Timestamp created_at = 3; } // ProbeFinishedRequest represents finished request of SyncProbesRequest. message ProbeFinishedRequest { // Probes information. repeated Probe probes = 1; } // FailedProbe information. message FailedProbe { // Destination host metadata. common.v2.Host host = 1; // The description of probing failed. string description = 2; } // ProbeFailedRequest represents failed request of SyncProbesRequest. message ProbeFailedRequest { // Failed probes information. repeated FailedProbe probes = 1; } // SyncProbesRequest represents request of SyncProbes. message SyncProbesRequest { // Source host metadata. common.v2.Host host = 1; oneof request { ProbeStartedRequest probe_started_request = 2; ProbeFinishedRequest probe_finished_request = 3; ProbeFailedRequest probe_failed_request = 4; } } // SyncProbesResponse represents response of SyncProbes. message SyncProbesResponse { // Hosts needs to be probed. repeated common.v2.Host hosts = 1; } // Scheduler RPC Service. service Scheduler{ // AnnouncePeer announces peer to scheduler. rpc AnnouncePeer(stream AnnouncePeerRequest) returns(stream AnnouncePeerResponse); // Checks information of peer. rpc StatPeer(StatPeerRequest)returns(common.v2.Peer); // LeavePeer releases peer in scheduler. rpc LeavePeer(LeavePeerRequest)returns(google.protobuf.Empty); // TODO exchange peer api definition. // ExchangePeer exchanges peer information. rpc ExchangePeer(ExchangePeerRequest)returns(ExchangePeerResponse); // Checks information of task. rpc StatTask(StatTaskRequest)returns(common.v2.Task); // AnnounceHost announces host to scheduler. rpc AnnounceHost(AnnounceHostRequest)returns(google.protobuf.Empty); // LeaveHost releases host in scheduler. rpc LeaveHost(LeaveHostRequest)returns(google.protobuf.Empty); // SyncProbes sync probes of the host. rpc SyncProbes(stream SyncProbesRequest)returns(stream SyncProbesResponse); }