diff --git a/google/storagetransfer/v1/BUILD.bazel b/google/storagetransfer/v1/BUILD.bazel
new file mode 100644
index 0000000000..4433f7293e
--- /dev/null
+++ b/google/storagetransfer/v1/BUILD.bazel
@@ -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
diff --git a/google/storagetransfer/v1/storagetransfer_grpc_service_config.json b/google/storagetransfer/v1/storagetransfer_grpc_service_config.json
new file mode 100644
index 0000000000..b29bd34cd4
--- /dev/null
+++ b/google/storagetransfer/v1/storagetransfer_grpc_service_config.json
@@ -0,0 +1,12 @@
+{
+ "methodConfig": [
+ {
+ "name": [
+ {
+ "service": "google.storagetransfer.v1.StorageTransferService"
+ }
+ ],
+ "timeout": "60s"
+ }
+ ]
+}
diff --git a/google/storagetransfer/v1/storagetransfer_v1.yaml b/google/storagetransfer/v1/storagetransfer_v1.yaml
new file mode 100644
index 0000000000..aa2337eb97
--- /dev/null
+++ b/google/storagetransfer/v1/storagetransfer_v1.yaml
@@ -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.
+
+
+
+ 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
diff --git a/google/storagetransfer/v1/transfer.proto b/google/storagetransfer/v1/transfer.proto
index e2a40b9235..d282628132 100644
--- a/google/storagetransfer/v1/transfer.proto
+++ b/google/storagetransfer/v1/transfer.proto
@@ -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];
}
diff --git a/google/storagetransfer/v1/transfer_types.proto b/google/storagetransfer/v1/transfer_types.proto
index 1495e42ffe..6301c57eb2 100644
--- a/google/storagetransfer/v1/transfer_types.proto
+++ b/google/storagetransfer/v1/transfer_types.proto
@@ -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).
+ //
+ //
+ //
+ // 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;