/* * 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 "pkg/apis/common/v2/common.proto"; import "pkg/apis/errordetails/v2/errordetails.proto"; import "validate/validate.proto"; import "google/protobuf/empty.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; option go_package = "d7y.io/api/v2/pkg/apis/scheduler/v2;scheduler"; // RegisterPeerRequest represents peer registered request of AnnouncePeerRequest. message RegisterPeerRequest { // Download information. common.v2.Download download = 1 [(validate.rules).message.required = true]; } // 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. optional string description = 1 [(validate.rules).string = {min_len: 1, ignore_empty: true}]; } // RescheduleRequest represents reschedule request of AnnouncePeerRequest. message RescheduleRequest { // Candidate parent ids. repeated common.v2.Peer candidate_parents = 1; // The description of the reschedule reason. optional string description = 2 [(validate.rules).string = {min_len: 1, ignore_empty: true}]; } // DownloadPeerFinishedRequest represents peer download finished request of AnnouncePeerRequest. message DownloadPeerFinishedRequest { // Total content length. uint64 content_length = 1; // Total piece count. uint32 piece_count = 2; } // DownloadPeerBackToSourceFinishedRequest represents peer download back-to-source finished request of AnnouncePeerRequest. message DownloadPeerBackToSourceFinishedRequest { // Total content length. uint64 content_length = 1; // Total piece count. uint32 piece_count = 2; } // DownloadPeerFailedRequest represents peer download failed request of AnnouncePeerRequest. message DownloadPeerFailedRequest { // The description of the download failed. optional string description = 1 [(validate.rules).string = {min_len: 1, ignore_empty: true}]; } // DownloadPeerBackToSourceFailedRequest represents peer download back-to-source failed request of AnnouncePeerRequest. message DownloadPeerBackToSourceFailedRequest { // The description of the download back-to-source failed. optional string description = 1 [(validate.rules).string = {min_len: 1, ignore_empty: true}]; } // DownloadPieceFinishedRequest represents piece download finished request of AnnouncePeerRequest. message DownloadPieceFinishedRequest { // Piece info. common.v2.Piece piece = 1 [(validate.rules).message.required = true]; } // DownloadPieceBackToSourceFinishedRequest represents piece download back-to-source finished request of AnnouncePeerRequest. message DownloadPieceBackToSourceFinishedRequest { // Piece info. common.v2.Piece piece = 1 [(validate.rules).message.required = true]; } // DownloadPieceFailedRequest downloads piece failed request of AnnouncePeerRequest. message DownloadPieceFailedRequest { // Piece number. optional uint32 piece_number = 1; // Parent id. string parent_id = 2 [(validate.rules).string.min_len = 1]; // Temporary indicates whether the error is temporary. bool temporary = 3; } // DownloadPieceBackToSourceFailedRequest downloads piece back-to-source failed request of AnnouncePeerRequest. message DownloadPieceBackToSourceFailedRequest { // Piece number. optional uint32 piece_number = 1; oneof response { option (validate.required) = true; errordetails.v2.HTTP http = 2; } } // AnnouncePeerRequest represents request of AnnouncePeer. message AnnouncePeerRequest { // 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 request { option (validate.required) = true; RegisterPeerRequest register_peer_request = 4; DownloadPeerStartedRequest download_peer_started_request = 5; DownloadPeerBackToSourceStartedRequest download_peer_back_to_source_started_request = 6; RescheduleRequest reschedule_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; } } // EmptyTaskResponse represents empty task response of AnnouncePeerResponse. message EmptyTaskResponse { } // NormalTaskResponse represents normal task response of AnnouncePeerResponse. message NormalTaskResponse { // Candidate parents. repeated common.v2.Peer candidate_parents = 1 [(validate.rules).repeated = {min_items: 1}]; } // NeedBackToSourceResponse represents need back-to-source response of AnnouncePeerResponse. message NeedBackToSourceResponse { // The description of the back-to-source reason. optional string description = 1 [(validate.rules).string = {min_len: 1, ignore_empty: true}]; } // AnnouncePeerResponse represents response of AnnouncePeer. message AnnouncePeerResponse { oneof response { option (validate.required) = true; EmptyTaskResponse empty_task_response = 1; NormalTaskResponse normal_task_response = 2; NeedBackToSourceResponse need_back_to_source_response = 3; } } // StatPeerRequest represents request of StatPeer. message StatPeerRequest { // 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]; } // TODO exchange peer request definition. // ExchangePeerRequest represents request of ExchangePeer. message ExchangePeerRequest { // 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]; } // 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 [(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]; } // StatTaskRequest represents request of StatTask. message StatTaskRequest { // Task id. string id = 1 [(validate.rules).string.min_len = 1]; } // AnnounceHostRequest represents request of AnnounceHost. message AnnounceHostRequest { // Host info. common.v2.Host host = 1 [(validate.rules).message.required = true]; } // LeaveHostRequest represents request of LeaveHost. message LeaveHostRequest{ // Host id. string id = 1 [(validate.rules).string.min_len = 1]; } // ProbeStartedRequest represents started request of SyncProbesRequest. message ProbeStartedRequest { } // Probe information. message Probe { // Destination host metadata. common.v2.Host host = 1 [(validate.rules).message.required = true]; // RTT is the round-trip time sent via this pinger. google.protobuf.Duration rtt = 2 [(validate.rules).duration.required = true]; // Probe create time. google.protobuf.Timestamp created_at = 3 [(validate.rules).timestamp.required = true]; } // ProbeFinishedRequest represents finished request of SyncProbesRequest. message ProbeFinishedRequest { // Probes information. repeated Probe probes = 1 [(validate.rules).repeated = {min_items: 1}]; } // FailedProbe information. message FailedProbe { // Destination host metadata. common.v2.Host host = 1 [(validate.rules).message.required = true]; // The description of probing failed. optional string description = 2 [(validate.rules).string = {min_len: 1, ignore_empty: true}]; } // ProbeFailedRequest represents failed request of SyncProbesRequest. message ProbeFailedRequest { // Failed probes information. repeated FailedProbe probes = 1 [(validate.rules).repeated = {min_items: 1}]; } // SyncProbesRequest represents request of SyncProbes. message SyncProbesRequest { // Source host metadata. common.v2.Host host = 1 [(validate.rules).message.required = true]; oneof request { option (validate.required) = true; 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 [(validate.rules).repeated = {min_items: 1, ignore_empty: true}]; } // 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); }