feat!: storagetransfer public protos update

BREAKING CHANGE: field annotations are added. Allowing this since no client libraries were generated based on old protos.

Committer: @alexander-fenster
PiperOrigin-RevId: 386124227
This commit is contained in:
Google APIs 2021-07-21 16:50:08 -07:00 committed by Copybara-Service
parent e8d2996cc4
commit 2d0aae27bb
5 changed files with 999 additions and 197 deletions

View file

@ -0,0 +1,350 @@
# This file was automatically generated by BuildFileGenerator
# https://github.com/googleapis/rules_gapic/tree/master/bazel
# Most of the manual changes to this file will be overwritten.
# It's **only** allowed to change the following rule attribute values:
# - names of *_gapic_assembly_* rules
# - certain parameters of *_gapic_library rules, including but not limited to:
# * extra_protoc_parameters
# * extra_protoc_file_parameters
# The complete list of preserved parameters can be found in the source code.
# This is an API workspace, having public visibility by default makes perfect sense.
package(default_visibility = ["//visibility:public"])
##############################################################################
# Common
##############################################################################
load("@rules_proto//proto:defs.bzl", "proto_library")
load("@com_google_googleapis_imports//:imports.bzl", "proto_library_with_info")
proto_library(
name = "storagetransfer_proto",
srcs = [
"transfer.proto",
"transfer_types.proto",
],
deps = [
"//google/api:annotations_proto",
"//google/api:client_proto",
"//google/api:field_behavior_proto",
"//google/longrunning:operations_proto",
"//google/rpc:code_proto",
"//google/type:date_proto",
"//google/type:timeofday_proto",
"@com_google_protobuf//:any_proto",
"@com_google_protobuf//:duration_proto",
"@com_google_protobuf//:empty_proto",
"@com_google_protobuf//:field_mask_proto",
"@com_google_protobuf//:timestamp_proto",
],
)
proto_library_with_info(
name = "storagetransfer_proto_with_info",
deps = [
":storagetransfer_proto",
"//google/cloud:common_resources_proto",
],
)
##############################################################################
# Java
##############################################################################
load(
"@com_google_googleapis_imports//:imports.bzl",
"java_gapic_assembly_gradle_pkg",
"java_gapic_library",
"java_gapic_test",
"java_grpc_library",
"java_proto_library",
)
java_proto_library(
name = "storagetransfer_java_proto",
deps = [":storagetransfer_proto"],
)
java_grpc_library(
name = "storagetransfer_java_grpc",
srcs = [":storagetransfer_proto"],
deps = [":storagetransfer_java_proto"],
)
java_gapic_library(
name = "storagetransfer_java_gapic",
srcs = [":storagetransfer_proto_with_info"],
grpc_service_config = "storagetransfer_grpc_service_config.json",
test_deps = [
":storagetransfer_java_grpc",
],
deps = [
":storagetransfer_java_proto",
],
)
java_gapic_test(
name = "storagetransfer_java_gapic_test_suite",
test_classes = [
"com.google.storagetransfer.v1.proto.StorageTransferServiceClientTest",
],
runtime_deps = [":storagetransfer_java_gapic_test"],
)
# Open Source Packages
java_gapic_assembly_gradle_pkg(
name = "google-cloud-storagetransfer-v1-java",
deps = [
":storagetransfer_java_gapic",
":storagetransfer_java_grpc",
":storagetransfer_java_proto",
":storagetransfer_proto",
],
)
##############################################################################
# Go
##############################################################################
load(
"@com_google_googleapis_imports//:imports.bzl",
"go_gapic_assembly_pkg",
"go_gapic_library",
"go_proto_library",
"go_test",
)
go_proto_library(
name = "storagetransfer_go_proto",
compilers = ["@io_bazel_rules_go//proto:go_grpc"],
importpath = "google.golang.org/genproto/googleapis/storagetransfer/v1",
protos = [":storagetransfer_proto"],
deps = [
"//google/api:annotations_go_proto",
"//google/longrunning:longrunning_go_proto",
"//google/rpc:code_go_proto",
"//google/type:date_go_proto",
"//google/type:timeofday_go_proto",
],
)
go_gapic_library(
name = "storagetransfer_go_gapic",
srcs = [":storagetransfer_proto_with_info"],
grpc_service_config = "storagetransfer_grpc_service_config.json",
importpath = "cloud.google.com/go/storagetransfer/apiv1;storagetransfer",
metadata = True,
service_yaml = "storagetransfer_v1.yaml",
deps = [
":storagetransfer_go_proto",
"//google/longrunning:longrunning_go_proto",
"@com_google_cloud_go//longrunning:go_default_library",
"@com_google_cloud_go//longrunning/autogen:go_default_library",
"@io_bazel_rules_go//proto/wkt:any_go_proto",
"@io_bazel_rules_go//proto/wkt:duration_go_proto",
],
)
go_test(
name = "storagetransfer_go_gapic_test",
srcs = [":storagetransfer_go_gapic_srcjar_test"],
embed = [":storagetransfer_go_gapic"],
importpath = "cloud.google.com/go/storagetransfer/apiv1",
)
# Open Source Packages
go_gapic_assembly_pkg(
name = "gapi-cloud-storagetransfer-v1-go",
deps = [
":storagetransfer_go_gapic",
":storagetransfer_go_gapic_srcjar-metadata.srcjar",
":storagetransfer_go_gapic_srcjar-test.srcjar",
":storagetransfer_go_proto",
],
)
##############################################################################
# Python
##############################################################################
load(
"@com_google_googleapis_imports//:imports.bzl",
"py_gapic_assembly_pkg",
"py_gapic_library",
)
py_gapic_library(
name = "storagetransfer_py_gapic",
srcs = [":storagetransfer_proto"],
grpc_service_config = "storagetransfer_grpc_service_config.json",
)
# Open Source Packages
py_gapic_assembly_pkg(
name = "storagetransfer-v1-py",
deps = [
":storagetransfer_py_gapic",
],
)
##############################################################################
# PHP
##############################################################################
load(
"@com_google_googleapis_imports//:imports.bzl",
"php_gapic_assembly_pkg",
"php_gapic_library",
"php_grpc_library",
"php_proto_library",
)
php_proto_library(
name = "storagetransfer_php_proto",
deps = [":storagetransfer_proto"],
)
php_grpc_library(
name = "storagetransfer_php_grpc",
srcs = [":storagetransfer_proto"],
deps = [":storagetransfer_php_proto"],
)
php_gapic_library(
name = "storagetransfer_php_gapic",
srcs = [":storagetransfer_proto_with_info"],
grpc_service_config = "storagetransfer_grpc_service_config.json",
service_yaml = "storagetransfer_v1.yaml",
deps = [
":storagetransfer_php_grpc",
":storagetransfer_php_proto",
],
)
# Open Source Packages
php_gapic_assembly_pkg(
name = "google-cloud-storagetransfer-v1-php",
deps = [
":storagetransfer_php_gapic",
":storagetransfer_php_grpc",
":storagetransfer_php_proto",
],
)
##############################################################################
# Node.js
##############################################################################
load(
"@com_google_googleapis_imports//:imports.bzl",
"nodejs_gapic_assembly_pkg",
"nodejs_gapic_library",
)
nodejs_gapic_library(
name = "storagetransfer_nodejs_gapic",
package_name = "@google-cloud/storagetransfer",
src = ":storagetransfer_proto_with_info",
extra_protoc_parameters = ["metadata"],
grpc_service_config = "storagetransfer_grpc_service_config.json",
package = "google.storagetransfer.v1",
service_yaml = "storagetransfer_v1.yaml",
deps = [],
)
nodejs_gapic_assembly_pkg(
name = "storagetransfer-v1-nodejs",
deps = [
":storagetransfer_nodejs_gapic",
":storagetransfer_proto",
],
)
##############################################################################
# Ruby
##############################################################################
load(
"@com_google_googleapis_imports//:imports.bzl",
"ruby_cloud_gapic_library",
"ruby_gapic_assembly_pkg",
"ruby_grpc_library",
"ruby_proto_library",
)
ruby_proto_library(
name = "storagetransfer_ruby_proto",
deps = [":storagetransfer_proto"],
)
ruby_grpc_library(
name = "storagetransfer_ruby_grpc",
srcs = [":storagetransfer_proto"],
deps = [":storagetransfer_ruby_proto"],
)
ruby_cloud_gapic_library(
name = "storagetransfer_ruby_gapic",
srcs = [":storagetransfer_proto_with_info"],
extra_protoc_parameters = [
"ruby-cloud-gem-name=google-cloud-storagetransfer-v1",
],
grpc_service_config = "storagetransfer_grpc_service_config.json",
deps = [
":storagetransfer_ruby_grpc",
":storagetransfer_ruby_proto",
],
)
# Open Source Packages
ruby_gapic_assembly_pkg(
name = "google-cloud-storagetransfer-v1-ruby",
deps = [
":storagetransfer_ruby_gapic",
":storagetransfer_ruby_grpc",
":storagetransfer_ruby_proto",
],
)
##############################################################################
# C#
##############################################################################
load(
"@com_google_googleapis_imports//:imports.bzl",
"csharp_gapic_assembly_pkg",
"csharp_gapic_library",
"csharp_grpc_library",
"csharp_proto_library",
)
csharp_proto_library(
name = "storagetransfer_csharp_proto",
deps = [":storagetransfer_proto"],
)
csharp_grpc_library(
name = "storagetransfer_csharp_grpc",
srcs = [":storagetransfer_proto"],
deps = [":storagetransfer_csharp_proto"],
)
csharp_gapic_library(
name = "storagetransfer_csharp_gapic",
srcs = [":storagetransfer_proto_with_info"],
common_resources_config = "@gax_dotnet//:Google.Api.Gax/ResourceNames/CommonResourcesConfig.json",
grpc_service_config = "storagetransfer_grpc_service_config.json",
deps = [
":storagetransfer_csharp_grpc",
":storagetransfer_csharp_proto",
],
)
# Open Source Packages
csharp_gapic_assembly_pkg(
name = "google-cloud-storagetransfer-v1-csharp",
deps = [
":storagetransfer_csharp_gapic",
":storagetransfer_csharp_grpc",
":storagetransfer_csharp_proto",
],
)
##############################################################################
# C++
##############################################################################
# Put your C++ rules here

