This repository has been archived by the owner on Nov 29, 2023. It is now read-only.
/
autoscaling_policies.proto
369 lines (333 loc) · 15 KB
/
autoscaling_policies.proto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
// Copyright 2020 Google LLC
//
// 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 google.cloud.dataproc.v1beta2;
import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/empty.proto";
option go_package = "google.golang.org/genproto/googleapis/cloud/dataproc/v1beta2;dataproc";
option java_multiple_files = true;
option java_outer_classname = "AutoscalingPoliciesProto";
option java_package = "com.google.cloud.dataproc.v1beta2";
option (google.api.resource_definition) = {
type: "dataproc.googleapis.com/Region"
pattern: "projects/{project}/regions/{region}"
};
// The API interface for managing autoscaling policies in the
// Cloud Dataproc API.
service AutoscalingPolicyService {
option (google.api.default_host) = "dataproc.googleapis.com";
option (google.api.oauth_scopes) =
"https://www.googleapis.com/auth/cloud-platform";
// Creates new autoscaling policy.
rpc CreateAutoscalingPolicy(CreateAutoscalingPolicyRequest)
returns (AutoscalingPolicy) {
option (google.api.http) = {
post: "/v1beta2/{parent=projects/*/locations/*}/autoscalingPolicies"
body: "policy"
additional_bindings {
post: "/v1beta2/{parent=projects/*/regions/*}/autoscalingPolicies"
body: "policy"
}
};
option (google.api.method_signature) = "parent,policy";
}
// Updates (replaces) autoscaling policy.
//
// Disabled check for update_mask, because all updates will be full
// replacements.
rpc UpdateAutoscalingPolicy(UpdateAutoscalingPolicyRequest)
returns (AutoscalingPolicy) {
option (google.api.http) = {
put: "/v1beta2/{policy.name=projects/*/locations/*/autoscalingPolicies/*}"
body: "policy"
additional_bindings {
put: "/v1beta2/{policy.name=projects/*/regions/*/autoscalingPolicies/*}"
body: "policy"
}
};
option (google.api.method_signature) = "policy";
}
// Retrieves autoscaling policy.
rpc GetAutoscalingPolicy(GetAutoscalingPolicyRequest)
returns (AutoscalingPolicy) {
option (google.api.http) = {
get: "/v1beta2/{name=projects/*/locations/*/autoscalingPolicies/*}"
additional_bindings {
get: "/v1beta2/{name=projects/*/regions/*/autoscalingPolicies/*}"
}
};
option (google.api.method_signature) = "name";
}
// Lists autoscaling policies in the project.
rpc ListAutoscalingPolicies(ListAutoscalingPoliciesRequest)
returns (ListAutoscalingPoliciesResponse) {
option (google.api.http) = {
get: "/v1beta2/{parent=projects/*/locations/*}/autoscalingPolicies"
additional_bindings {
get: "/v1beta2/{parent=projects/*/regions/*}/autoscalingPolicies"
}
};
option (google.api.method_signature) = "parent";
}
// Deletes an autoscaling policy. It is an error to delete an autoscaling
// policy that is in use by one or more clusters.
rpc DeleteAutoscalingPolicy(DeleteAutoscalingPolicyRequest)
returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/v1beta2/{name=projects/*/locations/*/autoscalingPolicies/*}"
additional_bindings {
delete: "/v1beta2/{name=projects/*/regions/*/autoscalingPolicies/*}"
}
};
option (google.api.method_signature) = "name";
}
}
// Describes an autoscaling policy for Dataproc cluster autoscaler.
message AutoscalingPolicy {
option (google.api.resource) = {
type: "dataproc.googleapis.com/AutoscalingPolicy"
pattern: "projects/{project}/locations/{location}/autoscalingPolicies/{autoscaling_policy}"
pattern: "projects/{project}/regions/{region}/autoscalingPolicies/{autoscaling_policy}"
history: ORIGINALLY_SINGLE_PATTERN
};
// Required. The policy id.
//
// The id must contain only letters (a-z, A-Z), numbers (0-9),
// underscores (_), and hyphens (-). Cannot begin or end with underscore
// or hyphen. Must consist of between 3 and 50 characters.
string id = 1 [(google.api.field_behavior) = REQUIRED];
// Output only. The "resource name" of the autoscaling policy, as described
// in https://cloud.google.com/apis/design/resource_names.
//
// * For `projects.regions.autoscalingPolicies`, the resource name of the
// policy has the following format:
// `projects/{project_id}/regions/{region}/autoscalingPolicies/{policy_id}`
//
// * For `projects.locations.autoscalingPolicies`, the resource name of the
// policy has the following format:
// `projects/{project_id}/locations/{location}/autoscalingPolicies/{policy_id}`
string name = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
// Required. Autoscaling algorithm for policy.
oneof algorithm {
BasicAutoscalingAlgorithm basic_algorithm = 3;
}
// Required. Describes how the autoscaler will operate for primary workers.
InstanceGroupAutoscalingPolicyConfig worker_config = 4
[(google.api.field_behavior) = REQUIRED];
// Optional. Describes how the autoscaler will operate for secondary workers.
InstanceGroupAutoscalingPolicyConfig secondary_worker_config = 5
[(google.api.field_behavior) = OPTIONAL];
}
// Basic algorithm for autoscaling.
message BasicAutoscalingAlgorithm {
// Required. YARN autoscaling configuration.
BasicYarnAutoscalingConfig yarn_config = 1
[(google.api.field_behavior) = REQUIRED];
// Optional. Duration between scaling events. A scaling period starts after
// the update operation from the previous event has completed.
//
// Bounds: [2m, 1d]. Default: 2m.
google.protobuf.Duration cooldown_period = 2
[(google.api.field_behavior) = OPTIONAL];
}
// Basic autoscaling configurations for YARN.
message BasicYarnAutoscalingConfig {
// Required. Timeout for YARN graceful decommissioning of Node Managers.
// Specifies the duration to wait for jobs to complete before forcefully
// removing workers (and potentially interrupting jobs). Only applicable to
// downscaling operations.
//
// Bounds: [0s, 1d].
google.protobuf.Duration graceful_decommission_timeout = 5
[(google.api.field_behavior) = REQUIRED];
// Required. Fraction of average YARN pending memory in the last cooldown
// period for which to add workers. A scale-up factor of 1.0 will result in
// scaling up so that there is no pending memory remaining after the update
// (more aggressive scaling). A scale-up factor closer to 0 will result in a
// smaller magnitude of scaling up (less aggressive scaling). See [How
// autoscaling
// works](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/autoscaling#how_autoscaling_works)
// for more information.
//
// Bounds: [0.0, 1.0].
double scale_up_factor = 1 [(google.api.field_behavior) = REQUIRED];
// Required. Fraction of average YARN pending memory in the last cooldown
// period for which to remove workers. A scale-down factor of 1 will result in
// scaling down so that there is no available memory remaining after the
// update (more aggressive scaling). A scale-down factor of 0 disables
// removing workers, which can be beneficial for autoscaling a single job.
// See [How autoscaling
// works](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/autoscaling#how_autoscaling_works)
// for more information.
//
// Bounds: [0.0, 1.0].
double scale_down_factor = 2 [(google.api.field_behavior) = REQUIRED];
// Optional. Minimum scale-up threshold as a fraction of total cluster size
// before scaling occurs. For example, in a 20-worker cluster, a threshold of
// 0.1 means the autoscaler must recommend at least a 2-worker scale-up for
// the cluster to scale. A threshold of 0 means the autoscaler will scale up
// on any recommended change.
//
// Bounds: [0.0, 1.0]. Default: 0.0.
double scale_up_min_worker_fraction = 3
[(google.api.field_behavior) = OPTIONAL];
// Optional. Minimum scale-down threshold as a fraction of total cluster size
// before scaling occurs. For example, in a 20-worker cluster, a threshold of
// 0.1 means the autoscaler must recommend at least a 2 worker scale-down for
// the cluster to scale. A threshold of 0 means the autoscaler will scale down
// on any recommended change.
//
// Bounds: [0.0, 1.0]. Default: 0.0.
double scale_down_min_worker_fraction = 4
[(google.api.field_behavior) = OPTIONAL];
}
// Configuration for the size bounds of an instance group, including its
// proportional size to other groups.
message InstanceGroupAutoscalingPolicyConfig {
// Optional. Minimum number of instances for this group.
//
// Primary workers - Bounds: [2, max_instances]. Default: 2.
// Secondary workers - Bounds: [0, max_instances]. Default: 0.
int32 min_instances = 1 [(google.api.field_behavior) = OPTIONAL];
// Optional. Maximum number of instances for this group. Required for primary
// workers. Note that by default, clusters will not use secondary workers.
// Required for secondary workers if the minimum secondary instances is set.
//
// Primary workers - Bounds: [min_instances, ). Required.
// Secondary workers - Bounds: [min_instances, ). Default: 0.
int32 max_instances = 2 [(google.api.field_behavior) = OPTIONAL];
// Optional. Weight for the instance group, which is used to determine the
// fraction of total workers in the cluster from this instance group.
// For example, if primary workers have weight 2, and secondary workers have
// weight 1, the cluster will have approximately 2 primary workers for each
// secondary worker.
//
// The cluster may not reach the specified balance if constrained
// by min/max bounds or other autoscaling settings. For example, if
// `max_instances` for secondary workers is 0, then only primary workers will
// be added. The cluster can also be out of balance when created.
//
// If weight is not set on any instance group, the cluster will default to
// equal weight for all groups: the cluster will attempt to maintain an equal
// number of workers in each group within the configured size bounds for each
// group. If weight is set for one group only, the cluster will default to
// zero weight on the unset group. For example if weight is set only on
// primary workers, the cluster will use primary workers only and no
// secondary workers.
int32 weight = 3 [(google.api.field_behavior) = OPTIONAL];
}
// A request to create an autoscaling policy.
message CreateAutoscalingPolicyRequest {
// Required. The "resource name" of the region or location, as described
// in https://cloud.google.com/apis/design/resource_names.
//
// * For `projects.regions.autoscalingPolicies.create`, the resource name
// has the following format:
// `projects/{project_id}/regions/{region}`
//
// * For `projects.locations.autoscalingPolicies.create`, the resource name
// has the following format:
// `projects/{project_id}/locations/{location}`
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "dataproc.googleapis.com/AutoscalingPolicy"
}
];
// Required. The autoscaling policy to create.
AutoscalingPolicy policy = 2 [(google.api.field_behavior) = REQUIRED];
}
// A request to fetch an autoscaling policy.
message GetAutoscalingPolicyRequest {
// Required. The "resource name" of the autoscaling policy, as described
// in https://cloud.google.com/apis/design/resource_names.
//
// * For `projects.regions.autoscalingPolicies.get`, the resource name
// of the policy has the following format:
// `projects/{project_id}/regions/{region}/autoscalingPolicies/{policy_id}`
//
// * For `projects.locations.autoscalingPolicies.get`, the resource name
// of the policy has the following format:
// `projects/{project_id}/locations/{location}/autoscalingPolicies/{policy_id}`
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dataproc.googleapis.com/AutoscalingPolicy"
}
];
}
// A request to update an autoscaling policy.
message UpdateAutoscalingPolicyRequest {
// Required. The updated autoscaling policy.
AutoscalingPolicy policy = 1 [(google.api.field_behavior) = REQUIRED];
}
// A request to delete an autoscaling policy.
//
// Autoscaling policies in use by one or more clusters will not be deleted.
message DeleteAutoscalingPolicyRequest {
// Required. The "resource name" of the autoscaling policy, as described
// in https://cloud.google.com/apis/design/resource_names.
//
// * For `projects.regions.autoscalingPolicies.delete`, the resource name
// of the policy has the following format:
// `projects/{project_id}/regions/{region}/autoscalingPolicies/{policy_id}`
//
// * For `projects.locations.autoscalingPolicies.delete`, the resource name
// of the policy has the following format:
// `projects/{project_id}/locations/{location}/autoscalingPolicies/{policy_id}`
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "dataproc.googleapis.com/AutoscalingPolicy"
}
];
}
// A request to list autoscaling policies in a project.
message ListAutoscalingPoliciesRequest {
// Required. The "resource name" of the region or location, as described
// in https://cloud.google.com/apis/design/resource_names.
//
// * For `projects.regions.autoscalingPolicies.list`, the resource name
// of the region has the following format:
// `projects/{project_id}/regions/{region}`
//
// * For `projects.locations.autoscalingPolicies.list`, the resource name
// of the location has the following format:
// `projects/{project_id}/locations/{location}`
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "dataproc.googleapis.com/AutoscalingPolicy"
}
];
// Optional. The maximum number of results to return in each response.
// Must be less than or equal to 1000. Defaults to 100.
int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL];
// Optional. The page token, returned by a previous call, to request the
// next page of results.
string page_token = 3 [(google.api.field_behavior) = OPTIONAL];
}
// A response to a request to list autoscaling policies in a project.
message ListAutoscalingPoliciesResponse {
// Output only. Autoscaling policies list.
repeated AutoscalingPolicy policies = 1
[(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. This token is included in the response if there are more
// results to fetch.
string next_page_token = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
}