1// Copyright 2020 Google LLC 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15syntax = "proto3"; 16 17package google.longrunning; 18 19import "google/api/annotations.proto"; 20import "google/api/client.proto"; 21import "google/protobuf/any.proto"; 22import "google/protobuf/duration.proto"; 23import "google/protobuf/empty.proto"; 24import "google/rpc/status.proto"; 25import "google/protobuf/descriptor.proto"; 26 27option cc_enable_arenas = true; 28option csharp_namespace = "Google.LongRunning"; 29option go_package = "cloud.google.com/go/longrunning/autogen/longrunningpb;longrunningpb"; 30option java_multiple_files = true; 31option java_outer_classname = "OperationsProto"; 32option java_package = "com.google.longrunning"; 33option php_namespace = "Google\\LongRunning"; 34 35extend google.protobuf.MethodOptions { 36 // Additional information regarding long-running operations. 37 // In particular, this specifies the types that are returned from 38 // long-running operations. 39 // 40 // Required for methods that return `google.longrunning.Operation`; invalid 41 // otherwise. 42 google.longrunning.OperationInfo operation_info = 1049; 43} 44 45// Manages long-running operations with an API service. 46// 47// When an API method normally takes long time to complete, it can be designed 48// to return [Operation][google.longrunning.Operation] to the client, and the client can use this 49// interface to receive the real response asynchronously by polling the 50// operation resource, or pass the operation resource to another API (such as 51// Google Cloud Pub/Sub API) to receive the response. Any API service that 52// returns long-running operations should implement the `Operations` interface 53// so developers can have a consistent client experience. 54service Operations { 55 option (google.api.default_host) = "longrunning.googleapis.com"; 56 57 // Lists operations that match the specified filter in the request. If the 58 // server doesn't support this method, it returns `UNIMPLEMENTED`. 59 // 60 // NOTE: the `name` binding allows API services to override the binding 61 // to use different resource name schemes, such as `users/*/operations`. To 62 // override the binding, API services can add a binding such as 63 // `"/v1/{name=users/*}/operations"` to their service configuration. 64 // For backwards compatibility, the default name includes the operations 65 // collection id, however overriding users must ensure the name binding 66 // is the parent resource, without the operations collection id. 67 rpc ListOperations(ListOperationsRequest) returns (ListOperationsResponse) { 68 option (google.api.http) = { 69 get: "/v1/{name=operations}" 70 }; 71 option (google.api.method_signature) = "name,filter"; 72 } 73 74 // Gets the latest state of a long-running operation. Clients can use this 75 // method to poll the operation result at intervals as recommended by the API 76 // service. 77 rpc GetOperation(GetOperationRequest) returns (Operation) { 78 option (google.api.http) = { 79 get: "/v1/{name=operations/**}" 80 }; 81 option (google.api.method_signature) = "name"; 82 } 83 84 // Deletes a long-running operation. This method indicates that the client is 85 // no longer interested in the operation result. It does not cancel the 86 // operation. If the server doesn't support this method, it returns 87 // `google.rpc.Code.UNIMPLEMENTED`. 88 rpc DeleteOperation(DeleteOperationRequest) returns (google.protobuf.Empty) { 89 option (google.api.http) = { 90 delete: "/v1/{name=operations/**}" 91 }; 92 option (google.api.method_signature) = "name"; 93 } 94 95 // Starts asynchronous cancellation on a long-running operation. The server 96 // makes a best effort to cancel the operation, but success is not 97 // guaranteed. If the server doesn't support this method, it returns 98 // `google.rpc.Code.UNIMPLEMENTED`. Clients can use 99 // [Operations.GetOperation][google.longrunning.Operations.GetOperation] or 100 // other methods to check whether the cancellation succeeded or whether the 101 // operation completed despite cancellation. On successful cancellation, 102 // the operation is not deleted; instead, it becomes an operation with 103 // an [Operation.error][google.longrunning.Operation.error] value with a [google.rpc.Status.code][google.rpc.Status.code] of 1, 104 // corresponding to `Code.CANCELLED`. 105 rpc CancelOperation(CancelOperationRequest) returns (google.protobuf.Empty) { 106 option (google.api.http) = { 107 post: "/v1/{name=operations/**}:cancel" 108 body: "*" 109 }; 110 option (google.api.method_signature) = "name"; 111 } 112 113 // Waits until the specified long-running operation is done or reaches at most 114 // a specified timeout, returning the latest state. If the operation is 115 // already done, the latest state is immediately returned. If the timeout 116 // specified is greater than the default HTTP/RPC timeout, the HTTP/RPC 117 // timeout is used. If the server does not support this method, it returns 118 // `google.rpc.Code.UNIMPLEMENTED`. 119 // Note that this method is on a best-effort basis. It may return the latest 120 // state before the specified timeout (including immediately), meaning even an 121 // immediate response is no guarantee that the operation is done. 122 rpc WaitOperation(WaitOperationRequest) returns (Operation) { 123 } 124} 125 126// This resource represents a long-running operation that is the result of a 127// network API call. 128message Operation { 129 // The server-assigned name, which is only unique within the same service that 130 // originally returns it. If you use the default HTTP mapping, the 131 // `name` should be a resource name ending with `operations/{unique_id}`. 132 string name = 1; 133 134 // Service-specific metadata associated with the operation. It typically 135 // contains progress information and common metadata such as create time. 136 // Some services might not provide such metadata. Any method that returns a 137 // long-running operation should document the metadata type, if any. 138 google.protobuf.Any metadata = 2; 139 140 // If the value is `false`, it means the operation is still in progress. 141 // If `true`, the operation is completed, and either `error` or `response` is 142 // available. 143 bool done = 3; 144 145 // The operation result, which can be either an `error` or a valid `response`. 146 // If `done` == `false`, neither `error` nor `response` is set. 147 // If `done` == `true`, exactly one of `error` or `response` is set. 148 oneof result { 149 // The error result of the operation in case of failure or cancellation. 150 google.rpc.Status error = 4; 151 152 // The normal response of the operation in case of success. If the original 153 // method returns no data on success, such as `Delete`, the response is 154 // `google.protobuf.Empty`. If the original method is standard 155 // `Get`/`Create`/`Update`, the response should be the resource. For other 156 // methods, the response should have the type `XxxResponse`, where `Xxx` 157 // is the original method name. For example, if the original method name 158 // is `TakeSnapshot()`, the inferred response type is 159 // `TakeSnapshotResponse`. 160 google.protobuf.Any response = 5; 161 } 162} 163 164// The request message for [Operations.GetOperation][google.longrunning.Operations.GetOperation]. 165message GetOperationRequest { 166 // The name of the operation resource. 167 string name = 1; 168} 169 170// The request message for [Operations.ListOperations][google.longrunning.Operations.ListOperations]. 171message ListOperationsRequest { 172 // The name of the operation's parent resource. 173 string name = 4; 174 175 // The standard list filter. 176 string filter = 1; 177 178 // The standard list page size. 179 int32 page_size = 2; 180 181 // The standard list page token. 182 string page_token = 3; 183} 184 185// The response message for [Operations.ListOperations][google.longrunning.Operations.ListOperations]. 186message ListOperationsResponse { 187 // A list of operations that matches the specified filter in the request. 188 repeated Operation operations = 1; 189 190 // The standard List next-page token. 191 string next_page_token = 2; 192} 193 194// The request message for [Operations.CancelOperation][google.longrunning.Operations.CancelOperation]. 195message CancelOperationRequest { 196 // The name of the operation resource to be cancelled. 197 string name = 1; 198} 199 200// The request message for [Operations.DeleteOperation][google.longrunning.Operations.DeleteOperation]. 201message DeleteOperationRequest { 202 // The name of the operation resource to be deleted. 203 string name = 1; 204} 205 206// The request message for [Operations.WaitOperation][google.longrunning.Operations.WaitOperation]. 207message WaitOperationRequest { 208 // The name of the operation resource to wait on. 209 string name = 1; 210 211 // The maximum duration to wait before timing out. If left blank, the wait 212 // will be at most the time permitted by the underlying HTTP/RPC protocol. 213 // If RPC context deadline is also specified, the shorter one will be used. 214 google.protobuf.Duration timeout = 2; 215} 216 217// A message representing the message types used by a long-running operation. 218// 219// Example: 220// 221// rpc LongRunningRecognize(LongRunningRecognizeRequest) 222// returns (google.longrunning.Operation) { 223// option (google.longrunning.operation_info) = { 224// response_type: "LongRunningRecognizeResponse" 225// metadata_type: "LongRunningRecognizeMetadata" 226// }; 227// } 228message OperationInfo { 229 // Required. The message name of the primary return type for this 230 // long-running operation. 231 // This type will be used to deserialize the LRO's response. 232 // 233 // If the response is in a different package from the rpc, a fully-qualified 234 // message name must be used (e.g. `google.protobuf.Struct`). 235 // 236 // Note: Altering this value constitutes a breaking change. 237 string response_type = 1; 238 239 // Required. The message name of the metadata type for this long-running 240 // operation. 241 // 242 // If the response is in a different package from the rpc, a fully-qualified 243 // message name must be used (e.g. `google.protobuf.Struct`). 244 // 245 // Note: Altering this value constitutes a breaking change. 246 string metadata_type = 2; 247} 248