View file

@ -0,0 +1,12 @@
{
"methodConfig": [
{
"name": [
{
"service": "google.storagetransfer.v1.StorageTransferService"
}
],
"timeout": "60s"
}
]
}

View file

@ -0,0 +1,80 @@
type: google.api.Service
config_version: 3
name: storagetransfer.googleapis.com
title: Storage Transfer API
apis:
- name: google.storagetransfer.v1.StorageTransferService
types:
- name: google.storagetransfer.v1.RunTransferJobMetadata
- name: google.storagetransfer.v1.RunTransferJobResponse
- name: google.storagetransfer.v1.TransferOperation
documentation:
summary: |-
Transfers data from external data sources to a Google Cloud Storage bucket
or between Google Cloud Storage buckets.
rules:
- selector: google.longrunning.Operations.CancelOperation
description: |-
Cancels a transfer. Use
the [transferOperations.get][google.longrunning.Operations.GetOperation]
method to check if the cancellation succeeded or if the operation
completed despite the `cancel` request.
When you cancel an operation, the currently running transfer is
interrupted. For recurring transfer jobs, the next instance of the
transfer job will still run. For example, if your job is configured
to run every day at 1pm and you cancel Monday's operation at 1:05pm,
Monday's transfer
will stop. However, a transfer job will still be attempted on Tuesday.
This applies only to currently running operations. If an operation is
not currently running, `cancel` does nothing.
<aside class="caution">
<b>Caution:</b> Canceling a transfer job can leave your data in an
unknown state. We recommend that you restore the state at both the
destination and the source after the `cancel` request completes so
that your data is in a consistent state. </aside>
When you cancel a job, the next job computes a delta of files and may
repair any inconsistent state. For instance, if you run a job every
day, and today's job found 10 new files and transferred five files
before you canceled the job, tomorrow's transfer operation will
compute a new delta with the five files that were not copied today
plus any new files discovered tomorrow.
- selector: google.longrunning.Operations.ListOperations
description: |-
Lists transfer operations. Operations are ordered by their creation
time in reverse chronological order.
backend:
rules:
- selector: 'google.longrunning.Operations.*'
deadline: 30.0
- selector: 'google.storagetransfer.v1.StorageTransferService.*'
deadline: 30.0
http:
rules:
- selector: google.longrunning.Operations.CancelOperation
post: '/v1/{name=transferOperations/**}:cancel'
body: '*'
- selector: google.longrunning.Operations.GetOperation
get: '/v1/{name=transferOperations/**}'
- selector: google.longrunning.Operations.ListOperations
get: '/v1/{name=transferOperations}'
authentication:
rules:
- selector: 'google.longrunning.Operations.*'
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform
- selector: 'google.storagetransfer.v1.StorageTransferService.*'
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform

View file

