blob: eca7686c4b7c9271f9417a629fa833494b6dd27f [file] [log] [blame]
// Copyright 2016 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.storagetransfer.v1;
import "google/api/annotations.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/timestamp.proto";
import "google/rpc/code.proto";
import "google/type/date.proto";
import "google/type/timeofday.proto";
option cc_enable_arenas = true;
option go_package = "google.golang.org/genproto/googleapis/storagetransfer/v1;storagetransfer";
option java_outer_classname = "TransferTypes";
option java_package = "com.google.storagetransfer.v1.proto";
// Google service account
message GoogleServiceAccount {
// Required.
string account_email = 1;
}
// AWS access key (see
// [AWS Security Credentials](http://docs.aws.amazon.com/general/latest/gr/aws-security-credentials.html)).
message AwsAccessKey {
// AWS access key ID.
// Required.
string access_key_id = 1;
// AWS secret access key. This field is not returned in RPC responses.
// Required.
string secret_access_key = 2;
}
// Conditions that determine which objects will be transferred.
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`.
google.protobuf.Duration min_time_elapsed_since_last_modification = 1;
// `maxTimeElapsedSinceLastModification` is the complement to
// `minTimeElapsedSinceLastModification`.
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.
//
// Requirements:
//
// * 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 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`.
//
// * None of the include-prefix or the exclude-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
// 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.
//
// * 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 20.
repeated string include_prefixes = 3;
// `excludePrefixes` must follow the requirements described for
// `includePrefixes`.
//
// The max size of `excludePrefixes` is 20.
repeated string exclude_prefixes = 4;
}
// 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.
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;
}
// 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.
message AwsS3Data {
// 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;
// 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;
}
// 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:
//
// * HTTP URL - The location of the object.
//
// * Length - The size of the object in bytes.
//
// * 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/#urls)
//
// When transferring data based on a URL list, keep the following in mind:
//
// * When an object located at `http(s)://hostname:port/<URL-path>` is transferred
// to a data sink, the name of the object at the data sink is
// `<hostname>/<URL-path>`.
//
// * If the specified size of an object does not match the actual size of the
// 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)
//
// * Ensure that each URL you specify is publicly accessible. For
// example, in Google Cloud Storage you can
// [share an object publicly]
// (https://cloud.google.com/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.
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;
}
// TransferOptions uses three boolean parameters to define the actions
// to be performed on objects in a transfer.
message TransferOptions {
// Whether overwriting objects that already exist in the sink is allowed.
bool overwrite_objects_already_existing_in_sink = 1;
// Whether objects that exist only in the sink should be deleted.
bool delete_objects_unique_in_sink = 2;
// Whether objects should be deleted from the source after they are
// transferred to the sink.
bool delete_objects_from_source_after_transfer = 3;
}
// Configuration for running a transfer.
message TransferSpec {
// The read source of the data.
oneof data_source {
// A Google Cloud Storage data source.
GcsData gcs_data_source = 1;
// An AWS S3 data source.
AwsS3Data aws_s3_data_source = 2;
// 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;
}
// 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.
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.
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;
// The last day the recurring transfer will be run. If `scheduleEndDate`
// is the same as `scheduleStartDate`, the transfer will be executed only
// once.
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.
google.type.TimeOfDay start_time_of_day = 3;
}
// This resource represents the configuration of a transfer job that runs
// periodically.
message TransferJob {
// The status of the transfer job.
enum Status {
// Zero is an illegal value.
STATUS_UNSPECIFIED = 0;
// New transfers will be performed based on the schedule.
ENABLED = 1;
// New transfers will not be scheduled.
DISABLED = 2;
// 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.
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.
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.
// Required.
string project_id = 3;
// Transfer specification.
// Required.
TransferSpec transfer_spec = 4;
// Schedule specification.
// Required.
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.
Status status = 6;
// This field cannot be changed by user requests.
google.protobuf.Timestamp creation_time = 7;
// This field cannot be changed by user requests.
google.protobuf.Timestamp last_modification_time = 8;
// This field cannot be changed by user requests.
google.protobuf.Timestamp deletion_time = 9;
}
// An entry describing an error that has occurred.
message ErrorLogEntry {
// 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;
// A list of messages that carry the error details.
repeated string error_details = 3;
}
// A summary of errors by error code, plus a count and sample error log
// entries.
message ErrorSummary {
// Required.
google.rpc.Code error_code = 1;
// Count of this type of error.
// Required.
int64 error_count = 2;
// Error samples.
repeated ErrorLogEntry error_log_entries = 3;
}
// A collection of counters that report the progress of a transfer operation.
message TransferCounters {
// Objects found in the data source that are scheduled to be transferred,
// which will be copied, excluded based on conditions, or skipped due to
// failures.
int64 objects_found_from_source = 1;
// Bytes found in the data source that are scheduled to be transferred,
// which will be copied, excluded based on conditions, or skipped due to
// failures.
int64 bytes_found_from_source = 2;
// Objects found only in the data sink that are scheduled to be deleted.
int64 objects_found_only_from_sink = 3;
// Bytes found only in the data sink that are scheduled to be deleted.
int64 bytes_found_only_from_sink = 4;
// Objects in the data source that are not transferred because they already
// exist in the data sink.
int64 objects_from_source_skipped_by_sync = 5;
// Bytes in the data source that are not transferred because they already
// exist in the data sink.
int64 bytes_from_source_skipped_by_sync = 6;
// Objects that are copied to the data sink.
int64 objects_copied_to_sink = 7;
// Bytes that are copied to the data sink.
int64 bytes_copied_to_sink = 8;
// Objects that are deleted from the data source.
int64 objects_deleted_from_source = 9;
// Bytes that are deleted from the data source.
int64 bytes_deleted_from_source = 10;
// Objects that are deleted from the data sink.
int64 objects_deleted_from_sink = 11;
// Bytes that are deleted from the data sink.
int64 bytes_deleted_from_sink = 12;
// Objects in the data source that failed during the transfer.
int64 objects_from_source_failed = 13;
// Bytes in the data source that failed during the transfer.
int64 bytes_from_source_failed = 14;
// Objects that failed to be deleted from the data sink.
int64 objects_failed_to_delete_from_sink = 15;
// Bytes that failed to be deleted from the data sink.
int64 bytes_failed_to_delete_from_sink = 16;
}
// A description of the execution of a transfer.
message TransferOperation {
// The status of a TransferOperation.
enum Status {
// Zero is an illegal value.
STATUS_UNSPECIFIED = 0;
// In progress.
IN_PROGRESS = 1;
// Paused.
PAUSED = 2;
// Completed successfully.
SUCCESS = 3;
// Terminated due to an unrecoverable failure.
FAILED = 4;
// Aborted by the user.
ABORTED = 5;
}
// 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.
string project_id = 2;
// Transfer specification.
// Required.
TransferSpec transfer_spec = 3;
// Start time of this transfer execution.
google.protobuf.Timestamp start_time = 4;
// End time of this transfer execution.
google.protobuf.Timestamp end_time = 5;
// Status of the transfer operation.
Status status = 6;
// Information about the progress of the transfer operation.
TransferCounters counters = 7;
// Summarizes errors encountered with sample error log entries.
repeated ErrorSummary error_breakdowns = 8;
// The name of the transfer job that triggers this transfer operation.
string transfer_job_name = 9;
}