syntax = "proto3"; package resource_manager; import "gogoproto/gogo.proto"; import "rustproto.proto"; option (gogoproto.sizer_all) = true; option (gogoproto.marshaler_all) = true; option (gogoproto.unmarshaler_all) = true; option (rustproto.lite_runtime_all) = true; service ResourceManager { rpc ListResourceGroups(ListResourceGroupsRequest) returns (ListResourceGroupsResponse) {} rpc GetResourceGroup(GetResourceGroupRequest) returns (GetResourceGroupResponse) {} rpc AddResourceGroup(PutResourceGroupRequest) returns (PutResourceGroupResponse) {} rpc ModifyResourceGroup(PutResourceGroupRequest) returns (PutResourceGroupResponse) {} rpc DeleteResourceGroup(DeleteResourceGroupRequest) returns (DeleteResourceGroupResponse) {} rpc AcquireTokenBuckets(stream TokenBucketsRequest) returns (stream TokenBucketsResponse) {} } message ListResourceGroupsRequest{} message ListResourceGroupsResponse{ Error error = 1; repeated ResourceGroup groups = 2; } message GetResourceGroupRequest { string resource_group_name = 1; } message GetResourceGroupResponse{ Error error = 1; ResourceGroup group = 2; } message DeleteResourceGroupRequest { string resource_group_name = 1; } message DeleteResourceGroupResponse{ Error error = 1; string body = 2; } message PutResourceGroupRequest { ResourceGroup group = 1; } message PutResourceGroupResponse { Error error = 1; string body = 2; } message TokenBucketsRequest { repeated TokenBucketRequest requests = 1; uint64 target_request_period_ms = 2; uint64 client_unique_id = 3; } message TokenBucketRequest { message RequestRU { repeated RequestUnitItem request_r_u = 1; } message RequestRawResource { repeated RawResourceItem request_raw_resource = 1; } string resource_group_name = 1; oneof request { // RU mode, group settings with WRU/RRU etc resource abstract unit. RequestRU ru_items = 2; // Raw mode, group settings with CPU/IO etc resource unit. RequestRawResource raw_resource_items = 3; } // Aggregate statistics in group level. Consumption consumption_since_last_request = 4; // label background request. bool is_background = 5; bool is_tiflash = 6; } message TokenBucketsResponse { Error error = 1; repeated TokenBucketResponse responses = 2; } message TokenBucketResponse { string resource_group_name = 1; // RU mode repeated GrantedRUTokenBucket granted_r_u_tokens = 2; // Raw mode repeated GrantedRawResourceTokenBucket granted_resource_tokens = 3; } message GrantedRUTokenBucket { RequestUnitType type = 1; TokenBucket granted_tokens = 2; int64 trickle_time_ms = 3; } message GrantedRawResourceTokenBucket { RawResourceType type = 1; TokenBucket granted_tokens = 2; int64 trickle_time_ms = 3; } enum RequestUnitType { RU = 0; } enum RawResourceType { CPU = 0; IOReadFlow = 1; IOWriteFlow = 2; } message Consumption { double r_r_u = 1; double w_r_u = 2; double read_bytes = 3; double write_bytes = 4; double total_cpu_time_ms = 5; double sql_layer_cpu_time_ms = 6; double kv_read_rpc_count = 7; double kv_write_rpc_count = 8; } message RequestUnitItem { RequestUnitType type = 1; double value = 2; } message RawResourceItem { RawResourceType type = 1; double value = 2; } enum GroupMode { Unknown = 0; RUMode = 1; RawMode = 2; } // ResourceGroup the settings definitions. message ResourceGroup { string name = 1; GroupMode mode = 2; // Used in RU mode, group settings with WRU/RRU etc resource abstract unit. GroupRequestUnitSettings r_u_settings = 3; // Used in Raw mode, group settings with CPU/IO etc resource unit. GroupRawResourceSettings raw_resource_settings = 4; // The task scheduling priority uint32 priority = 5; // Runaway queries settings RunawaySettings runaway_settings = 6; BackgroundSettings background_settings = 7; } message GroupRequestUnitSettings { TokenBucket r_u = 1; } message GroupRawResourceSettings { TokenBucket cpu = 1; TokenBucket io_read = 2; TokenBucket io_write = 3; } message TokenBucket { TokenLimitSettings settings = 1; // Once used to reconfigure, the tokens is delta tokens. double tokens = 2; } message TokenLimitSettings { uint64 fill_rate = 1; int64 burst_limit = 2; double max_tokens = 3; } message Error { string message = 1; } enum RunawayAction { NoneAction = 0; DryRun = 1; // do nothing CoolDown = 2; // deprioritize the task Kill = 3; // kill the task } enum RunawayWatchType { NoneWatch = 0; Exact = 1; Similar = 2; Plan = 3; } message RunawayRule { uint64 exec_elapsed_time_ms = 1; } message RunawayWatch { // how long would the watch last int64 lasting_duration_ms = 1; RunawayWatchType type = 2; } message RunawaySettings { RunawayRule rule = 1; RunawayAction action = 2; RunawayWatch watch = 3; } message BackgroundSettings { repeated string job_types = 1; } message Participant { // name is the unique name of the resource manager participant. string name = 1; // id is the unique id of the resource manager participant. uint64 id = 2; // listen_urls is the serivce endpoint list in the url format. // listen_urls[0] is primary service endpoint. repeated string listen_urls = 3; }