@ -1,4 +1,4 @@
// Copyright 2017 Google Inc.
// Copyright 2021 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@ -17,6 +17,10 @@ syntax = "proto3";
package google.storagetransfer.v1;
import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/longrunning/operations.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/field_mask.proto";
import "google/storagetransfer/v1/transfer_types.proto";
@ -27,10 +31,16 @@ option go_package = "google.golang.org/genproto/googleapis/storagetransfer/v1;st
option java_outer_classname = "TransferProto";
option java_package = "com.google.storagetransfer.v1.proto";
option php_namespace = "Google\\Cloud\\StorageTransfer\\V1";
option ruby_package = "Google::Cloud::StorageTransfer::V1";
// Storage Transfer Service and its protos.
// Transfers data between between Google Cloud Storage buckets or from a data
// source external to Google to a Cloud Storage bucket.
service StorageTransferService {
option (google.api.default_host) = "storagetransfer.googleapis.com";
option (google.api.oauth_scopes) =
"https://www.googleapis.com/auth/cloud-platform";
// Returns the Google service account that is used by Storage Transfer
// Service to access buckets in the project where transfers
// run or in other projects. Each Google service account is associated
@ -55,8 +65,13 @@ service StorageTransferService {
}
// Updates a transfer job. Updating a job's transfer spec does not affect
// transfer operations that are running already. Updating the scheduling
// of a job is not allowed.
// transfer operations that are running already.
//
// **Note:** The job's [status][google.storagetransfer.v1.TransferJob.status]
// field can be modified using this RPC (for example, to set a job's status to
// [DELETED][google.storagetransfer.v1.TransferJob.Status.DELETED],
// [DISABLED][google.storagetransfer.v1.TransferJob.Status.DISABLED], or
// [ENABLED][google.storagetransfer.v1.TransferJob.Status.ENABLED]).
rpc UpdateTransferJob(UpdateTransferJobRequest) returns (TransferJob) {
option (google.api.http) = {
patch: "/v1/{job_name=transferJobs/**}"
@ -96,72 +111,98 @@ service StorageTransferService {
body: "*"
};
}
// Attempts to start a new TransferOperation for the current TransferJob. A
// TransferJob has a maximum of one active TransferOperation. If this method
// is called while a TransferOperation is active, an error wil be returned.
rpc RunTransferJob(RunTransferJobRequest)
returns (google.longrunning.Operation) {
option (google.api.http) = {
post: "/v1/{job_name=transferJobs/**}:run"
body: "*"
};
option (google.longrunning.operation_info) = {
response_type: "google.protobuf.Empty"
metadata_type: "TransferOperation"
};
}
}
// Request passed to GetGoogleServiceAccount.
message GetGoogleServiceAccountRequest {
// The ID of the Google Cloud Platform Console project that the Google service
// account is associated with.
// Required.
string project_id = 1;
// Required. The ID of the Google Cloud Platform Console project that the
// Google service account is associated with.
string project_id = 1 [(google.api.field_behavior) = REQUIRED];
}
// Request passed to CreateTransferJob.
message CreateTransferJobRequest {
// The job to create.
// Required.
TransferJob transfer_job = 1;
// Required. The job to create.
TransferJob transfer_job = 1 [(google.api.field_behavior) = REQUIRED];
}
// Request passed to UpdateTransferJob.
message UpdateTransferJobRequest {
// The name of job to update.
// Required.
string job_name = 1;
// Required. The name of job to update.
string job_name = 1 [(google.api.field_behavior) = REQUIRED];
// The ID of the Google Cloud Platform Console project that owns the job.
// Required.
string project_id = 2;
// Required. The ID of the Google Cloud Platform Console project that owns the
// job.
string project_id = 2 [(google.api.field_behavior) = REQUIRED];
// The job to update. `transferJob` is expected to specify only three fields:
// `description`, `transferSpec`, and `status`. An UpdateTransferJobRequest
// that specifies other fields will be rejected with an error
// `INVALID_ARGUMENT`.
// Required.
TransferJob transfer_job = 3;
// Required. The job to update. `transferJob` is expected to specify only
// four fields:
// [description][google.storagetransfer.v1.TransferJob.description],
// [transfer_spec][google.storagetransfer.v1.TransferJob.transfer_spec],
// [notification_config][google.storagetransfer.v1.TransferJob.notification_config],
// and [status][google.storagetransfer.v1.TransferJob.status]. An
// `UpdateTransferJobRequest` that specifies other fields are rejected with
// the error [INVALID_ARGUMENT][google.rpc.Code.INVALID_ARGUMENT]. Updating a
// job status to
// [DELETED][google.storagetransfer.v1.TransferJob.Status.DELETED] requires
// `storagetransfer.jobs.delete` permissions.
TransferJob transfer_job = 3 [(google.api.field_behavior) = REQUIRED];
// The field mask of the fields in `transferJob` that are to be updated in
// this request. Fields in `transferJob` that can be updated are:
// `description`, `transferSpec`, and `status`. To update the `transferSpec`
// of the job, a complete transfer specification has to be provided. An
// incomplete specification which misses any required fields will be rejected
// with the error `INVALID_ARGUMENT`.
// [description][google.storagetransfer.v1.TransferJob.description],
// [transfer_spec][google.storagetransfer.v1.TransferJob.transfer_spec],
// [notification_config][google.storagetransfer.v1.TransferJob.notification_config],
// and [status][google.storagetransfer.v1.TransferJob.status]. To update the
// `transfer_spec` of the job, a complete transfer specification must be
// provided. An incomplete specification missing any required fields is
// rejected with the error
// [INVALID_ARGUMENT][google.rpc.Code.INVALID_ARGUMENT].
google.protobuf.FieldMask update_transfer_job_field_mask = 4;
}
// Request passed to GetTransferJob.
message GetTransferJobRequest {
// Required.
// The job to get.
// Required.
string job_name = 1;
string job_name = 1 [(google.api.field_behavior) = REQUIRED];
// The ID of the Google Cloud Platform Console project that owns the job.
// Required.
string project_id = 2;
// Required. The ID of the Google Cloud Platform Console project that owns the
// job.
string project_id = 2 [(google.api.field_behavior) = REQUIRED];
}
// `project_id`, `job_names`, and `job_statuses` are query parameters that can
// `projectId`, `jobNames`, and `jobStatuses` are query parameters that can
// be specified when listing transfer jobs.
message ListTransferJobsRequest {
// A list of query parameters specified as JSON text in the form of
// {"project_id":"my_project_id",
// "job_names":["jobid1","jobid2",...],
// "job_statuses":["status1","status2",...]}.
// Since `job_names` and `job_statuses` support multiple values, their values
// must be specified with array notation. `project_id` is required.
// `job_names` and `job_statuses` are optional. The valid values for
// `job_statuses` are case-insensitive: `ENABLED`, `DISABLED`, and `DELETED`.
string filter = 1;
// Required. A list of query parameters specified as JSON text in the form of:
// `{"projectId":"my_project_id",
// "jobNames":["jobid1","jobid2",...],
// "jobStatuses":["status1","status2",...]}`
//
// Since `jobNames` and `jobStatuses` support multiple values, their values
// must be specified with array notation. `projectId` is required.
// `jobNames` and `jobStatuses` are optional. The valid values for
// `jobStatuses` are case-insensitive:
// [ENABLED][google.storagetransfer.v1.TransferJob.Status.ENABLED],
// [DISABLED][google.storagetransfer.v1.TransferJob.Status.DISABLED], and
// [DELETED][google.storagetransfer.v1.TransferJob.Status.DELETED].
string filter = 1 [(google.api.field_behavior) = REQUIRED];
// The list page size. The max allowed value is 256.
int32 page_size = 4;
@ -181,14 +222,22 @@ message ListTransferJobsResponse {
// Request passed to PauseTransferOperation.
message PauseTransferOperationRequest {
// The name of the transfer operation.
// Required.
string name = 1;
// Required. The name of the transfer operation.
string name = 1 [(google.api.field_behavior) = REQUIRED];
}
// Request passed to ResumeTransferOperation.
message ResumeTransferOperationRequest {
// The name of the transfer operation.
// Required.
string name = 1;
// Required. The name of the transfer operation.
string name = 1 [(google.api.field_behavior) = REQUIRED];
}
// Request passed to RunTransferJob.
message RunTransferJobRequest {
// Required. The name of the transfer job.
string job_name = 1 [(google.api.field_behavior) = REQUIRED];
// Required. The ID of the Google Cloud Platform Console project that owns the
// transfer job.
string project_id = 2 [(google.api.field_behavior) = REQUIRED];
}

View file

@ -1,4 +1,4 @@
// Copyright 2017 Google Inc.
// Copyright 2021 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@ -17,6 +17,8 @@ syntax = "proto3";
package google.storagetransfer.v1;
import "google/api/annotations.proto";
import "google/api/field_behavior.proto";
import "google/protobuf/any.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/timestamp.proto";
import "google/rpc/code.proto";
@ -29,127 +31,267 @@ option go_package = "google.golang.org/genproto/googleapis/storagetransfer/v1;st
option java_outer_classname = "TransferTypes";
option java_package = "com.google.storagetransfer.v1.proto";
option php_namespace = "Google\\Cloud\\StorageTransfer\\V1";
option ruby_package = "Google::Cloud::StorageTransfer::V1";
// Google service account
message GoogleServiceAccount {
// Required.
// Email address of the service account.
string account_email = 1;
// Unique identifier for the service account.
string subject_id = 2;
}
// AWS access key (see
// [AWS Security
// Credentials](http://docs.aws.amazon.com/general/latest/gr/aws-security-credentials.html)).
// Credentials](https://docs.aws.amazon.com/general/latest/gr/aws-security-credentials.html)).
//
// For information on our data retention policy for user credentials, see
// [User credentials](/storage-transfer/docs/data-retention#user-credentials).
message AwsAccessKey {
// AWS access key ID.
// Required.
string access_key_id = 1;
// Required. AWS access key ID.
string access_key_id = 1 [(google.api.field_behavior) = REQUIRED];
// AWS secret access key. This field is not returned in RPC responses.
// Required.
string secret_access_key = 2;
// Required. AWS secret access key. This field is not returned in RPC
// responses.
string secret_access_key = 2 [(google.api.field_behavior) = REQUIRED];
}
// Conditions that determine which objects will be transferred.
// Azure credentials
//
// For information on our data retention policy for user credentials, see
// [User credentials](/storage-transfer/docs/data-retention#user-credentials).
message AzureCredentials {
// Required. Azure shared access signature (SAS).
//
// <aside class="note">
// <strong>Note:</strong>Copying data from Azure Data Lake
// Storage (ADLS) Gen 2 is in [Preview](/products/#product-launch-stages).
// During Preview, if you are copying data from ADLS Gen 2, you must use an
// account SAS.
// </aside>
//
// For more information about SAS, see
// [Grant limited access to Azure Storage resources using shared access
// signatures
// (SAS)](https://docs.microsoft.com/en-us/azure/storage/common/storage-sas-overview).
string sas_token = 2 [(google.api.field_behavior) = REQUIRED];
}
// Conditions that determine which objects will be transferred. Applies only
// to Cloud Data Sources such as S3, Azure, and Cloud Storage.
//
// The "last modification time" refers to the time of the
// last change to the object's content or metadata specifically, this is
// the `updated` property of Cloud Storage objects, the `LastModified` field
// of S3 objects, and the `Last-Modified` header of Azure blobs.
message ObjectConditions {
// If unspecified, `minTimeElapsedSinceLastModification` takes a zero value
// and `maxTimeElapsedSinceLastModification` takes the maximum possible
// value of Duration. Objects that satisfy the object conditions
// must either have a `lastModificationTime` greater or equal to
// `NOW` - `maxTimeElapsedSinceLastModification` and less than
// `NOW` - `minTimeElapsedSinceLastModification`, or not have a
// `lastModificationTime`.
// If specified, only objects with a "last modification time" before
// `NOW` - `min_time_elapsed_since_last_modification` and objects that don't
// have a "last modification time" are transferred.
//
// For each [TransferOperation][google.storagetransfer.v1.TransferOperation]
// started by this [TransferJob][google.storagetransfer.v1.TransferJob], `NOW`
// refers to the [start_time]
// [google.storagetransfer.v1.TransferOperation.start_time] of the
// `TransferOperation`.
google.protobuf.Duration min_time_elapsed_since_last_modification = 1;
// `maxTimeElapsedSinceLastModification` is the complement to
// `minTimeElapsedSinceLastModification`.
// If specified, only objects with a "last modification time" on or after
// `NOW` - `max_time_elapsed_since_last_modification` and objects that don't
// have a "last modification time" are transferred.
//
// For each [TransferOperation][google.storagetransfer.v1.TransferOperation]
// started by this [TransferJob][google.storagetransfer.v1.TransferJob],
// `NOW` refers to the [start_time]
// [google.storagetransfer.v1.TransferOperation.start_time] of the
// `TransferOperation`.
google.protobuf.Duration max_time_elapsed_since_last_modification = 2;
// If `includePrefixes` is specified, objects that satisfy the object
// conditions must have names that start with one of the `includePrefixes`
// and that do not start with any of the `excludePrefixes`. If
// `includePrefixes` is not specified, all objects except those that have
// names starting with one of the `excludePrefixes` must satisfy the object
// conditions.
// If you specify `include_prefixes`, Storage Transfer Service uses the items
// in the `include_prefixes` array to determine which objects to include in a
// transfer. Objects must start with one of the matching `include_prefixes`
// for inclusion in the transfer. If [exclude_prefixes]
// [google.storagetransfer.v1.ObjectConditions.exclude_prefixes] is specified,
// objects must not start with any of the `exclude_prefixes` specified for
// inclusion in the transfer.
//
// Requirements:
// The following are requirements of `include_prefixes`:
//
// * Each include-prefix and exclude-prefix can contain any sequence of
// Unicode characters, of max length 1024 bytes when UTF8-encoded, and
// must not contain Carriage Return or Line Feed characters. Wildcard
// matching and regular expression matching are not supported.
// * Each include-prefix can contain any sequence of Unicode characters, to
// a max length of 1024 bytes when UTF8-encoded, and must not contain
// Carriage Return or Line Feed characters. Wildcard matching and regular
// expression matching are not supported.
//
// * Each include-prefix and exclude-prefix must omit the leading slash.
// For example, to include the `requests.gz` object in a transfer from
// `s3://my-aws-bucket/logs/y=2015/requests.gz`, specify the include
// prefix as `logs/y=2015/requests.gz`.
// * Each include-prefix must omit the leading slash. For example, to
// include the object `s3://my-aws-bucket/logs/y=2015/requests.gz`,
// specify the include-prefix as `logs/y=2015/requests.gz`.
//
// * None of the include-prefix or the exclude-prefix values can be empty,
// if specified.
// * None of the include-prefix values can be empty, if specified.
//
// * Each include-prefix must include a distinct portion of the object
// namespace, i.e., no include-prefix may be a prefix of another
// namespace. No include-prefix may be a prefix of another
// include-prefix.
//
// * Each exclude-prefix must exclude a distinct portion of the object
// namespace, i.e., no exclude-prefix may be a prefix of another
// exclude-prefix.
// The max size of `include_prefixes` is 1000.
//
// * If `includePrefixes` is specified, then each exclude-prefix must start
// with the value of a path explicitly included by `includePrefixes`.
//
// The max size of `includePrefixes` is 1000.
// For more information, see [Filtering objects from
// transfers](/storage-transfer/docs/filtering-objects-from-transfers).
repeated string include_prefixes = 3;
// `excludePrefixes` must follow the requirements described for
// `includePrefixes`.
// If you specify `exclude_prefixes`, Storage Transfer Service uses the items
// in the `exclude_prefixes` array to determine which objects to exclude from
// a transfer. Objects must not start with one of the matching
// `exclude_prefixes` for inclusion in a transfer.
//
// The max size of `excludePrefixes` is 1000.
// The following are requirements of `exclude_prefixes`:
//
// * Each exclude-prefix can contain any sequence of Unicode characters, to
// a max length of 1024 bytes when UTF8-encoded, and must not contain
// Carriage Return or Line Feed characters. Wildcard matching and regular
// expression matching are not supported.
//
// * Each exclude-prefix must omit the leading slash. For example, to
// exclude the object `s3://my-aws-bucket/logs/y=2015/requests.gz`,
// specify the exclude-prefix as `logs/y=2015/requests.gz`.
//
// * None of the exclude-prefix values can be empty, if specified.
//
// * Each exclude-prefix must exclude a distinct portion of the object
// namespace. No exclude-prefix may be a prefix of another
// exclude-prefix.
//
// * If [include_prefixes]
// [google.storagetransfer.v1.ObjectConditions.include_prefixes] is
// specified, then each exclude-prefix must start with the value of a path
// explicitly included by `include_prefixes`.
//
// The max size of `exclude_prefixes` is 1000.
//
// For more information, see [Filtering objects from
// transfers](/storage-transfer/docs/filtering-objects-from-transfers).
repeated string exclude_prefixes = 4;
// If specified, only objects with a "last modification time" on or after
// this timestamp and objects that don't have a "last modification time" are
// transferred.
//
// The `last_modified_since` and `last_modified_before` fields can be used
// together for chunked data processing. For example, consider a script that
// processes each day's worth of data at a time. For that you'd set each
// of the fields as follows:
//
// * `last_modified_since` to the start of the day
//
// * `last_modified_before` to the end of the day
google.protobuf.Timestamp last_modified_since = 5;
// If specified, only objects with a "last modification time" before this
// timestamp and objects that don't have a "last modification time" will be
// transferred.
google.protobuf.Timestamp last_modified_before = 6;
}
// In a GcsData, an object's name is the Google Cloud Storage object's name and
// its `lastModificationTime` refers to the object's updated time, which changes
// when the content or the metadata of the object is updated.
// In a GcsData resource, an object's name is the Cloud Storage object's
// name and its "last modification time" refers to the object's `updated`
// property of Cloud Storage objects, which changes when the content or the
// metadata of the object is updated.
message GcsData {
// Google Cloud Storage bucket name (see
// [Bucket Name
// Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
// Required.
string bucket_name = 1;
// Required. Cloud Storage bucket name. Must meet
// [Bucket Name Requirements](/storage/docs/naming#requirements).
string bucket_name = 1 [(google.api.field_behavior) = REQUIRED];
// Root path to transfer objects.
//
// Must be an empty string or full path name that ends with a '/'. This field
// is treated as an object prefix. As such, it should generally not begin with
// a '/'.
//
// The root path value must meet
// [Object Name Requirements](/storage/docs/naming#objectnames).
string path = 3;
}
// An AwsS3Data can be a data source, but not a data sink.
// In an AwsS3Data, an object's name is the S3 object's key name.
// An AwsS3Data resource can be a data source, but not a data sink.
// In an AwsS3Data resource, an object's name is the S3 object's key name.
message AwsS3Data {
// S3 Bucket name (see
// Required. S3 Bucket name (see
// [Creating a
// bucket](http://docs.aws.amazon.com/AmazonS3/latest/dev/create-bucket-get-location-example.html)).
// Required.
string bucket_name = 1;
// bucket](https://docs.aws.amazon.com/AmazonS3/latest/dev/create-bucket-get-location-example.html)).
string bucket_name = 1 [(google.api.field_behavior) = REQUIRED];
// AWS access key used to sign the API requests to the AWS S3 bucket.
// Permissions on the bucket must be granted to the access ID of the
// AWS access key.
// Required.
AwsAccessKey aws_access_key = 2;
// Input only. AWS access key used to sign the API requests to the AWS S3
// bucket. Permissions on the bucket must be granted to the access ID of the
// AWS access key. This field is required.
//
// For information on our data retention policy for user credentials, see
// [User credentials](/storage-transfer/docs/data-retention#user-credentials).
AwsAccessKey aws_access_key = 2 [(google.api.field_behavior) = INPUT_ONLY];
// Root path to transfer objects.
//
// Must be an empty string or full path name that ends with a '/'. This field
// is treated as an object prefix. As such, it should generally not begin with
// a '/'.
string path = 3;
// Input only. Role arn to support temporary credentials via
// AssumeRoleWithWebIdentity.
//
// When role arn is provided, transfer service will fetch temporary
// credentials for the session using AssumeRoleWithWebIdentity call for the
// provided role using the [GoogleServiceAccount] for this project.
string role_arn = 4 [(google.api.field_behavior) = INPUT_ONLY];
}
// An HttpData specifies a list of objects on the web to be transferred over
// HTTP. The information of the objects to be transferred is contained in a
// file referenced by a URL. The first line in the file must be
// "TsvHttpData-1.0", which specifies the format of the file. Subsequent lines
// specify the information of the list of objects, one object per list entry.
// Each entry has the following tab-delimited fields:
// An AzureBlobStorageData resource can be a data source, but not a data sink.
// An AzureBlobStorageData resource represents one Azure container. The storage
// account determines the [Azure
// endpoint](https://docs.microsoft.com/en-us/azure/storage/common/storage-create-storage-account#storage-account-endpoints).
// In an AzureBlobStorageData resource, a blobs's name is the [Azure Blob
// Storage blob's key
// name](https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata#blob-names).
message AzureBlobStorageData {
// Required. The name of the Azure Storage account.
string storage_account = 1 [(google.api.field_behavior) = REQUIRED];
// Required. Input only. Credentials used to authenticate API requests to
// Azure.
//
// For information on our data retention policy for user credentials, see
// [User credentials](/storage-transfer/docs/data-retention#user-credentials).
AzureCredentials azure_credentials = 2 [
(google.api.field_behavior) = REQUIRED,
(google.api.field_behavior) = INPUT_ONLY
];
// Required. The container to transfer from the Azure Storage account.
string container = 4 [(google.api.field_behavior) = REQUIRED];
// Root path to transfer objects.
//
// Must be an empty string or full path name that ends with a '/'. This field
// is treated as an object prefix. As such, it should generally not begin with
// a '/'.
string path = 5;
}
// An HttpData resource specifies a list of objects on the web to be transferred
// over HTTP. The information of the objects to be transferred is contained in
// a file referenced by a URL. The first line in the file must be
// `"TsvHttpData-1.0"`, which specifies the format of the file. Subsequent
// lines specify the information of the list of objects, one object per list
// entry. Each entry has the following tab-delimited fields:
//
// * HTTP URL - The location of the object.
// * **HTTP URL** The location of the object.
//
// * Length - The size of the object in bytes.
// * **Length** The size of the object in bytes.
//
// * MD5 - The base64-encoded MD5 hash of the object.
// * **MD5** The base64-encoded MD5 hash of the object.
//
// For an example of a valid TSV file, see
// [Transferring data from
// URLs](https://cloud.google.com/storage/transfer/create-url-list).
// URLs](https://cloud.google.com/storage-transfer/docs/create-url-list).
//
// When transferring data based on a URL list, keep the following in mind:
//
@ -161,51 +303,61 @@ message AwsS3Data {
// object fetched, the object will not be transferred.
//
// * If the specified MD5 does not match the MD5 computed from the transferred
// bytes, the object transfer will fail. For more information, see
// [Generating MD5 hashes](https://cloud.google.com/storage/transfer/#md5)
// bytes, the object transfer will fail.
//
// * Ensure that each URL you specify is publicly accessible. For
// example, in Google Cloud Storage you can
// example, in Cloud Storage you can
// [share an object publicly]
// (https://cloud.google.com/storage/docs/cloud-console#_sharingdata) and get
// a link to it.
// (/storage/docs/cloud-console#_sharingdata) and get a link to it.
//
// * Storage Transfer Service obeys `robots.txt` rules and requires the source
// HTTP server to support `Range` requests and to return a `Content-Length`
// header in each response.
//
// * [ObjectConditions](#ObjectConditions) have no effect when filtering objects
// to transfer.
// * [ObjectConditions][google.storagetransfer.v1.ObjectConditions] have no
// effect when filtering objects to transfer.
message HttpData {
// The URL that points to the file that stores the object list entries.
// This file must allow public access. Currently, only URLs with HTTP and
// HTTPS schemes are supported.
// Required.
string list_url = 1;
// Required. The URL that points to the file that stores the object list
// entries. This file must allow public access. Currently, only URLs with
// HTTP and HTTPS schemes are supported.
string list_url = 1 [(google.api.field_behavior) = REQUIRED];
}
// TransferOptions uses three boolean parameters to define the actions
// to be performed on objects in a transfer.
// TransferOptions define the actions to be performed on objects in a transfer.
message TransferOptions {
// Whether overwriting objects that already exist in the sink is allowed.
// When to overwrite objects that already exist in the sink. The default is
// that only objects that are different from the source are ovewritten. If
// true, all objects in the sink whose name matches an object in the source
// will be overwritten with the source object.
bool overwrite_objects_already_existing_in_sink = 1;
// Whether objects that exist only in the sink should be deleted. Note that
// this option and `deleteObjectsFromSourceAfterTransfer` are mutually
// exclusive.
// Whether objects that exist only in the sink should be deleted.
//
// **Note:** This option and [delete_objects_from_source_after_transfer]
// [google.storagetransfer.v1.TransferOptions.delete_objects_from_source_after_transfer]
// are mutually exclusive.
bool delete_objects_unique_in_sink = 2;
// Whether objects should be deleted from the source after they are
// transferred to the sink. Note that this option and
// `deleteObjectsUniqueInSink` are mutually exclusive.
// transferred to the sink.
//
// **Note:** This option and [delete_objects_unique_in_sink]
// [google.storagetransfer.v1.TransferOptions.delete_objects_unique_in_sink]
// are mutually exclusive.
bool delete_objects_from_source_after_transfer = 3;
}
// Configuration for running a transfer.
message TransferSpec {
// The write sink for the data.
oneof data_sink {
// A Cloud Storage data sink.
GcsData gcs_data_sink = 4;
}
// The read source of the data.
oneof data_source {
// A Google Cloud Storage data source.
// A Cloud Storage data source.
GcsData gcs_data_source = 1;
// An AWS S3 data source.
@ -213,46 +365,96 @@ message TransferSpec {
// An HTTP URL data source.
HttpData http_data_source = 3;
}
// The write sink for the data.
oneof data_sink {
// A Google Cloud Storage data sink.
GcsData gcs_data_sink = 4;
// An Azure Blob Storage data source.
AzureBlobStorageData azure_blob_storage_data_source = 8;
}
// Only objects that satisfy these object conditions are included in the set
// of data source and data sink objects. Object conditions based on
// objects' `lastModificationTime` do not exclude objects in a data sink.
// objects' "last modification time" do not exclude objects in a data sink.
ObjectConditions object_conditions = 5;
// If the option `deleteObjectsUniqueInSink` is `true`, object conditions
// based on objects' `lastModificationTime` are ignored and do not exclude
// objects in a data source or a data sink.
// If the option
// [delete_objects_unique_in_sink][google.storagetransfer.v1.TransferOptions.delete_objects_unique_in_sink]
// is `true` and time-based object conditions such as 'last modification time'
// are specified, the request fails with an
// [INVALID_ARGUMENT][google.rpc.Code.INVALID_ARGUMENT] error.
TransferOptions transfer_options = 6;
}
// Transfers can be scheduled to recur or to run just once.
message Schedule {
// The first day the recurring transfer is scheduled to run. If
// `scheduleStartDate` is in the past, the transfer will run for the first
// time on the following day.
// Required.
google.type.Date schedule_start_date = 1;
// Required. The start date of a transfer. Date boundaries are determined
// relative to UTC time. If `schedule_start_date` and
// [start_time_of_day][google.storagetransfer.v1.Schedule.start_time_of_day]
// are in the past relative to the job's creation time, the transfer starts
// the day after you schedule the transfer request.
//
// **Note:** When starting jobs at or near midnight UTC it is possible that
// a job will start later than expected. For example, if you send an outbound
// request on June 1 one millisecond prior to midnight UTC and the Storage
// Transfer Service server receives the request on June 2, then it will create
// a TransferJob with `schedule_start_date` set to June 2 and a
// `start_time_of_day` set to midnight UTC. The first scheduled
// [TransferOperation][google.storagetransfer.v1.TransferOperation] will take
// place on June 3 at midnight UTC.
google.type.Date schedule_start_date = 1
[(google.api.field_behavior) = REQUIRED];
// The last day the recurring transfer will be run. If `scheduleEndDate`
// is the same as `scheduleStartDate`, the transfer will be executed only
// once.
// The last day a transfer runs. Date boundaries are determined relative to
// UTC time. A job will run once per 24 hours within the following guidelines:
//
// * If `schedule_end_date` and
// [schedule_start_date][google.storagetransfer.v1.Schedule.schedule_start_date]
// are the same and in
// the future relative to UTC, the transfer is executed only one time.
// * If `schedule_end_date` is later than `schedule_start_date` and
// `schedule_end_date` is in the future relative to UTC, the job will
// run each day at
// [start_time_of_day][google.storagetransfer.v1.Schedule.start_time_of_day]
// through `schedule_end_date`.
google.type.Date schedule_end_date = 2;
// The time in UTC at which the transfer will be scheduled to start in a day.
// Transfers may start later than this time. If not specified, recurring and
// one-time transfers that are scheduled to run today will run immediately;
// recurring transfers that are scheduled to run on a future date will start
// at approximately midnight UTC on that date. Note that when configuring a
// transfer with the Cloud Platform Console, the transfer's start time in a
// day is specified in your local timezone.
// The time in UTC that a transfer job is scheduled to run. Transfers may
// start later than this time.
//
// If `start_time_of_day` is not specified:
//
// * One-time transfers run immediately.
// * Recurring transfers run immediately, and each day at midnight UTC,
// through
// [schedule_end_date][google.storagetransfer.v1.Schedule.schedule_end_date].
//
// If `start_time_of_day` is specified:
//
// * One-time transfers run at the specified time.
// * Recurring transfers run at the specified time each day, through
// `schedule_end_date`.
google.type.TimeOfDay start_time_of_day = 3;
// The time in UTC that no further transfer operations are scheduled. Combined
// with
// [schedule_end_date][google.storagetransfer.v1.Schedule.schedule_end_date],
// `end_time_of_day` specifies the end date and time for starting new transfer
// operations. This field must be greater than or equal to the timestamp
// corresponding to the combintation of
// [schedule_start_date][google.storagetransfer.v1.Schedule.schedule_start_date]
// and
// [start_time_of_day][google.storagetransfer.v1.Schedule.start_time_of_day],
// and is subject to the following:
//
// * If `end_time_of_day` is not set and `schedule_end_date` is set, then
// a default value of `23:59:59` is used for `end_time_of_day`.
//
// * If `end_time_of_day` is set and `schedule_end_date` is not set, then
// [INVALID_ARGUMENT][google.rpc.Code.INVALID_ARGUMENT] is returned.
google.type.TimeOfDay end_time_of_day = 4;
// Interval between the start of each scheduled TransferOperation. If
// unspecified, the default value is 24 hours. This value may not be less than
// 1 hour.
google.protobuf.Duration repeat_interval = 5;
}
// This resource represents the configuration of a transfer job that runs
@ -271,54 +473,81 @@ message TransferJob {
// This is a soft delete state. After a transfer job is set to this
// state, the job and all the transfer executions are subject to
// garbage collection.
// garbage collection. Transfer jobs become eligible for garbage collection
// 30 days after their status is set to `DELETED`.
DELETED = 3;
}
// A globally unique name assigned by Storage Transfer Service when the
// job is created. This field should be left empty in requests to create a new
// transfer job; otherwise, the requests result in an `INVALID_ARGUMENT`
// error.
// A unique name (within the transfer project) assigned when the job is
// created. If this field is empty in a CreateTransferJobRequest, Storage
// Transfer Service will assign a unique name. Otherwise, the specified name
// is used as the unique name for this job.
//
// If the specified name is in use by a job, the creation request fails with
// an [ALREADY_EXISTS][google.rpc.Code.ALREADY_EXISTS] error.
//
// This name must start with `"transferJobs/"` prefix and end with a letter or
// a number, and should be no more than 128 characters. This name must not
// start with 'transferJobs/OPI'. 'transferJobs/OPI' is a reserved prefix.
// Example:
// `"transferJobs/^(?!OPI)[A-Za-z0-9-._~]*[A-Za-z0-9]$"`
//
// Invalid job names will fail with an
// [INVALID_ARGUMENT][google.rpc.Code.INVALID_ARGUMENT] error.
string name = 1;
// A description provided by the user for the job. Its max length is 1024
// bytes when Unicode-encoded.
string description = 2;
// The ID of the Google Cloud Platform Console project that owns the job.
// The ID of the Google Cloud Platform Project that owns the job.
string project_id = 3;
// Transfer specification.
TransferSpec transfer_spec = 4;
// Schedule specification.
// Notification configuration.
NotificationConfig notification_config = 11;
// Specifies schedule for the transfer job.
// This is an optional field. When the field is not set, the job will never
// execute a transfer, unless you invoke RunTransferJob or update the job to
// have a non-empty schedule.
Schedule schedule = 5;
// Status of the job. This value MUST be specified for
// `CreateTransferJobRequests`.
//
// NOTE: The effect of the new job status takes place during a subsequent job
// run. For example, if you change the job status from `ENABLED` to
// `DISABLED`, and an operation spawned by the transfer is running, the status
// change would not affect the current operation.
// **Note:** The effect of the new job status takes place during a subsequent
// job run. For example, if you change the job status from
// [ENABLED][google.storagetransfer.v1.TransferJob.Status.ENABLED] to
// [DISABLED][google.storagetransfer.v1.TransferJob.Status.DISABLED], and an
// operation spawned by the transfer is running, the status change would not
// affect the current operation.
Status status = 6;
// This field cannot be changed by user requests.
google.protobuf.Timestamp creation_time = 7;
// Output only. The time that the transfer job was created.
google.protobuf.Timestamp creation_time = 7
[(google.api.field_behavior) = OUTPUT_ONLY];
// This field cannot be changed by user requests.
google.protobuf.Timestamp last_modification_time = 8;
// Output only. The time that the transfer job was last modified.
google.protobuf.Timestamp last_modification_time = 8
[(google.api.field_behavior) = OUTPUT_ONLY];
// This field cannot be changed by user requests.
google.protobuf.Timestamp deletion_time = 9;
// Output only. The time that the transfer job was deleted.
google.protobuf.Timestamp deletion_time = 9
[(google.api.field_behavior) = OUTPUT_ONLY];
// The name of the most recently started TransferOperation of this JobConfig.
// Present if a TransferOperation has been created for this JobConfig.
string latest_operation_name = 12;
}
// An entry describing an error that has occurred.
message ErrorLogEntry {
// A URL that refers to the target (a data source, a data sink,
// Required. A URL that refers to the target (a data source, a data sink,
// or an object) with which the error is associated.
// Required.
string url = 1;
string url = 1 [(google.api.field_behavior) = REQUIRED];
// A list of messages that carry the error details.
repeated string error_details = 3;
@ -328,13 +557,15 @@ message ErrorLogEntry {
// entries.
message ErrorSummary {
// Required.
google.rpc.Code error_code = 1;
google.rpc.Code error_code = 1 [(google.api.field_behavior) = REQUIRED];
// Count of this type of error.
// Required.
int64 error_count = 2;
// Required. Count of this type of error.
int64 error_count = 2 [(google.api.field_behavior) = REQUIRED];
// Error samples.
//
// At most 5 error log entries will be recorded for a given
// error code for a single transfer operation.
repeated ErrorLogEntry error_log_entries = 3;
}
@ -382,10 +613,12 @@ message TransferCounters {
// Bytes that are deleted from the data sink.
int64 bytes_deleted_from_sink = 12;
// Objects in the data source that failed during the transfer.
// Objects in the data source that failed to be transferred or that failed
// to be deleted after being transferred.
int64 objects_from_source_failed = 13;
// Bytes in the data source that failed during the transfer.
// Bytes in the data source that failed to be transferred or that failed to
// be deleted after being transferred.
int64 bytes_from_source_failed = 14;
// Objects that failed to be deleted from the data sink.
@ -395,6 +628,80 @@ message TransferCounters {
int64 bytes_failed_to_delete_from_sink = 16;
}
// Specification to configure notifications published to Cloud Pub/Sub.
// Notifications will be published to the customer-provided topic using the
// following `PubsubMessage.attributes`:
//
// * `"eventType"`: one of the
// [EventType][google.storagetransfer.v1.NotificationConfig.EventType] values
// * `"payloadFormat"`: one of the
// [PayloadFormat][google.storagetransfer.v1.NotificationConfig.PayloadFormat]
// values
// * `"projectId"`: the
// [project_id][google.storagetransfer.v1.TransferOperation.project_id] of the
// `TransferOperation`
// * `"transferJobName"`: the
// [transfer_job_name][google.storagetransfer.v1.TransferOperation.transfer_job_name]
// of the `TransferOperation`
// * `"transferOperationName"`: the
// [name][google.storagetransfer.v1.TransferOperation.name] of the
// `TransferOperation`
//
// The `PubsubMessage.data` will contain a
// [TransferOperation][google.storagetransfer.v1.TransferOperation] resource
// formatted according to the specified `PayloadFormat`.
message NotificationConfig {
// Enum for specifying event types for which notifications are to be
// published.
//
// Additional event types may be added in the future. Clients should either
// safely ignore unrecognized event types or explicitly specify which event
// types they are prepared to accept.
enum EventType {
// Illegal value, to avoid allowing a default.
EVENT_TYPE_UNSPECIFIED = 0;
// `TransferOperation` completed with status
// [SUCCESS][google.storagetransfer.v1.TransferOperation.Status.SUCCESS].
TRANSFER_OPERATION_SUCCESS = 1;
// `TransferOperation` completed with status
// [FAILED][google.storagetransfer.v1.TransferOperation.Status.FAILED].
TRANSFER_OPERATION_FAILED = 2;
// `TransferOperation` completed with status
// [ABORTED][google.storagetransfer.v1.TransferOperation.Status.ABORTED].
TRANSFER_OPERATION_ABORTED = 3;
}
// Enum for specifying the format of a notification message's payload.
enum PayloadFormat {
// Illegal value, to avoid allowing a default.
PAYLOAD_FORMAT_UNSPECIFIED = 0;
// No payload is included with the notification.
NONE = 1;
// `TransferOperation` is [formatted as a JSON
// response](https://developers.google.com/protocol-buffers/docs/proto3#json),
// in application/json.
JSON = 2;
}
// Required. The `Topic.name` of the Cloud Pub/Sub topic to which to publish
// notifications. Must be of the format: `projects/{project}/topics/{topic}`.
// Not matching this format will result in an
// [INVALID_ARGUMENT][google.rpc.Code.INVALID_ARGUMENT] error.
string pubsub_topic = 1 [(google.api.field_behavior) = REQUIRED];
// Event types for which a notification is desired. If empty, send
// notifications for all event types.
repeated EventType event_types = 2;
// Required. The desired format of the notification message payloads.
PayloadFormat payload_format = 3 [(google.api.field_behavior) = REQUIRED];
}
// A description of the execution of a transfer.
message TransferOperation {
// The status of a TransferOperation.
@ -416,19 +723,23 @@ message TransferOperation {
// Aborted by the user.
ABORTED = 5;
// Temporarily delayed by the system. No user action is required.
QUEUED = 6;
}
// A globally unique ID assigned by the system.
string name = 1;
// The ID of the Google Cloud Platform Console project that owns the
// operation. Required.
// The ID of the Google Cloud Platform Project that owns the operation.
string project_id = 2;
// Transfer specification.
// Required.
TransferSpec transfer_spec = 3;
// Notification configuration.
NotificationConfig notification_config = 10;
// Start time of this transfer execution.
google.protobuf.Timestamp start_time = 4;