aboutsummaryrefslogtreecommitdiff
path: root/vendor/cloud.google.com/go/storage/copy.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/cloud.google.com/go/storage/copy.go')
-rw-r--r--vendor/cloud.google.com/go/storage/copy.go29
1 files changed, 25 insertions, 4 deletions
diff --git a/vendor/cloud.google.com/go/storage/copy.go b/vendor/cloud.google.com/go/storage/copy.go
index d0a999c..98ca5bd 100644
--- a/vendor/cloud.google.com/go/storage/copy.go
+++ b/vendor/cloud.google.com/go/storage/copy.go
@@ -1,4 +1,4 @@
-// Copyright 2016 Google Inc. All Rights Reserved.
+// Copyright 2016 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -18,6 +18,7 @@ import (
"errors"
"fmt"
+ "cloud.google.com/go/internal/trace"
"golang.org/x/net/context"
raw "google.golang.org/api/storage/v1"
)
@@ -59,17 +60,32 @@ type Copier struct {
// ProgressFunc should return quickly without blocking.
ProgressFunc func(copiedBytes, totalBytes uint64)
+ // The Cloud KMS key, in the form projects/P/locations/L/keyRings/R/cryptoKeys/K,
+ // that will be used to encrypt the object. Overrides the object's KMSKeyName, if
+ // any.
+ //
+ // Providing both a DestinationKMSKeyName and a customer-supplied encryption key
+ // (via ObjectHandle.Key) on the destination object will result in an error when
+ // Run is called.
+ DestinationKMSKeyName string
+
dst, src *ObjectHandle
}
// Run performs the copy.
-func (c *Copier) Run(ctx context.Context) (*ObjectAttrs, error) {
+func (c *Copier) Run(ctx context.Context) (attrs *ObjectAttrs, err error) {
+ ctx = trace.StartSpan(ctx, "cloud.google.com/go/storage.Copier.Run")
+ defer func() { trace.EndSpan(ctx, err) }()
+
if err := c.src.validate(); err != nil {
return nil, err
}
if err := c.dst.validate(); err != nil {
return nil, err
}
+ if c.DestinationKMSKeyName != "" && c.dst.encryptionKey != nil {
+ return nil, errors.New("storage: cannot use DestinationKMSKeyName with a customer-supplied encryption key")
+ }
// Convert destination attributes to raw form, omitting the bucket.
// If the bucket is included but name or content-type aren't, the service
// returns a 400 with "Required" as the only message. Omitting the bucket
@@ -96,6 +112,9 @@ func (c *Copier) callRewrite(ctx context.Context, rawObj *raw.Object) (*raw.Rewr
if c.RewriteToken != "" {
call.RewriteToken(c.RewriteToken)
}
+ if c.DestinationKMSKeyName != "" {
+ call.DestinationKmsKeyName(c.DestinationKMSKeyName)
+ }
if err := applyConds("Copy destination", c.dst.gen, c.dst.conds, call); err != nil {
return nil, err
}
@@ -149,7 +168,10 @@ type Composer struct {
}
// Run performs the compose operation.
-func (c *Composer) Run(ctx context.Context) (*ObjectAttrs, error) {
+func (c *Composer) Run(ctx context.Context) (attrs *ObjectAttrs, err error) {
+ ctx = trace.StartSpan(ctx, "cloud.google.com/go/storage.Composer.Run")
+ defer func() { trace.EndSpan(ctx, err) }()
+
if err := c.dst.validate(); err != nil {
return nil, err
}
@@ -191,7 +213,6 @@ func (c *Composer) Run(ctx context.Context) (*ObjectAttrs, error) {
return nil, err
}
var obj *raw.Object
- var err error
setClientHeader(call.Header())
err = runWithRetry(ctx, func() error { obj, err = call.Do(); return err })
if err != nil {