diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/version.go b/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/version.go
deleted file mode 100644
index 8a8926bd33..0000000000
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/version.go
+++ /dev/null
@@ -1,3 +0,0 @@
-package azblob
-
-const serviceLibVersion = "0.1"
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/access_conditions.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/access_conditions.go
similarity index 83%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/access_conditions.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/access_conditions.go
index c7432e41c3..25fe684221 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/access_conditions.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/access_conditions.go
@@ -4,8 +4,8 @@ import (
"time"
)
-// HTTPAccessConditions identifies standard HTTP access conditions which you optionally set.
-type HTTPAccessConditions struct {
+// ModifiedAccessConditions identifies standard HTTP access conditions which you optionally set.
+type ModifiedAccessConditions struct {
IfModifiedSince time.Time
IfUnmodifiedSince time.Time
IfMatch ETag
@@ -13,7 +13,7 @@ type HTTPAccessConditions struct {
}
// pointers is for internal infrastructure. It returns the fields as pointers.
-func (ac HTTPAccessConditions) pointers() (ims *time.Time, ius *time.Time, ime *ETag, inme *ETag) {
+func (ac ModifiedAccessConditions) pointers() (ims *time.Time, ius *time.Time, ime *ETag, inme *ETag) {
if !ac.IfModifiedSince.IsZero() {
ims = &ac.IfModifiedSince
}
@@ -31,16 +31,14 @@ func (ac HTTPAccessConditions) pointers() (ims *time.Time, ius *time.Time, ime *
// ContainerAccessConditions identifies container-specific access conditions which you optionally set.
type ContainerAccessConditions struct {
- HTTPAccessConditions
+ ModifiedAccessConditions
LeaseAccessConditions
}
// BlobAccessConditions identifies blob-specific access conditions which you optionally set.
type BlobAccessConditions struct {
- HTTPAccessConditions
+ ModifiedAccessConditions
LeaseAccessConditions
- AppendBlobAccessConditions
- PageBlobAccessConditions
}
// LeaseAccessConditions identifies lease access conditions for a container or blob which you optionally set.
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/atomicmorph.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/atomicmorph.go
similarity index 75%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/atomicmorph.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/atomicmorph.go
index 385b0458b3..9e18a79436 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/atomicmorph.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/atomicmorph.go
@@ -5,13 +5,12 @@ import "sync/atomic"
// AtomicMorpherInt32 identifies a method passed to and invoked by the AtomicMorphInt32 function.
// The AtomicMorpher callback is passed a startValue and based on this value it returns
// what the new value should be and the result that AtomicMorph should return to its caller.
-type AtomicMorpherInt32 func(startVal int32) (val int32, morphResult interface{})
+type atomicMorpherInt32 func(startVal int32) (val int32, morphResult interface{})
+
+const targetAndMorpherMustNotBeNil = "target and morpher must not be nil"
// AtomicMorph atomically morphs target in to new value (and result) as indicated bythe AtomicMorpher callback function.
-func AtomicMorphInt32(target *int32, morpher AtomicMorpherInt32) interface{} {
- if target == nil || morpher == nil {
- panic("target and morpher mut not be nil")
- }
+func atomicMorphInt32(target *int32, morpher atomicMorpherInt32) interface{} {
for {
currentVal := atomic.LoadInt32(target)
desiredVal, morphResult := morpher(currentVal)
@@ -24,13 +23,10 @@ func AtomicMorphInt32(target *int32, morpher AtomicMorpherInt32) interface{} {
// AtomicMorpherUint32 identifies a method passed to and invoked by the AtomicMorph function.
// The AtomicMorpher callback is passed a startValue and based on this value it returns
// what the new value should be and the result that AtomicMorph should return to its caller.
-type AtomicMorpherUint32 func(startVal uint32) (val uint32, morphResult interface{})
+type atomicMorpherUint32 func(startVal uint32) (val uint32, morphResult interface{})
// AtomicMorph atomically morphs target in to new value (and result) as indicated bythe AtomicMorpher callback function.
-func AtomicMorphUint32(target *uint32, morpher AtomicMorpherUint32) interface{} {
- if target == nil || morpher == nil {
- panic("target and morpher mut not be nil")
- }
+func atomicMorphUint32(target *uint32, morpher atomicMorpherUint32) interface{} {
for {
currentVal := atomic.LoadUint32(target)
desiredVal, morphResult := morpher(currentVal)
@@ -43,13 +39,10 @@ func AtomicMorphUint32(target *uint32, morpher AtomicMorpherUint32) interface{}
// AtomicMorpherUint64 identifies a method passed to and invoked by the AtomicMorphUint64 function.
// The AtomicMorpher callback is passed a startValue and based on this value it returns
// what the new value should be and the result that AtomicMorph should return to its caller.
-type AtomicMorpherInt64 func(startVal int64) (val int64, morphResult interface{})
+type atomicMorpherInt64 func(startVal int64) (val int64, morphResult interface{})
// AtomicMorph atomically morphs target in to new value (and result) as indicated bythe AtomicMorpher callback function.
-func AtomicMorphInt64(target *int64, morpher AtomicMorpherInt64) interface{} {
- if target == nil || morpher == nil {
- panic("target and morpher mut not be nil")
- }
+func atomicMorphInt64(target *int64, morpher atomicMorpherInt64) interface{} {
for {
currentVal := atomic.LoadInt64(target)
desiredVal, morphResult := morpher(currentVal)
@@ -62,13 +55,10 @@ func AtomicMorphInt64(target *int64, morpher AtomicMorpherInt64) interface{} {
// AtomicMorpherUint64 identifies a method passed to and invoked by the AtomicMorphUint64 function.
// The AtomicMorpher callback is passed a startValue and based on this value it returns
// what the new value should be and the result that AtomicMorph should return to its caller.
-type AtomicMorpherUint64 func(startVal uint64) (val uint64, morphResult interface{})
+type atomicMorpherUint64 func(startVal uint64) (val uint64, morphResult interface{})
// AtomicMorph atomically morphs target in to new value (and result) as indicated bythe AtomicMorpher callback function.
-func AtomicMorphUint64(target *uint64, morpher AtomicMorpherUint64) interface{} {
- if target == nil || morpher == nil {
- panic("target and morpher mut not be nil")
- }
+func atomicMorphUint64(target *uint64, morpher atomicMorpherUint64) interface{} {
for {
currentVal := atomic.LoadUint64(target)
desiredVal, morphResult := morpher(currentVal)
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/highlevel.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/highlevel.go
similarity index 79%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/highlevel.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/highlevel.go
index aa022826bb..46091d645f 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/highlevel.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/highlevel.go
@@ -3,7 +3,6 @@ package azblob
import (
"context"
"encoding/base64"
- "fmt"
"io"
"net/http"
@@ -12,10 +11,12 @@ import (
"sync"
"time"
+ "errors"
+
"github.com/Azure/azure-pipeline-go/pipeline"
)
-// CommonResponseHeaders returns the headers common to all blob REST API responses.
+// CommonResponse returns the headers common to all blob REST API responses.
type CommonResponse interface {
// ETag returns the value for header ETag.
ETag() ETag
@@ -42,6 +43,7 @@ type UploadToBlockBlobOptions struct {
BlockSize int64
// Progress is a function that is invoked periodically as bytes are sent to the BlockBlobURL.
+ // Note that the progress reporting is not always increasing; it can go down when retrying a request.
Progress pipeline.ProgressReceiver
// BlobHTTPHeaders indicates the HTTP headers to be associated with the blob.
@@ -60,17 +62,25 @@ type UploadToBlockBlobOptions struct {
// UploadBufferToBlockBlob uploads a buffer in blocks to a block blob.
func UploadBufferToBlockBlob(ctx context.Context, b []byte,
blockBlobURL BlockBlobURL, o UploadToBlockBlobOptions) (CommonResponse, error) {
-
- // Validate parameters and set defaults
- if o.BlockSize < 0 || o.BlockSize > BlockBlobMaxUploadBlobBytes {
- panic(fmt.Sprintf("BlockSize option must be > 0 and <= %d", BlockBlobMaxUploadBlobBytes))
- }
+ bufferSize := int64(len(b))
if o.BlockSize == 0 {
- o.BlockSize = BlockBlobMaxUploadBlobBytes // Default if unspecified
+ // If bufferSize > (BlockBlobMaxStageBlockBytes * BlockBlobMaxBlocks), then error
+ if bufferSize > BlockBlobMaxStageBlockBytes*BlockBlobMaxBlocks {
+ return nil, errors.New("Buffer is too large to upload to a block blob")
+ }
+ // If bufferSize <= BlockBlobMaxUploadBlobBytes, then Upload should be used with just 1 I/O request
+ if bufferSize <= BlockBlobMaxUploadBlobBytes {
+ o.BlockSize = BlockBlobMaxUploadBlobBytes // Default if unspecified
+ } else {
+ o.BlockSize = bufferSize / BlockBlobMaxBlocks // buffer / max blocks = block size to use all 50,000 blocks
+ if o.BlockSize < BlobDefaultDownloadBlockSize { // If the block size is smaller than 4MB, round up to 4MB
+ o.BlockSize = BlobDefaultDownloadBlockSize
+ }
+ // StageBlock will be called with blockSize blocks and a parallelism of (BufferSize / BlockSize).
+ }
}
- size := int64(len(b))
- if size <= BlockBlobMaxUploadBlobBytes {
+ if bufferSize <= BlockBlobMaxUploadBlobBytes {
// If the size can fit in 1 Upload call, do it this way
var body io.ReadSeeker = bytes.NewReader(b)
if o.Progress != nil {
@@ -79,10 +89,7 @@ func UploadBufferToBlockBlob(ctx context.Context, b []byte,
return blockBlobURL.Upload(ctx, body, o.BlobHTTPHeaders, o.Metadata, o.AccessConditions)
}
- var numBlocks = uint16(((size - 1) / o.BlockSize) + 1)
- if numBlocks > BlockBlobMaxBlocks {
- panic(fmt.Sprintf("The buffer's size is too big or the BlockSize is too small; the number of blocks must be <= %d", BlockBlobMaxBlocks))
- }
+ var numBlocks = uint16(((bufferSize - 1) / o.BlockSize) + 1)
blockIDList := make([]string, numBlocks) // Base-64 encoded block IDs
progress := int64(0)
@@ -90,7 +97,7 @@ func UploadBufferToBlockBlob(ctx context.Context, b []byte,
err := doBatchTransfer(ctx, batchTransferOptions{
operationName: "UploadBufferToBlockBlob",
- transferSize: size,
+ transferSize: bufferSize,
chunkSize: o.BlockSize,
parallelism: o.Parallelism,
operation: func(offset int64, count int64) error {
@@ -115,7 +122,7 @@ func UploadBufferToBlockBlob(ctx context.Context, b []byte,
// Block IDs are unique values to avoid issue if 2+ clients are uploading blocks
// at the same time causing PutBlockList to get a mix of blocks from all the clients.
blockIDList[blockNum] = base64.StdEncoding.EncodeToString(newUUID().bytes())
- _, err := blockBlobURL.StageBlock(ctx, blockIDList[blockNum], body, o.AccessConditions.LeaseAccessConditions)
+ _, err := blockBlobURL.StageBlock(ctx, blockIDList[blockNum], body, o.AccessConditions.LeaseAccessConditions, nil)
return err
},
})
@@ -147,10 +154,9 @@ func UploadFileToBlockBlob(ctx context.Context, file *os.File,
///////////////////////////////////////////////////////////////////////////////
-
const BlobDefaultDownloadBlockSize = int64(4 * 1024 * 1024) // 4MB
-// DownloadFromAzureFileOptions identifies options used by the DownloadAzureFileToBuffer and DownloadAzureFileToFile functions.
+// DownloadFromBlobOptions identifies options used by the DownloadBlobToBuffer and DownloadBlobToFile functions.
type DownloadFromBlobOptions struct {
// BlockSize specifies the block size to use for each parallel download; the default size is BlobDefaultDownloadBlockSize.
BlockSize int64
@@ -168,32 +174,19 @@ type DownloadFromBlobOptions struct {
RetryReaderOptionsPerBlock RetryReaderOptions
}
-// downloadAzureFileToBuffer downloads an Azure file to a buffer with parallel.
+// downloadBlobToBuffer downloads an Azure blob to a buffer with parallel.
func downloadBlobToBuffer(ctx context.Context, blobURL BlobURL, offset int64, count int64,
- ac BlobAccessConditions, b []byte, o DownloadFromBlobOptions,
- initialDownloadResponse *DownloadResponse) error {
- // Validate parameters, and set defaults.
- if o.BlockSize < 0 {
- panic("BlockSize option must be >= 0")
- }
+ b []byte, o DownloadFromBlobOptions, initialDownloadResponse *DownloadResponse) error {
if o.BlockSize == 0 {
o.BlockSize = BlobDefaultDownloadBlockSize
}
- if offset < 0 {
- panic("offset option must be >= 0")
- }
-
- if count < 0 {
- panic("count option must be >= 0")
- }
-
if count == CountToEnd { // If size not specified, calculate it
if initialDownloadResponse != nil {
count = initialDownloadResponse.ContentLength() - offset // if we have the length, use it
} else {
// If we don't have the length at all, get it
- dr, err := blobURL.Download(ctx, 0, CountToEnd, ac, false)
+ dr, err := blobURL.Download(ctx, 0, CountToEnd, o.AccessConditions, false)
if err != nil {
return err
}
@@ -201,21 +194,17 @@ func downloadBlobToBuffer(ctx context.Context, blobURL BlobURL, offset int64, co
}
}
- if int64(len(b)) < count {
- panic(fmt.Errorf("the buffer's size should be equal to or larger than the request count of bytes: %d", count))
- }
-
// Prepare and do parallel download.
progress := int64(0)
progressLock := &sync.Mutex{}
err := doBatchTransfer(ctx, batchTransferOptions{
operationName: "downloadBlobToBuffer",
- transferSize: count,
+ transferSize: count,
chunkSize: o.BlockSize,
parallelism: o.Parallelism,
operation: func(chunkStart int64, count int64) error {
- dr, err := blobURL.Download(ctx, chunkStart+ offset, count, ac, false)
+ dr, err := blobURL.Download(ctx, chunkStart+offset, count, o.AccessConditions, false)
body := dr.Body(o.RetryReaderOptionsPerBlock)
if o.Progress != nil {
rangeProgress := int64(0)
@@ -241,29 +230,24 @@ func downloadBlobToBuffer(ctx context.Context, blobURL BlobURL, offset int64, co
return nil
}
-// DownloadAzureFileToBuffer downloads an Azure file to a buffer with parallel.
+// DownloadBlobToBuffer downloads an Azure blob to a buffer with parallel.
// Offset and count are optional, pass 0 for both to download the entire blob.
func DownloadBlobToBuffer(ctx context.Context, blobURL BlobURL, offset int64, count int64,
- ac BlobAccessConditions, b []byte, o DownloadFromBlobOptions) error {
- return downloadBlobToBuffer(ctx, blobURL, offset, count, ac, b, o, nil)
+ b []byte, o DownloadFromBlobOptions) error {
+ return downloadBlobToBuffer(ctx, blobURL, offset, count, b, o, nil)
}
-// DownloadBlobToFile downloads an Azure file to a local file.
+// DownloadBlobToFile downloads an Azure blob to a local file.
// The file would be truncated if the size doesn't match.
// Offset and count are optional, pass 0 for both to download the entire blob.
func DownloadBlobToFile(ctx context.Context, blobURL BlobURL, offset int64, count int64,
- ac BlobAccessConditions, file *os.File, o DownloadFromBlobOptions) error {
- // 1. Validate parameters.
- if file == nil {
- panic("file must not be nil")
- }
-
- // 2. Calculate the size of the destination file
+ file *os.File, o DownloadFromBlobOptions) error {
+ // 1. Calculate the size of the destination file
var size int64
if count == CountToEnd {
- // Try to get Azure file's size
- props, err := blobURL.GetProperties(ctx, ac)
+ // Try to get Azure blob's size
+ props, err := blobURL.GetProperties(ctx, o.AccessConditions)
if err != nil {
return err
}
@@ -272,7 +256,7 @@ func DownloadBlobToFile(ctx context.Context, blobURL BlobURL, offset int64, coun
size = count
}
- // 3. Compare and try to resize local file's size if it doesn't match Azure file's size.
+ // 2. Compare and try to resize local file's size if it doesn't match Azure blob's size.
stat, err := file.Stat()
if err != nil {
return err
@@ -284,19 +268,18 @@ func DownloadBlobToFile(ctx context.Context, blobURL BlobURL, offset int64, coun
}
if size > 0 {
- // 4. Set mmap and call DownloadAzureFileToBuffer.
+ // 3. Set mmap and call downloadBlobToBuffer.
m, err := newMMF(file, true, 0, int(size))
if err != nil {
return err
}
defer m.unmap()
- return downloadBlobToBuffer(ctx, blobURL, offset, size, ac, m, o, nil)
+ return downloadBlobToBuffer(ctx, blobURL, offset, size, m, o, nil)
} else { // if the blob's size is 0, there is no need in downloading it
return nil
}
}
-
///////////////////////////////////////////////////////////////////////////////
// BatchTransferOptions identifies options used by doBatchTransfer.
@@ -374,7 +357,10 @@ func UploadStreamToBlockBlob(ctx context.Context, reader io.Reader, blockBlobURL
result, err := uploadStream(ctx, reader,
UploadStreamOptions{BufferSize: o.BufferSize, MaxBuffers: o.MaxBuffers},
&uploadStreamToBlockBlobOptions{b: blockBlobURL, o: o, blockIDPrefix: newUUID()})
- return result.(CommonResponse), err
+ if err != nil {
+ return nil, err
+ }
+ return result.(CommonResponse), nil
}
type uploadStreamToBlockBlobOptions struct {
@@ -390,13 +376,17 @@ func (t *uploadStreamToBlockBlobOptions) start(ctx context.Context) (interface{}
}
func (t *uploadStreamToBlockBlobOptions) chunk(ctx context.Context, num uint32, buffer []byte) error {
- if num == 0 && len(buffer) < t.o.BufferSize {
- // If whole payload fits in 1 block, don't stage it; End will upload it with 1 I/O operation
+ if num == 0 {
t.firstBlock = buffer
- return nil
+
+ // If whole payload fits in 1 block, don't stage it; End will upload it with 1 I/O operation
+ // If the payload is exactly the same size as the buffer, there may be more content coming in.
+ if len(buffer) < t.o.BufferSize {
+ return nil
+ }
}
// Else, upload a staged block...
- AtomicMorphUint32(&t.maxBlockNum, func(startVal uint32) (val uint32, morphResult interface{}) {
+ atomicMorphUint32(&t.maxBlockNum, func(startVal uint32) (val uint32, morphResult interface{}) {
// Atomically remember (in t.numBlocks) the maximum block num we've ever seen
if startVal < num {
return num, nil
@@ -404,19 +394,21 @@ func (t *uploadStreamToBlockBlobOptions) chunk(ctx context.Context, num uint32,
return startVal, nil
})
blockID := newUuidBlockID(t.blockIDPrefix).WithBlockNumber(num).ToBase64()
- _, err := t.b.StageBlock(ctx, blockID, bytes.NewReader(buffer), LeaseAccessConditions{})
+ _, err := t.b.StageBlock(ctx, blockID, bytes.NewReader(buffer), LeaseAccessConditions{}, nil)
return err
}
func (t *uploadStreamToBlockBlobOptions) end(ctx context.Context) (interface{}, error) {
- if t.maxBlockNum == 0 {
+ // If the first block had the exact same size as the buffer
+ // we would have staged it as a block thinking that there might be more data coming
+ if t.maxBlockNum == 0 && len(t.firstBlock) != t.o.BufferSize {
// If whole payload fits in 1 block (block #0), upload it with 1 I/O operation
return t.b.Upload(ctx, bytes.NewReader(t.firstBlock),
t.o.BlobHTTPHeaders, t.o.Metadata, t.o.AccessConditions)
}
// Multiple blocks staged, commit them all now
blockID := newUuidBlockID(t.blockIDPrefix)
- blockIDs := make([]string, t.maxBlockNum + 1)
+ blockIDs := make([]string, t.maxBlockNum+1)
for bn := uint32(0); bn <= t.maxBlockNum; bn++ {
blockIDs[bn] = blockID.WithBlockNumber(bn).ToBase64()
}
@@ -436,7 +428,28 @@ type UploadStreamOptions struct {
BufferSize int
}
+type firstErr struct {
+ lock sync.Mutex
+ finalError error
+}
+
+func (fe *firstErr) set(err error) {
+ fe.lock.Lock()
+ if fe.finalError == nil {
+ fe.finalError = err
+ }
+ fe.lock.Unlock()
+}
+
+func (fe *firstErr) get() (err error) {
+ fe.lock.Lock()
+ err = fe.finalError
+ fe.lock.Unlock()
+ return
+}
+
func uploadStream(ctx context.Context, reader io.Reader, o UploadStreamOptions, t iTransfer) (interface{}, error) {
+ firstErr := firstErr{}
ctx, cancel := context.WithCancel(ctx) // New context so that any failure cancels everything
defer cancel()
wg := sync.WaitGroup{} // Used to know when all outgoing messages have finished processing
@@ -463,9 +476,12 @@ func uploadStream(ctx context.Context, reader io.Reader, o UploadStreamOptions,
err := t.chunk(ctx, outgoingMsg.chunkNum, outgoingMsg.buffer)
wg.Done() // Indicate this buffer was sent
if nil != err {
+ // NOTE: finalErr could be assigned to multiple times here which is OK,
+ // some error will be returned.
+ firstErr.set(err)
cancel()
}
- incoming <- outgoingMsg.buffer // The goroutine reading from the stream can use reuse this buffer now
+ incoming <- outgoingMsg.buffer // The goroutine reading from the stream can reuse this buffer now
}
}()
}
@@ -490,7 +506,7 @@ func uploadStream(ctx context.Context, reader io.Reader, o UploadStreamOptions,
buffer = <-incoming
}
n, err := io.ReadFull(reader, buffer)
- if err != nil {
+ if err != nil { // Less than len(buffer) bytes were read
buffer = buffer[:n] // Make slice match the # of read bytes
}
if len(buffer) > 0 {
@@ -499,12 +515,21 @@ func uploadStream(ctx context.Context, reader io.Reader, o UploadStreamOptions,
outgoing <- OutgoingMsg{chunkNum: c, buffer: buffer}
}
if err != nil { // The reader is done, no more outgoing buffers
+ if err == io.EOF || err == io.ErrUnexpectedEOF {
+ err = nil // This function does NOT return an error if io.ReadFull returns io.EOF or io.ErrUnexpectedEOF
+ } else {
+ firstErr.set(err)
+ }
break
}
}
// NOTE: Don't close the incoming channel because the outgoing goroutines post buffers into it when they are done
close(outgoing) // Make all the outgoing goroutines terminate when this channel is empty
wg.Wait() // Wait for all pending outgoing messages to complete
- // After all blocks uploaded, commit them to the blob & return the result
- return t.end(ctx)
+ err := firstErr.get()
+ if err == nil {
+ // If no error, after all blocks uploaded, commit them to the blob & return the result
+ return t.end(ctx)
+ }
+ return nil, err
}
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/parsing_urls.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/parsing_urls.go
similarity index 56%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/parsing_urls.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/parsing_urls.go
index e797a59c0b..0647f23856 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/parsing_urls.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/parsing_urls.go
@@ -1,6 +1,7 @@
package azblob
import (
+ "net"
"net/url"
"strings"
)
@@ -14,13 +15,39 @@ const (
// existing URL into its parts by calling NewBlobURLParts(). You construct a URL from parts by calling URL().
// NOTE: Changing any SAS-related field requires computing a new SAS signature.
type BlobURLParts struct {
- Scheme string // Ex: "https://"
- Host string // Ex: "account.blob.core.windows.net"
- ContainerName string // "" if no container
- BlobName string // "" if no blob
- Snapshot string // "" if not a snapshot
- SAS SASQueryParameters
- UnparsedParams string
+ Scheme string // Ex: "https://"
+ Host string // Ex: "account.blob.core.windows.net", "10.132.141.33", "10.132.141.33:80"
+ IPEndpointStyleInfo IPEndpointStyleInfo
+ ContainerName string // "" if no container
+ BlobName string // "" if no blob
+ Snapshot string // "" if not a snapshot
+ SAS SASQueryParameters
+ UnparsedParams string
+}
+
+// IPEndpointStyleInfo is used for IP endpoint style URL when working with Azure storage emulator.
+// Ex: "https://10.132.141.33/accountname/containername"
+type IPEndpointStyleInfo struct {
+ AccountName string // "" if not using IP endpoint style
+}
+
+// isIPEndpointStyle checkes if URL's host is IP, in this case the storage account endpoint will be composed as:
+// http(s)://IP(:port)/storageaccount/container/...
+// As url's Host property, host could be both host or host:port
+func isIPEndpointStyle(host string) bool {
+ if host == "" {
+ return false
+ }
+ if h, _, err := net.SplitHostPort(host); err == nil {
+ host = h
+ }
+ // For IPv6, there could be case where SplitHostPort fails for cannot finding port.
+ // In this case, eliminate the '[' and ']' in the URL.
+ // For details about IPv6 URL, please refer to https://tools.ietf.org/html/rfc2732
+ if host[0] == '[' && host[len(host)-1] == ']' {
+ host = host[1 : len(host)-1]
+ }
+ return net.ParseIP(host) != nil
}
// NewBlobURLParts parses a URL initializing BlobURLParts' fields including any SAS-related & snapshot query parameters. Any other
@@ -37,10 +64,17 @@ func NewBlobURLParts(u url.URL) BlobURLParts {
if path[0] == '/' {
path = path[1:] // If path starts with a slash, remove it
}
+ if isIPEndpointStyle(up.Host) {
+ if accountEndIndex := strings.Index(path, "/"); accountEndIndex == -1 { // Slash not found; path has account name & no container name or blob
+ up.IPEndpointStyleInfo.AccountName = path
+ } else {
+ up.IPEndpointStyleInfo.AccountName = path[:accountEndIndex] // The account name is the part between the slashes
+ path = path[accountEndIndex+1:] // path refers to portion after the account name now (container & blob names)
+ }
+ }
- // Find the next slash (if it exists)
- containerEndIndex := strings.Index(path, "/")
- if containerEndIndex == -1 { // Slash not found; path has container name & no blob name
+ containerEndIndex := strings.Index(path, "/") // Find the next slash (if it exists)
+ if containerEndIndex == -1 { // Slash not found; path has container name & no blob name
up.ContainerName = path
} else {
up.ContainerName = path[:containerEndIndex] // The container name is the part between the slashes
@@ -77,6 +111,9 @@ func (values caseInsensitiveValues) Get(key string) ([]string, bool) {
// field contains the SAS, snapshot, and unparsed query parameters.
func (up BlobURLParts) URL() url.URL {
path := ""
+ if isIPEndpointStyle(up.Host) && up.IPEndpointStyleInfo.AccountName != "" {
+ path += "/" + up.IPEndpointStyleInfo.AccountName
+ }
// Concatenate container & blob names (if they exist)
if up.ContainerName != "" {
path += "/" + up.ContainerName
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/sas_service.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/sas_service.go
similarity index 95%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/sas_service.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/sas_service.go
index d0b12bc17a..67f0c9f843 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/sas_service.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/sas_service.go
@@ -8,6 +8,7 @@ import (
)
// BlobSASSignatureValues is used to generate a Shared Access Signature (SAS) for an Azure Storage container or blob.
+// For more information, see https://docs.microsoft.com/rest/api/storageservices/constructing-a-service-sas
type BlobSASSignatureValues struct {
Version string `param:"sv"` // If not specified, this defaults to SASVersion
Protocol SASProtocol `param:"spr"` // See the SASProtocol* constants
@@ -27,17 +28,13 @@ type BlobSASSignatureValues struct {
// NewSASQueryParameters uses an account's shared key credential to sign this signature values to produce
// the proper SAS query parameters.
-func (v BlobSASSignatureValues) NewSASQueryParameters(sharedKeyCredential *SharedKeyCredential) SASQueryParameters {
- if sharedKeyCredential == nil {
- panic("sharedKeyCredential can't be nil")
- }
-
+func (v BlobSASSignatureValues) NewSASQueryParameters(sharedKeyCredential *SharedKeyCredential) (SASQueryParameters, error) {
resource := "c"
if v.BlobName == "" {
// Make sure the permission characters are in the correct order
perms := &ContainerSASPermissions{}
if err := perms.Parse(v.Permissions); err != nil {
- panic(err)
+ return SASQueryParameters{}, err
}
v.Permissions = perms.String()
} else {
@@ -45,7 +42,7 @@ func (v BlobSASSignatureValues) NewSASQueryParameters(sharedKeyCredential *Share
// Make sure the permission characters are in the correct order
perms := &BlobSASPermissions{}
if err := perms.Parse(v.Permissions); err != nil {
- panic(err)
+ return SASQueryParameters{}, err
}
v.Permissions = perms.String()
}
@@ -88,7 +85,7 @@ func (v BlobSASSignatureValues) NewSASQueryParameters(sharedKeyCredential *Share
// Calculated SAS signature
signature: signature,
}
- return p
+ return p, nil
}
// getCanonicalName computes the canonical name for a container or blob resource for SAS signing.
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/service_codes_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/service_codes_blob.go
similarity index 100%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/service_codes_blob.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/service_codes_blob.go
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_append_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_append_blob.go
similarity index 83%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_append_blob.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/url_append_blob.go
index b8711f5a1c..8366e96318 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_append_blob.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_append_blob.go
@@ -45,7 +45,7 @@ func (ab AppendBlobURL) WithSnapshot(snapshot string) AppendBlobURL {
// Create creates a 0-length append blob. Call AppendBlock to append data to an append blob.
// For more information, see https://docs.microsoft.com/rest/api/storageservices/put-blob.
func (ab AppendBlobURL) Create(ctx context.Context, h BlobHTTPHeaders, metadata Metadata, ac BlobAccessConditions) (*AppendBlobCreateResponse, error) {
- ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch := ac.HTTPAccessConditions.pointers()
+ ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch := ac.ModifiedAccessConditions.pointers()
return ab.abClient.Create(ctx, 0, nil,
&h.ContentType, &h.ContentEncoding, &h.ContentLanguage, h.ContentMD5,
&h.CacheControl, metadata, ac.LeaseAccessConditions.pointers(), &h.ContentDisposition,
@@ -56,17 +56,27 @@ func (ab AppendBlobURL) Create(ctx context.Context, h BlobHTTPHeaders, metadata
// This method panics if the stream is not at position 0.
// Note that the http client closes the body stream after the request is sent to the service.
// For more information, see https://docs.microsoft.com/rest/api/storageservices/append-block.
-func (ab AppendBlobURL) AppendBlock(ctx context.Context, body io.ReadSeeker, ac BlobAccessConditions) (*AppendBlobAppendBlockResponse, error) {
- ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers()
- ifAppendPositionEqual, ifMaxSizeLessThanOrEqual := ac.AppendBlobAccessConditions.pointers()
- return ab.abClient.AppendBlock(ctx, body, validateSeekableStreamAt0AndGetCount(body), nil,
- ac.LeaseAccessConditions.pointers(),
+func (ab AppendBlobURL) AppendBlock(ctx context.Context, body io.ReadSeeker, ac AppendBlobAccessConditions, transactionalMD5 []byte) (*AppendBlobAppendBlockResponse, error) {
+ ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers()
+ ifAppendPositionEqual, ifMaxSizeLessThanOrEqual := ac.AppendPositionAccessConditions.pointers()
+ count, err := validateSeekableStreamAt0AndGetCount(body)
+ if err != nil {
+ return nil, err
+ }
+ return ab.abClient.AppendBlock(ctx, body, count, nil,
+ transactionalMD5, ac.LeaseAccessConditions.pointers(),
ifMaxSizeLessThanOrEqual, ifAppendPositionEqual,
ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil)
}
-// AppendBlobAccessConditions identifies append blob-specific access conditions which you optionally set.
type AppendBlobAccessConditions struct {
+ ModifiedAccessConditions
+ LeaseAccessConditions
+ AppendPositionAccessConditions
+}
+
+// AppendPositionAccessConditions identifies append blob-specific access conditions which you optionally set.
+type AppendPositionAccessConditions struct {
// IfAppendPositionEqual ensures that the AppendBlock operation succeeds
// only if the append position is equal to a value.
// IfAppendPositionEqual=0 means no 'IfAppendPositionEqual' header specified.
@@ -83,13 +93,7 @@ type AppendBlobAccessConditions struct {
}
// pointers is for internal infrastructure. It returns the fields as pointers.
-func (ac AppendBlobAccessConditions) pointers() (iape *int64, imsltoe *int64) {
- if ac.IfAppendPositionEqual < -1 {
- panic("IfAppendPositionEqual can't be less than -1")
- }
- if ac.IfMaxSizeLessThanOrEqual < -1 {
- panic("IfMaxSizeLessThanOrEqual can't be less than -1")
- }
+func (ac AppendPositionAccessConditions) pointers() (iape *int64, imsltoe *int64) {
var zero int64 // defaults to 0
switch ac.IfAppendPositionEqual {
case -1:
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_blob.go
similarity index 90%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_blob.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/url_blob.go
index 96d85cbfd8..41d13402c9 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_blob.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_blob.go
@@ -14,9 +14,6 @@ type BlobURL struct {
// NewBlobURL creates a BlobURL object using the specified URL and request policy pipeline.
func NewBlobURL(url url.URL, p pipeline.Pipeline) BlobURL {
- if p == nil {
- panic("p can't be nil")
- }
blobClient := newBlobClient(url, p)
return BlobURL{blobClient: blobClient}
}
@@ -34,9 +31,6 @@ func (b BlobURL) String() string {
// WithPipeline creates a new BlobURL object identical to the source but with the specified request policy pipeline.
func (b BlobURL) WithPipeline(p pipeline.Pipeline) BlobURL {
- if p == nil {
- panic("p can't be nil")
- }
return NewBlobURL(b.blobClient.URL(), p)
}
@@ -64,13 +58,14 @@ func (b BlobURL) ToPageBlobURL() PageBlobURL {
}
// DownloadBlob reads a range of bytes from a blob. The response also includes the blob's properties and metadata.
+// Passing azblob.CountToEnd (0) for count will download the blob from the offset to the end.
// For more information, see https://docs.microsoft.com/rest/api/storageservices/get-blob.
func (b BlobURL) Download(ctx context.Context, offset int64, count int64, ac BlobAccessConditions, rangeGetContentMD5 bool) (*DownloadResponse, error) {
var xRangeGetContentMD5 *bool
if rangeGetContentMD5 {
xRangeGetContentMD5 = &rangeGetContentMD5
}
- ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers()
+ ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers()
dr, err := b.blobClient.Download(ctx, nil, nil,
httpRange{offset: offset, count: count}.pointers(),
ac.LeaseAccessConditions.pointers(), xRangeGetContentMD5,
@@ -90,7 +85,7 @@ func (b BlobURL) Download(ctx context.Context, offset int64, count int64, ac Blo
// Note that deleting a blob also deletes all its snapshots.
// For more information, see https://docs.microsoft.com/rest/api/storageservices/delete-blob.
func (b BlobURL) Delete(ctx context.Context, deleteOptions DeleteSnapshotsOptionType, ac BlobAccessConditions) (*BlobDeleteResponse, error) {
- ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers()
+ ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers()
return b.blobClient.Delete(ctx, nil, nil, ac.LeaseAccessConditions.pointers(), deleteOptions,
ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil)
}
@@ -107,14 +102,14 @@ func (b BlobURL) Undelete(ctx context.Context) (*BlobUndeleteResponse, error) {
// bandwidth of the blob. A block blob's tier determines Hot/Cool/Archive storage type. This operation
// does not update the blob's ETag.
// For detailed information about block blob level tiering see https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-storage-tiers.
-func (b BlobURL) SetTier(ctx context.Context, tier AccessTierType) (*BlobSetTierResponse, error) {
- return b.blobClient.SetTier(ctx, tier, nil, nil)
+func (b BlobURL) SetTier(ctx context.Context, tier AccessTierType, lac LeaseAccessConditions) (*BlobSetTierResponse, error) {
+ return b.blobClient.SetTier(ctx, tier, nil, nil, lac.pointers())
}
// GetBlobProperties returns the blob's properties.
// For more information, see https://docs.microsoft.com/rest/api/storageservices/get-blob-properties.
func (b BlobURL) GetProperties(ctx context.Context, ac BlobAccessConditions) (*BlobGetPropertiesResponse, error) {
- ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers()
+ ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers()
return b.blobClient.GetProperties(ctx, nil, nil, ac.LeaseAccessConditions.pointers(),
ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil)
}
@@ -122,7 +117,7 @@ func (b BlobURL) GetProperties(ctx context.Context, ac BlobAccessConditions) (*B
// SetBlobHTTPHeaders changes a blob's HTTP headers.
// For more information, see https://docs.microsoft.com/rest/api/storageservices/set-blob-properties.
func (b BlobURL) SetHTTPHeaders(ctx context.Context, h BlobHTTPHeaders, ac BlobAccessConditions) (*BlobSetHTTPHeadersResponse, error) {
- ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers()
+ ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers()
return b.blobClient.SetHTTPHeaders(ctx, nil,
&h.CacheControl, &h.ContentType, h.ContentMD5, &h.ContentEncoding, &h.ContentLanguage,
ac.LeaseAccessConditions.pointers(), ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag,
@@ -132,7 +127,7 @@ func (b BlobURL) SetHTTPHeaders(ctx context.Context, h BlobHTTPHeaders, ac BlobA
// SetBlobMetadata changes a blob's metadata.
// https://docs.microsoft.com/rest/api/storageservices/set-blob-metadata.
func (b BlobURL) SetMetadata(ctx context.Context, metadata Metadata, ac BlobAccessConditions) (*BlobSetMetadataResponse, error) {
- ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers()
+ ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers()
return b.blobClient.SetMetadata(ctx, nil, metadata, ac.LeaseAccessConditions.pointers(),
ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil)
}
@@ -143,14 +138,14 @@ func (b BlobURL) CreateSnapshot(ctx context.Context, metadata Metadata, ac BlobA
// CreateSnapshot does NOT panic if the user tries to create a snapshot using a URL that already has a snapshot query parameter
// because checking this would be a performance hit for a VERY unusual path and I don't think the common case should suffer this
// performance hit.
- ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers()
+ ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers()
return b.blobClient.CreateSnapshot(ctx, nil, metadata, ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, ac.LeaseAccessConditions.pointers(), nil)
}
// AcquireLease acquires a lease on the blob for write and delete operations. The lease duration must be between
// 15 to 60 seconds, or infinite (-1).
// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-blob.
-func (b BlobURL) AcquireLease(ctx context.Context, proposedID string, duration int32, ac HTTPAccessConditions) (*BlobAcquireLeaseResponse, error) {
+func (b BlobURL) AcquireLease(ctx context.Context, proposedID string, duration int32, ac ModifiedAccessConditions) (*BlobAcquireLeaseResponse, error) {
ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.pointers()
return b.blobClient.AcquireLease(ctx, nil, &duration, &proposedID,
ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil)
@@ -158,7 +153,7 @@ func (b BlobURL) AcquireLease(ctx context.Context, proposedID string, duration i
// RenewLease renews the blob's previously-acquired lease.
// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-blob.
-func (b BlobURL) RenewLease(ctx context.Context, leaseID string, ac HTTPAccessConditions) (*BlobRenewLeaseResponse, error) {
+func (b BlobURL) RenewLease(ctx context.Context, leaseID string, ac ModifiedAccessConditions) (*BlobRenewLeaseResponse, error) {
ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.pointers()
return b.blobClient.RenewLease(ctx, leaseID, nil,
ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil)
@@ -166,7 +161,7 @@ func (b BlobURL) RenewLease(ctx context.Context, leaseID string, ac HTTPAccessCo
// ReleaseLease releases the blob's previously-acquired lease.
// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-blob.
-func (b BlobURL) ReleaseLease(ctx context.Context, leaseID string, ac HTTPAccessConditions) (*BlobReleaseLeaseResponse, error) {
+func (b BlobURL) ReleaseLease(ctx context.Context, leaseID string, ac ModifiedAccessConditions) (*BlobReleaseLeaseResponse, error) {
ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.pointers()
return b.blobClient.ReleaseLease(ctx, leaseID, nil,
ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil)
@@ -175,7 +170,7 @@ func (b BlobURL) ReleaseLease(ctx context.Context, leaseID string, ac HTTPAccess
// BreakLease breaks the blob's previously-acquired lease (if it exists). Pass the LeaseBreakDefault (-1)
// constant to break a fixed-duration lease when it expires or an infinite lease immediately.
// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-blob.
-func (b BlobURL) BreakLease(ctx context.Context, breakPeriodInSeconds int32, ac HTTPAccessConditions) (*BlobBreakLeaseResponse, error) {
+func (b BlobURL) BreakLease(ctx context.Context, breakPeriodInSeconds int32, ac ModifiedAccessConditions) (*BlobBreakLeaseResponse, error) {
ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.pointers()
return b.blobClient.BreakLease(ctx, nil, leasePeriodPointer(breakPeriodInSeconds),
ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil)
@@ -183,7 +178,7 @@ func (b BlobURL) BreakLease(ctx context.Context, breakPeriodInSeconds int32, ac
// ChangeLease changes the blob's lease ID.
// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-blob.
-func (b BlobURL) ChangeLease(ctx context.Context, leaseID string, proposedID string, ac HTTPAccessConditions) (*BlobChangeLeaseResponse, error) {
+func (b BlobURL) ChangeLease(ctx context.Context, leaseID string, proposedID string, ac ModifiedAccessConditions) (*BlobChangeLeaseResponse, error) {
ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.pointers()
return b.blobClient.ChangeLease(ctx, leaseID, proposedID,
nil, ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil)
@@ -201,10 +196,9 @@ func leasePeriodPointer(period int32) (p *int32) {
// StartCopyFromURL copies the data at the source URL to a blob.
// For more information, see https://docs.microsoft.com/rest/api/storageservices/copy-blob.
-func (b BlobURL) StartCopyFromURL(ctx context.Context, source url.URL, metadata Metadata, srcac BlobAccessConditions, dstac BlobAccessConditions) (*BlobStartCopyFromURLResponse, error) {
- srcIfModifiedSince, srcIfUnmodifiedSince, srcIfMatchETag, srcIfNoneMatchETag := srcac.HTTPAccessConditions.pointers()
- dstIfModifiedSince, dstIfUnmodifiedSince, dstIfMatchETag, dstIfNoneMatchETag := dstac.HTTPAccessConditions.pointers()
- srcLeaseID := srcac.LeaseAccessConditions.pointers()
+func (b BlobURL) StartCopyFromURL(ctx context.Context, source url.URL, metadata Metadata, srcac ModifiedAccessConditions, dstac BlobAccessConditions) (*BlobStartCopyFromURLResponse, error) {
+ srcIfModifiedSince, srcIfUnmodifiedSince, srcIfMatchETag, srcIfNoneMatchETag := srcac.pointers()
+ dstIfModifiedSince, dstIfUnmodifiedSince, dstIfMatchETag, dstIfNoneMatchETag := dstac.ModifiedAccessConditions.pointers()
dstLeaseID := dstac.LeaseAccessConditions.pointers()
return b.blobClient.StartCopyFromURL(ctx, source.String(), nil, metadata,
@@ -212,7 +206,7 @@ func (b BlobURL) StartCopyFromURL(ctx context.Context, source url.URL, metadata
srcIfMatchETag, srcIfNoneMatchETag,
dstIfModifiedSince, dstIfUnmodifiedSince,
dstIfMatchETag, dstIfNoneMatchETag,
- dstLeaseID, srcLeaseID, nil)
+ dstLeaseID, nil)
}
// AbortCopyFromURL stops a pending copy that was previously started and leaves a destination blob with 0 length and metadata.
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_block_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_block_blob.go
similarity index 88%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_block_blob.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/url_block_blob.go
index ec70285587..e1839ee46b 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_block_blob.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_block_blob.go
@@ -12,7 +12,7 @@ import (
)
const (
- // BlockBlobMaxPutBlobBytes indicates the maximum number of bytes that can be sent in a call to Upload.
+ // BlockBlobMaxUploadBlobBytes indicates the maximum number of bytes that can be sent in a call to Upload.
BlockBlobMaxUploadBlobBytes = 256 * 1024 * 1024 // 256MB
// BlockBlobMaxStageBlockBytes indicates the maximum number of bytes that can be sent in a call to StageBlock.
@@ -30,9 +30,6 @@ type BlockBlobURL struct {
// NewBlockBlobURL creates a BlockBlobURL object using the specified URL and request policy pipeline.
func NewBlockBlobURL(url url.URL, p pipeline.Pipeline) BlockBlobURL {
- if p == nil {
- panic("p can't be nil")
- }
blobClient := newBlobClient(url, p)
bbClient := newBlockBlobClient(url, p)
return BlockBlobURL{BlobURL: BlobURL{blobClient: blobClient}, bbClient: bbClient}
@@ -59,8 +56,12 @@ func (bb BlockBlobURL) WithSnapshot(snapshot string) BlockBlobURL {
// Note that the http client closes the body stream after the request is sent to the service.
// For more information, see https://docs.microsoft.com/rest/api/storageservices/put-blob.
func (bb BlockBlobURL) Upload(ctx context.Context, body io.ReadSeeker, h BlobHTTPHeaders, metadata Metadata, ac BlobAccessConditions) (*BlockBlobUploadResponse, error) {
- ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers()
- return bb.bbClient.Upload(ctx, body, validateSeekableStreamAt0AndGetCount(body), nil,
+ ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers()
+ count, err := validateSeekableStreamAt0AndGetCount(body)
+ if err != nil {
+ return nil, err
+ }
+ return bb.bbClient.Upload(ctx, body, count, nil,
&h.ContentType, &h.ContentEncoding, &h.ContentLanguage, h.ContentMD5,
&h.CacheControl, metadata, ac.LeaseAccessConditions.pointers(),
&h.ContentDisposition, ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag,
@@ -70,16 +71,19 @@ func (bb BlockBlobURL) Upload(ctx context.Context, body io.ReadSeeker, h BlobHTT
// StageBlock uploads the specified block to the block blob's "staging area" to be later committed by a call to CommitBlockList.
// Note that the http client closes the body stream after the request is sent to the service.
// For more information, see https://docs.microsoft.com/rest/api/storageservices/put-block.
-func (bb BlockBlobURL) StageBlock(ctx context.Context, base64BlockID string, body io.ReadSeeker, ac LeaseAccessConditions) (*BlockBlobStageBlockResponse, error) {
- return bb.bbClient.StageBlock(ctx, base64BlockID, validateSeekableStreamAt0AndGetCount(body), body, nil, ac.pointers(), nil)
+func (bb BlockBlobURL) StageBlock(ctx context.Context, base64BlockID string, body io.ReadSeeker, ac LeaseAccessConditions, transactionalMD5 []byte) (*BlockBlobStageBlockResponse, error) {
+ count, err := validateSeekableStreamAt0AndGetCount(body)
+ if err != nil {
+ return nil, err
+ }
+ return bb.bbClient.StageBlock(ctx, base64BlockID, count, body, transactionalMD5, nil, ac.pointers(), nil)
}
// StageBlockFromURL copies the specified block from a source URL to the block blob's "staging area" to be later committed by a call to CommitBlockList.
// If count is CountToEnd (0), then data is read from specified offset to the end.
// For more information, see https://docs.microsoft.com/en-us/rest/api/storageservices/put-block-from-url.
func (bb BlockBlobURL) StageBlockFromURL(ctx context.Context, base64BlockID string, sourceURL url.URL, offset int64, count int64, ac LeaseAccessConditions) (*BlockBlobStageBlockFromURLResponse, error) {
- sourceURLStr := sourceURL.String()
- return bb.bbClient.StageBlockFromURL(ctx, base64BlockID, 0, &sourceURLStr, httpRange{offset: offset, count: count}.pointers(), nil, nil, ac.pointers(), nil)
+ return bb.bbClient.StageBlockFromURL(ctx, base64BlockID, 0, sourceURL.String(), httpRange{offset: offset, count: count}.pointers(), nil, nil, ac.pointers(), nil)
}
// CommitBlockList writes a blob by specifying the list of block IDs that make up the blob.
@@ -90,7 +94,7 @@ func (bb BlockBlobURL) StageBlockFromURL(ctx context.Context, base64BlockID stri
// For more information, see https://docs.microsoft.com/rest/api/storageservices/put-block-list.
func (bb BlockBlobURL) CommitBlockList(ctx context.Context, base64BlockIDs []string, h BlobHTTPHeaders,
metadata Metadata, ac BlobAccessConditions) (*BlockBlobCommitBlockListResponse, error) {
- ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers()
+ ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers()
return bb.bbClient.CommitBlockList(ctx, BlockLookupList{Latest: base64BlockIDs}, nil,
&h.CacheControl, &h.ContentType, &h.ContentEncoding, &h.ContentLanguage, h.ContentMD5,
metadata, ac.LeaseAccessConditions.pointers(), &h.ContentDisposition,
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_container.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_container.go
similarity index 91%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_container.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/url_container.go
index 0fad9f0767..20806f3618 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_container.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_container.go
@@ -3,6 +3,7 @@ package azblob
import (
"bytes"
"context"
+ "errors"
"fmt"
"net/url"
@@ -16,9 +17,6 @@ type ContainerURL struct {
// NewContainerURL creates a ContainerURL object using the specified URL and request policy pipeline.
func NewContainerURL(url url.URL, p pipeline.Pipeline) ContainerURL {
- if p == nil {
- panic("p can't be nil")
- }
client := newContainerClient(url, p)
return ContainerURL{client: client}
}
@@ -89,10 +87,10 @@ func (c ContainerURL) Create(ctx context.Context, metadata Metadata, publicAcces
// For more information, see https://docs.microsoft.com/rest/api/storageservices/delete-container.
func (c ContainerURL) Delete(ctx context.Context, ac ContainerAccessConditions) (*ContainerDeleteResponse, error) {
if ac.IfMatch != ETagNone || ac.IfNoneMatch != ETagNone {
- panic("the IfMatch and IfNoneMatch access conditions must have their default values because they are ignored by the service")
+ return nil, errors.New("the IfMatch and IfNoneMatch access conditions must have their default values because they are ignored by the service")
}
- ifModifiedSince, ifUnmodifiedSince, _, _ := ac.HTTPAccessConditions.pointers()
+ ifModifiedSince, ifUnmodifiedSince, _, _ := ac.ModifiedAccessConditions.pointers()
return c.client.Delete(ctx, nil, ac.LeaseAccessConditions.pointers(),
ifModifiedSince, ifUnmodifiedSince, nil)
}
@@ -109,9 +107,9 @@ func (c ContainerURL) GetProperties(ctx context.Context, ac LeaseAccessCondition
// For more information, see https://docs.microsoft.com/rest/api/storageservices/set-container-metadata.
func (c ContainerURL) SetMetadata(ctx context.Context, metadata Metadata, ac ContainerAccessConditions) (*ContainerSetMetadataResponse, error) {
if !ac.IfUnmodifiedSince.IsZero() || ac.IfMatch != ETagNone || ac.IfNoneMatch != ETagNone {
- panic("the IfUnmodifiedSince, IfMatch, and IfNoneMatch must have their default values because they are ignored by the blob service")
+ return nil, errors.New("the IfUnmodifiedSince, IfMatch, and IfNoneMatch must have their default values because they are ignored by the blob service")
}
- ifModifiedSince, _, _, _ := ac.HTTPAccessConditions.pointers()
+ ifModifiedSince, _, _, _ := ac.ModifiedAccessConditions.pointers()
return c.client.SetMetadata(ctx, nil, ac.LeaseAccessConditions.pointers(), metadata, ifModifiedSince, nil)
}
@@ -181,16 +179,16 @@ func (p *AccessPolicyPermission) Parse(s string) error {
func (c ContainerURL) SetAccessPolicy(ctx context.Context, accessType PublicAccessType, si []SignedIdentifier,
ac ContainerAccessConditions) (*ContainerSetAccessPolicyResponse, error) {
if ac.IfMatch != ETagNone || ac.IfNoneMatch != ETagNone {
- panic("the IfMatch and IfNoneMatch access conditions must have their default values because they are ignored by the service")
+ return nil, errors.New("the IfMatch and IfNoneMatch access conditions must have their default values because they are ignored by the service")
}
- ifModifiedSince, ifUnmodifiedSince, _, _ := ac.HTTPAccessConditions.pointers()
+ ifModifiedSince, ifUnmodifiedSince, _, _ := ac.ModifiedAccessConditions.pointers()
return c.client.SetAccessPolicy(ctx, si, nil, ac.LeaseAccessConditions.pointers(),
accessType, ifModifiedSince, ifUnmodifiedSince, nil)
}
// AcquireLease acquires a lease on the container for delete operations. The lease duration must be between 15 to 60 seconds, or infinite (-1).
// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-container.
-func (c ContainerURL) AcquireLease(ctx context.Context, proposedID string, duration int32, ac HTTPAccessConditions) (*ContainerAcquireLeaseResponse, error) {
+func (c ContainerURL) AcquireLease(ctx context.Context, proposedID string, duration int32, ac ModifiedAccessConditions) (*ContainerAcquireLeaseResponse, error) {
ifModifiedSince, ifUnmodifiedSince, _, _ := ac.pointers()
return c.client.AcquireLease(ctx, nil, &duration, &proposedID,
ifModifiedSince, ifUnmodifiedSince, nil)
@@ -198,28 +196,28 @@ func (c ContainerURL) AcquireLease(ctx context.Context, proposedID string, durat
// RenewLease renews the container's previously-acquired lease.
// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-container.
-func (c ContainerURL) RenewLease(ctx context.Context, leaseID string, ac HTTPAccessConditions) (*ContainerRenewLeaseResponse, error) {
+func (c ContainerURL) RenewLease(ctx context.Context, leaseID string, ac ModifiedAccessConditions) (*ContainerRenewLeaseResponse, error) {
ifModifiedSince, ifUnmodifiedSince, _, _ := ac.pointers()
return c.client.RenewLease(ctx, leaseID, nil, ifModifiedSince, ifUnmodifiedSince, nil)
}
// ReleaseLease releases the container's previously-acquired lease.
// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-container.
-func (c ContainerURL) ReleaseLease(ctx context.Context, leaseID string, ac HTTPAccessConditions) (*ContainerReleaseLeaseResponse, error) {
+func (c ContainerURL) ReleaseLease(ctx context.Context, leaseID string, ac ModifiedAccessConditions) (*ContainerReleaseLeaseResponse, error) {
ifModifiedSince, ifUnmodifiedSince, _, _ := ac.pointers()
return c.client.ReleaseLease(ctx, leaseID, nil, ifModifiedSince, ifUnmodifiedSince, nil)
}
// BreakLease breaks the container's previously-acquired lease (if it exists).
// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-container.
-func (c ContainerURL) BreakLease(ctx context.Context, period int32, ac HTTPAccessConditions) (*ContainerBreakLeaseResponse, error) {
+func (c ContainerURL) BreakLease(ctx context.Context, period int32, ac ModifiedAccessConditions) (*ContainerBreakLeaseResponse, error) {
ifModifiedSince, ifUnmodifiedSince, _, _ := ac.pointers()
return c.client.BreakLease(ctx, nil, leasePeriodPointer(period), ifModifiedSince, ifUnmodifiedSince, nil)
}
// ChangeLease changes the container's lease ID.
// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-container.
-func (c ContainerURL) ChangeLease(ctx context.Context, leaseID string, proposedID string, ac HTTPAccessConditions) (*ContainerChangeLeaseResponse, error) {
+func (c ContainerURL) ChangeLease(ctx context.Context, leaseID string, proposedID string, ac ModifiedAccessConditions) (*ContainerChangeLeaseResponse, error) {
ifModifiedSince, ifUnmodifiedSince, _, _ := ac.pointers()
return c.client.ChangeLease(ctx, leaseID, proposedID, nil, ifModifiedSince, ifUnmodifiedSince, nil)
}
@@ -241,7 +239,7 @@ func (c ContainerURL) ListBlobsFlatSegment(ctx context.Context, marker Marker, o
// For more information, see https://docs.microsoft.com/rest/api/storageservices/list-blobs.
func (c ContainerURL) ListBlobsHierarchySegment(ctx context.Context, marker Marker, delimiter string, o ListBlobsSegmentOptions) (*ListBlobsHierarchySegmentResponse, error) {
if o.Details.Snapshots {
- panic("snapshots are not supported in this listing operation")
+ return nil, errors.New("snapshots are not supported in this listing operation")
}
prefix, include, maxResults := o.pointers()
return c.client.ListBlobHierarchySegment(ctx, delimiter, prefix, marker.val, maxResults, include, nil, nil)
@@ -264,9 +262,6 @@ func (o *ListBlobsSegmentOptions) pointers() (prefix *string, include []ListBlob
}
include = o.Details.slice()
if o.MaxResults != 0 {
- if o.MaxResults < 0 {
- panic("MaxResults must be >= 0")
- }
maxResults = &o.MaxResults
}
return
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_page_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_page_blob.go
similarity index 79%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_page_blob.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/url_page_blob.go
index fa87ef8527..953f3be6d7 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_page_blob.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_page_blob.go
@@ -26,9 +26,6 @@ type PageBlobURL struct {
// NewPageBlobURL creates a PageBlobURL object using the specified URL and request policy pipeline.
func NewPageBlobURL(url url.URL, p pipeline.Pipeline) PageBlobURL {
- if p == nil {
- panic("p can't be nil")
- }
blobClient := newBlobClient(url, p)
pbClient := newPageBlobClient(url, p)
return PageBlobURL{BlobURL: BlobURL{blobClient: blobClient}, pbClient: pbClient}
@@ -47,28 +44,28 @@ func (pb PageBlobURL) WithSnapshot(snapshot string) PageBlobURL {
return NewPageBlobURL(p.URL(), pb.blobClient.Pipeline())
}
-// CreatePageBlob creates a page blob of the specified length. Call PutPage to upload data data to a page blob.
+// Create creates a page blob of the specified length. Call PutPage to upload data data to a page blob.
// For more information, see https://docs.microsoft.com/rest/api/storageservices/put-blob.
func (pb PageBlobURL) Create(ctx context.Context, size int64, sequenceNumber int64, h BlobHTTPHeaders, metadata Metadata, ac BlobAccessConditions) (*PageBlobCreateResponse, error) {
- if sequenceNumber < 0 {
- panic("sequenceNumber must be greater than or equal to 0")
- }
- ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers()
- return pb.pbClient.Create(ctx, 0, nil,
+ ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers()
+ return pb.pbClient.Create(ctx, 0, size, nil,
&h.ContentType, &h.ContentEncoding, &h.ContentLanguage, h.ContentMD5, &h.CacheControl,
metadata, ac.LeaseAccessConditions.pointers(),
- &h.ContentDisposition, ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, &size, &sequenceNumber, nil)
+ &h.ContentDisposition, ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, &sequenceNumber, nil)
}
// UploadPages writes 1 or more pages to the page blob. The start offset and the stream size must be a multiple of 512 bytes.
// This method panics if the stream is not at position 0.
// Note that the http client closes the body stream after the request is sent to the service.
// For more information, see https://docs.microsoft.com/rest/api/storageservices/put-page.
-func (pb PageBlobURL) UploadPages(ctx context.Context, offset int64, body io.ReadSeeker, ac BlobAccessConditions) (*PageBlobUploadPagesResponse, error) {
- count := validateSeekableStreamAt0AndGetCount(body)
- ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers()
- ifSequenceNumberLessThanOrEqual, ifSequenceNumberLessThan, ifSequenceNumberEqual := ac.PageBlobAccessConditions.pointers()
- return pb.pbClient.UploadPages(ctx, body, count, nil,
+func (pb PageBlobURL) UploadPages(ctx context.Context, offset int64, body io.ReadSeeker, ac PageBlobAccessConditions, transactionalMD5 []byte) (*PageBlobUploadPagesResponse, error) {
+ count, err := validateSeekableStreamAt0AndGetCount(body)
+ if err != nil {
+ return nil, err
+ }
+ ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers()
+ ifSequenceNumberLessThanOrEqual, ifSequenceNumberLessThan, ifSequenceNumberEqual := ac.SequenceNumberAccessConditions.pointers()
+ return pb.pbClient.UploadPages(ctx, body, count, transactionalMD5, nil,
PageRange{Start: offset, End: offset + count - 1}.pointers(),
ac.LeaseAccessConditions.pointers(),
ifSequenceNumberLessThanOrEqual, ifSequenceNumberLessThan, ifSequenceNumberEqual,
@@ -77,9 +74,9 @@ func (pb PageBlobURL) UploadPages(ctx context.Context, offset int64, body io.Rea
// ClearPages frees the specified pages from the page blob.
// For more information, see https://docs.microsoft.com/rest/api/storageservices/put-page.
-func (pb PageBlobURL) ClearPages(ctx context.Context, offset int64, count int64, ac BlobAccessConditions) (*PageBlobClearPagesResponse, error) {
- ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers()
- ifSequenceNumberLessThanOrEqual, ifSequenceNumberLessThan, ifSequenceNumberEqual := ac.PageBlobAccessConditions.pointers()
+func (pb PageBlobURL) ClearPages(ctx context.Context, offset int64, count int64, ac PageBlobAccessConditions) (*PageBlobClearPagesResponse, error) {
+ ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers()
+ ifSequenceNumberLessThanOrEqual, ifSequenceNumberLessThan, ifSequenceNumberEqual := ac.SequenceNumberAccessConditions.pointers()
return pb.pbClient.ClearPages(ctx, 0, nil,
PageRange{Start: offset, End: offset + count - 1}.pointers(),
ac.LeaseAccessConditions.pointers(),
@@ -90,7 +87,7 @@ func (pb PageBlobURL) ClearPages(ctx context.Context, offset int64, count int64,
// GetPageRanges returns the list of valid page ranges for a page blob or snapshot of a page blob.
// For more information, see https://docs.microsoft.com/rest/api/storageservices/get-page-ranges.
func (pb PageBlobURL) GetPageRanges(ctx context.Context, offset int64, count int64, ac BlobAccessConditions) (*PageList, error) {
- ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers()
+ ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers()
return pb.pbClient.GetPageRanges(ctx, nil, nil,
httpRange{offset: offset, count: count}.pointers(),
ac.LeaseAccessConditions.pointers(),
@@ -100,7 +97,7 @@ func (pb PageBlobURL) GetPageRanges(ctx context.Context, offset int64, count int
// GetPageRangesDiff gets the collection of page ranges that differ between a specified snapshot and this page blob.
// For more information, see https://docs.microsoft.com/rest/api/storageservices/get-page-ranges.
func (pb PageBlobURL) GetPageRangesDiff(ctx context.Context, offset int64, count int64, prevSnapshot string, ac BlobAccessConditions) (*PageList, error) {
- ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers()
+ ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers()
return pb.pbClient.GetPageRangesDiff(ctx, nil, nil, &prevSnapshot,
httpRange{offset: offset, count: count}.pointers(),
ac.LeaseAccessConditions.pointers(),
@@ -111,10 +108,7 @@ func (pb PageBlobURL) GetPageRangesDiff(ctx context.Context, offset int64, count
// Resize resizes the page blob to the specified size (which must be a multiple of 512).
// For more information, see https://docs.microsoft.com/rest/api/storageservices/set-blob-properties.
func (pb PageBlobURL) Resize(ctx context.Context, size int64, ac BlobAccessConditions) (*PageBlobResizeResponse, error) {
- if size%PageBlobPageBytes != 0 {
- panic("Size must be a multiple of PageBlobPageBytes (512)")
- }
- ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers()
+ ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers()
return pb.pbClient.Resize(ctx, size, nil, ac.LeaseAccessConditions.pointers(),
ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil)
}
@@ -122,14 +116,11 @@ func (pb PageBlobURL) Resize(ctx context.Context, size int64, ac BlobAccessCondi
// SetSequenceNumber sets the page blob's sequence number.
func (pb PageBlobURL) UpdateSequenceNumber(ctx context.Context, action SequenceNumberActionType, sequenceNumber int64,
ac BlobAccessConditions) (*PageBlobUpdateSequenceNumberResponse, error) {
- if sequenceNumber < 0 {
- panic("sequenceNumber must be greater than or equal to 0")
- }
sn := &sequenceNumber
if action == SequenceNumberActionIncrement {
sn = nil
}
- ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch := ac.HTTPAccessConditions.pointers()
+ ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch := ac.ModifiedAccessConditions.pointers()
return pb.pbClient.UpdateSequenceNumber(ctx, action, nil,
ac.LeaseAccessConditions.pointers(), ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch,
sn, nil)
@@ -141,37 +132,28 @@ func (pb PageBlobURL) UpdateSequenceNumber(ctx context.Context, action SequenceN
// For more information, see https://docs.microsoft.com/rest/api/storageservices/incremental-copy-blob and
// https://docs.microsoft.com/en-us/azure/virtual-machines/windows/incremental-snapshots.
func (pb PageBlobURL) StartCopyIncremental(ctx context.Context, source url.URL, snapshot string, ac BlobAccessConditions) (*PageBlobCopyIncrementalResponse, error) {
- ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers()
+ ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers()
qp := source.Query()
qp.Set("snapshot", snapshot)
source.RawQuery = qp.Encode()
- return pb.pbClient.CopyIncremental(ctx, source.String(), nil, nil,
+ return pb.pbClient.CopyIncremental(ctx, source.String(), nil,
ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil)
}
func (pr PageRange) pointers() *string {
- if pr.Start < 0 {
- panic("PageRange's Start value must be greater than or equal to 0")
- }
- if pr.End <= 0 {
- panic("PageRange's End value must be greater than 0")
- }
- if pr.Start%PageBlobPageBytes != 0 {
- panic("PageRange's Start value must be a multiple of 512")
- }
- if pr.End%PageBlobPageBytes != (PageBlobPageBytes - 1) {
- panic("PageRange's End value must be 1 less than a multiple of 512")
- }
- if pr.End <= pr.Start {
- panic("PageRange's End value must be after the start")
- }
endOffset := strconv.FormatInt(int64(pr.End), 10)
asString := fmt.Sprintf("bytes=%v-%s", pr.Start, endOffset)
return &asString
}
-// PageBlobAccessConditions identifies page blob-specific access conditions which you optionally set.
type PageBlobAccessConditions struct {
+ ModifiedAccessConditions
+ LeaseAccessConditions
+ SequenceNumberAccessConditions
+}
+
+// SequenceNumberAccessConditions identifies page blob-specific access conditions which you optionally set.
+type SequenceNumberAccessConditions struct {
// IfSequenceNumberLessThan ensures that the page blob operation succeeds
// only if the blob's sequence number is less than a value.
// IfSequenceNumberLessThan=0 means no 'IfSequenceNumberLessThan' header specified.
@@ -195,17 +177,7 @@ type PageBlobAccessConditions struct {
}
// pointers is for internal infrastructure. It returns the fields as pointers.
-func (ac PageBlobAccessConditions) pointers() (snltoe *int64, snlt *int64, sne *int64) {
- if ac.IfSequenceNumberLessThan < -1 {
- panic("Ifsequencenumberlessthan can't be less than -1")
- }
- if ac.IfSequenceNumberLessThanOrEqual < -1 {
- panic("IfSequenceNumberLessThanOrEqual can't be less than -1")
- }
- if ac.IfSequenceNumberEqual < -1 {
- panic("IfSequenceNumberEqual can't be less than -1")
- }
-
+func (ac SequenceNumberAccessConditions) pointers() (snltoe *int64, snlt *int64, sne *int64) {
var zero int64 // Defaults to 0
switch ac.IfSequenceNumberLessThan {
case -1:
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_service.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_service.go
similarity index 93%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_service.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/url_service.go
index d49a20846b..06d96fde13 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_service.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_service.go
@@ -23,9 +23,6 @@ type ServiceURL struct {
// NewServiceURL creates a ServiceURL object using the specified URL and request policy pipeline.
func NewServiceURL(primaryURL url.URL, p pipeline.Pipeline) ServiceURL {
- if p == nil {
- panic("p can't be nil")
- }
client := newServiceClient(primaryURL, p)
return ServiceURL{client: client}
}
@@ -81,7 +78,7 @@ func appendToURLPath(u url.URL, name string) url.URL {
// After getting a segment, process it, and then call ListContainersFlatSegment again (passing the the
// previously-returned Marker) to get the next segment. For more information, see
// https://docs.microsoft.com/rest/api/storageservices/list-containers2.
-func (s ServiceURL) ListContainersSegment(ctx context.Context, marker Marker, o ListContainersSegmentOptions) (*ListContainersResponse, error) {
+func (s ServiceURL) ListContainersSegment(ctx context.Context, marker Marker, o ListContainersSegmentOptions) (*ListContainersSegmentResponse, error) {
prefix, include, maxResults := o.pointers()
return s.client.ListContainersSegment(ctx, prefix, marker.val, maxResults, include, nil, nil)
}
@@ -89,8 +86,8 @@ func (s ServiceURL) ListContainersSegment(ctx context.Context, marker Marker, o
// ListContainersOptions defines options available when calling ListContainers.
type ListContainersSegmentOptions struct {
Detail ListContainersDetail // No IncludeType header is produced if ""
- Prefix string // No Prefix header is produced if ""
- MaxResults int32 // 0 means unspecified
+ Prefix string // No Prefix header is produced if ""
+ MaxResults int32 // 0 means unspecified
// TODO: update swagger to generate this type?
}
@@ -99,9 +96,6 @@ func (o *ListContainersSegmentOptions) pointers() (prefix *string, include ListC
prefix = &o.Prefix
}
if o.MaxResults != 0 {
- if o.MaxResults < 0 {
- panic("MaxResults must be >= 0")
- }
maxResults = &o.MaxResults
}
include = ListContainersIncludeType(o.Detail.string())
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/version.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/version.go
new file mode 100644
index 0000000000..003fece5d4
--- /dev/null
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/version.go
@@ -0,0 +1,3 @@
+package azblob
+
+const serviceLibVersion = "0.3"
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_credential_anonymous.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_credential_anonymous.go
similarity index 100%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_credential_anonymous.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_credential_anonymous.go
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_credential_shared_key.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_credential_shared_key.go
similarity index 90%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_credential_shared_key.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_credential_shared_key.go
index 51da162779..7a63916b7e 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_credential_shared_key.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_credential_shared_key.go
@@ -6,6 +6,7 @@ import (
"crypto/hmac"
"crypto/sha256"
"encoding/base64"
+ "errors"
"net/http"
"net/url"
"sort"
@@ -17,12 +18,12 @@ import (
// NewSharedKeyCredential creates an immutable SharedKeyCredential containing the
// storage account's name and either its primary or secondary key.
-func NewSharedKeyCredential(accountName, accountKey string) *SharedKeyCredential {
+func NewSharedKeyCredential(accountName, accountKey string) (*SharedKeyCredential, error) {
bytes, err := base64.StdEncoding.DecodeString(accountKey)
if err != nil {
- panic(err)
+ return &SharedKeyCredential{}, err
}
- return &SharedKeyCredential{accountName: accountName, accountKey: bytes}
+ return &SharedKeyCredential{accountName: accountName, accountKey: bytes}, nil
}
// SharedKeyCredential contains an account's name and its primary or secondary key.
@@ -45,7 +46,10 @@ func (f *SharedKeyCredential) New(next pipeline.Policy, po *pipeline.PolicyOptio
if d := request.Header.Get(headerXmsDate); d == "" {
request.Header[headerXmsDate] = []string{time.Now().UTC().Format(http.TimeFormat)}
}
- stringToSign := f.buildStringToSign(request)
+ stringToSign, err := f.buildStringToSign(request)
+ if err != nil {
+ return nil, err
+ }
signature := f.ComputeHMACSHA256(stringToSign)
authHeader := strings.Join([]string{"SharedKey ", f.accountName, ":", signature}, "")
request.Header[headerAuthorization] = []string{authHeader}
@@ -90,7 +94,7 @@ func (f *SharedKeyCredential) ComputeHMACSHA256(message string) (base64String st
return base64.StdEncoding.EncodeToString(h.Sum(nil))
}
-func (f *SharedKeyCredential) buildStringToSign(request pipeline.Request) string {
+func (f *SharedKeyCredential) buildStringToSign(request pipeline.Request) (string, error) {
// https://docs.microsoft.com/en-us/rest/api/storageservices/authentication-for-the-azure-storage-services
headers := request.Header
contentLength := headers.Get(headerContentLength)
@@ -98,6 +102,11 @@ func (f *SharedKeyCredential) buildStringToSign(request pipeline.Request) string
contentLength = ""
}
+ canonicalizedResource, err := f.buildCanonicalizedResource(request.URL)
+ if err != nil {
+ return "", err
+ }
+
stringToSign := strings.Join([]string{
request.Method,
headers.Get(headerContentEncoding),
@@ -112,9 +121,9 @@ func (f *SharedKeyCredential) buildStringToSign(request pipeline.Request) string
headers.Get(headerIfUnmodifiedSince),
headers.Get(headerRange),
buildCanonicalizedHeader(headers),
- f.buildCanonicalizedResource(request.URL),
+ canonicalizedResource,
}, "\n")
- return stringToSign
+ return stringToSign, nil
}
func buildCanonicalizedHeader(headers http.Header) string {
@@ -146,7 +155,7 @@ func buildCanonicalizedHeader(headers http.Header) string {
return string(ch.Bytes())
}
-func (f *SharedKeyCredential) buildCanonicalizedResource(u *url.URL) string {
+func (f *SharedKeyCredential) buildCanonicalizedResource(u *url.URL) (string, error) {
// https://docs.microsoft.com/en-us/rest/api/storageservices/authentication-for-the-azure-storage-services
cr := bytes.NewBufferString("/")
cr.WriteString(f.accountName)
@@ -164,7 +173,7 @@ func (f *SharedKeyCredential) buildCanonicalizedResource(u *url.URL) string {
// params is a map[string][]string; param name is key; params values is []string
params, err := url.ParseQuery(u.RawQuery) // Returns URL decoded values
if err != nil {
- panic(err)
+ return "", errors.New("parsing query parameters must succeed, otherwise there might be serious problems in the SDK/generated code")
}
if len(params) > 0 { // There is at least 1 query parameter
@@ -183,5 +192,5 @@ func (f *SharedKeyCredential) buildCanonicalizedResource(u *url.URL) string {
cr.WriteString("\n" + paramName + ":" + strings.Join(paramValues, ","))
}
}
- return string(cr.Bytes())
+ return string(cr.Bytes()), nil
}
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_credential_token.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_credential_token.go
similarity index 76%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_credential_token.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_credential_token.go
index d7f925d398..7e78d25f15 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_credential_token.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_credential_token.go
@@ -2,6 +2,7 @@ package azblob
import (
"context"
+ "errors"
"sync/atomic"
"runtime"
@@ -11,6 +12,10 @@ import (
"github.com/Azure/azure-pipeline-go/pipeline"
)
+// TokenRefresher represents a callback method that you write; this method is called periodically
+// so you can refresh the token credential's value.
+type TokenRefresher func(credential TokenCredential) time.Duration
+
// TokenCredential represents a token credential (which is also a pipeline.Factory).
type TokenCredential interface {
Credential
@@ -20,12 +25,15 @@ type TokenCredential interface {
// NewTokenCredential creates a token credential for use with role-based access control (RBAC) access to Azure Storage
// resources. You initialize the TokenCredential with an initial token value. If you pass a non-nil value for
-// tokenRefresher, then the function you pass will be called immediately (so it can refresh and change the
-// TokenCredential's token value by calling SetToken; your tokenRefresher function must return a time.Duration
+// tokenRefresher, then the function you pass will be called immediately so it can refresh and change the
+// TokenCredential's token value by calling SetToken. Your tokenRefresher function must return a time.Duration
// indicating how long the TokenCredential object should wait before calling your tokenRefresher function again.
-func NewTokenCredential(initialToken string, tokenRefresher func(credential TokenCredential) time.Duration) TokenCredential {
+// If your tokenRefresher callback fails to refresh the token, you can return a duration of 0 to stop your
+// TokenCredential object from ever invoking tokenRefresher again. Also, oen way to deal with failing to refresh a
+// token is to cancel a context.Context object used by requests that have the TokenCredential object in their pipeline.
+func NewTokenCredential(initialToken string, tokenRefresher TokenRefresher) TokenCredential {
tc := &tokenCredential{}
- tc.SetToken(initialToken) // We dont' set it above to guarantee atomicity
+ tc.SetToken(initialToken) // We don't set it above to guarantee atomicity
if tokenRefresher == nil {
return tc // If no callback specified, return the simple tokenCredential
}
@@ -68,7 +76,7 @@ type tokenCredential struct {
// The members below are only used if the user specified a tokenRefresher callback function.
timer *time.Timer
- tokenRefresher func(c TokenCredential) time.Duration
+ tokenRefresher TokenRefresher
lock sync.Mutex
stopped bool
}
@@ -84,7 +92,7 @@ func (f *tokenCredential) SetToken(token string) { f.token.Store(token) }
// startRefresh calls refresh which immediately calls tokenRefresher
// and then starts a timer to call tokenRefresher in the future.
-func (f *tokenCredential) startRefresh(tokenRefresher func(c TokenCredential) time.Duration) {
+func (f *tokenCredential) startRefresh(tokenRefresher TokenRefresher) {
f.tokenRefresher = tokenRefresher
f.stopped = false // In case user calls StartRefresh, StopRefresh, & then StartRefresh again
f.refresh()
@@ -95,11 +103,13 @@ func (f *tokenCredential) startRefresh(tokenRefresher func(c TokenCredential) ti
// in order to refresh the token again in the future.
func (f *tokenCredential) refresh() {
d := f.tokenRefresher(f) // Invoke the user's refresh callback outside of the lock
- f.lock.Lock()
- if !f.stopped {
- f.timer = time.AfterFunc(d, f.refresh)
+ if d > 0 { // If duration is 0 or negative, refresher wants to not be called again
+ f.lock.Lock()
+ if !f.stopped {
+ f.timer = time.AfterFunc(d, f.refresh)
+ }
+ f.lock.Unlock()
}
- f.lock.Unlock()
}
// stopRefresh stops any pending timer and sets stopped field to true to prevent
@@ -118,7 +128,8 @@ func (f *tokenCredential) stopRefresh() {
func (f *tokenCredential) New(next pipeline.Policy, po *pipeline.PolicyOptions) pipeline.Policy {
return pipeline.PolicyFunc(func(ctx context.Context, request pipeline.Request) (pipeline.Response, error) {
if request.URL.Scheme != "https" {
- panic("Token credentials require a URL using the https protocol scheme.")
+ // HTTPS must be used, otherwise the tokens are at the risk of being exposed
+ return nil, errors.New("token credentials require a URL using the https protocol scheme")
}
request.Header[headerAuthorization] = []string{"Bearer " + f.Token()}
return next.Do(ctx, request)
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_mmf_unix.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_mmf_unix.go
similarity index 76%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_mmf_unix.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_mmf_unix.go
index b6c668ac64..0204924dda 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_mmf_unix.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_mmf_unix.go
@@ -1,4 +1,4 @@
-// +build linux darwin freebsd
+// +build linux darwin freebsd openbsd netbsd
package azblob
@@ -22,6 +22,6 @@ func (m *mmf) unmap() {
err := syscall.Munmap(*m)
*m = nil
if err != nil {
- panic(err)
+ panic("if we are unable to unmap the memory-mapped file, there is serious concern for memory corruption")
}
}
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_mmf_windows.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_mmf_windows.go
similarity index 90%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_mmf_windows.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_mmf_windows.go
index 1a6e83dad9..2743644e16 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_mmf_windows.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_mmf_windows.go
@@ -33,6 +33,6 @@ func (m *mmf) unmap() {
*m = mmf{}
err := syscall.UnmapViewOfFile(addr)
if err != nil {
- panic(err)
+ panic("if we are unable to unmap the memory-mapped file, there is serious concern for memory corruption")
}
}
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_pipeline.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_pipeline.go
similarity index 97%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_pipeline.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_pipeline.go
index af5fcd6c7f..f34cd0a7b9 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_pipeline.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_pipeline.go
@@ -21,10 +21,6 @@ type PipelineOptions struct {
// NewPipeline creates a Pipeline using the specified credentials and options.
func NewPipeline(c Credential, o PipelineOptions) pipeline.Pipeline {
- if c == nil {
- panic("c can't be nil")
- }
-
// Closest to API goes first; closest to the wire goes last
f := []pipeline.Factory{
NewTelemetryPolicyFactory(o.Telemetry),
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_policy_request_log.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_request_log.go
similarity index 82%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_policy_request_log.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_request_log.go
index 23d559eb7c..eb908e50ee 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_policy_request_log.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_request_log.go
@@ -109,6 +109,7 @@ func NewRequestLogPolicyFactory(o RequestLogOptions) pipeline.Factory {
})
}
+// redactSigQueryParam redacts the 'sig' query parameter in URL's raw query to protect secret.
func redactSigQueryParam(rawQuery string) (bool, string) {
rawQuery = strings.ToLower(rawQuery) // lowercase the string so we can look for ?sig= and &sig=
sigFound := strings.Contains(rawQuery, "?sig=")
@@ -135,7 +136,8 @@ func prepareRequestForLogging(request pipeline.Request) *http.Request {
req = request.Copy()
req.Request.URL.RawQuery = rawQuery
}
- return req.Request
+
+ return prepareRequestForServiceLogging(req)
}
func stack() []byte {
@@ -148,3 +150,33 @@ func stack() []byte {
buf = make([]byte, 2*len(buf))
}
}
+
+///////////////////////////////////////////////////////////////////////////////////////
+// Redact phase useful for blob and file service only. For other services,
+// this method can directly return request.Request.
+///////////////////////////////////////////////////////////////////////////////////////
+func prepareRequestForServiceLogging(request pipeline.Request) *http.Request {
+ req := request
+ if exist, key := doesHeaderExistCaseInsensitive(req.Header, xMsCopySourceHeader); exist {
+ req = request.Copy()
+ url, err := url.Parse(req.Header.Get(key))
+ if err == nil {
+ if sigFound, rawQuery := redactSigQueryParam(url.RawQuery); sigFound {
+ url.RawQuery = rawQuery
+ req.Header.Set(xMsCopySourceHeader, url.String())
+ }
+ }
+ }
+ return req.Request
+}
+
+const xMsCopySourceHeader = "x-ms-copy-source"
+
+func doesHeaderExistCaseInsensitive(header http.Header, key string) (bool, string) {
+ for keyInHeader := range header {
+ if strings.EqualFold(keyInHeader, key) {
+ return true, keyInHeader
+ }
+ }
+ return false, ""
+}
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_policy_retry.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_retry.go
similarity index 72%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_policy_retry.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_retry.go
index 4c885ea1aa..9f458496f6 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_policy_retry.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_retry.go
@@ -2,15 +2,17 @@ package azblob
import (
"context"
+ "errors"
+ "io"
+ "io/ioutil"
"math/rand"
"net"
"net/http"
"strconv"
+ "strings"
"time"
"github.com/Azure/azure-pipeline-go/pipeline"
- "io/ioutil"
- "io"
)
// RetryPolicy tells the pipeline what kind of retry policy to use. See the RetryPolicy* constants.
@@ -57,30 +59,21 @@ type RetryOptions struct {
// If RetryReadsFromSecondaryHost is "" (the default) then operations are not retried against another host.
// NOTE: Before setting this field, make sure you understand the issues around reading stale & potentially-inconsistent
// data at this webpage: https://docs.microsoft.com/en-us/azure/storage/common/storage-designing-ha-apps-with-ragrs
- RetryReadsFromSecondaryHost string // Comment this our for non-Blob SDKs
+ RetryReadsFromSecondaryHost string // Comment this our for non-Blob SDKs
}
func (o RetryOptions) retryReadsFromSecondaryHost() string {
- return o.RetryReadsFromSecondaryHost // This is for the Blob SDK only
+ return o.RetryReadsFromSecondaryHost // This is for the Blob SDK only
//return "" // This is for non-blob SDKs
}
func (o RetryOptions) defaults() RetryOptions {
- if o.Policy != RetryPolicyExponential && o.Policy != RetryPolicyFixed {
- panic("RetryPolicy must be RetryPolicyExponential or RetryPolicyFixed")
- }
- if o.MaxTries < 0 {
- panic("MaxTries must be >= 0")
- }
- if o.TryTimeout < 0 || o.RetryDelay < 0 || o.MaxRetryDelay < 0 {
- panic("TryTimeout, RetryDelay, and MaxRetryDelay must all be >= 0")
- }
- if o.RetryDelay > o.MaxRetryDelay {
- panic("RetryDelay must be <= MaxRetryDelay")
- }
- if (o.RetryDelay == 0 && o.MaxRetryDelay != 0) || (o.RetryDelay != 0 && o.MaxRetryDelay == 0) {
- panic("Both RetryDelay and MaxRetryDelay must be 0 or neither can be 0")
- }
+ // We assume the following:
+ // 1. o.Policy should either be RetryPolicyExponential or RetryPolicyFixed
+ // 2. o.MaxTries >= 0
+ // 3. o.TryTimeout, o.RetryDelay, and o.MaxRetryDelay >=0
+ // 4. o.RetryDelay <= o.MaxRetryDelay
+ // 5. Both o.RetryDelay and o.MaxRetryDelay must be 0 or neither can be 0
IfDefault := func(current *time.Duration, desired time.Duration) {
if *current == time.Duration(0) {
@@ -175,9 +168,11 @@ func NewRetryPolicyFactory(o RetryOptions) pipeline.Factory {
// For each try, seek to the beginning of the Body stream. We do this even for the 1st try because
// the stream may not be at offset 0 when we first get it and we want the same behavior for the
// 1st try as for additional tries.
- if err = requestCopy.RewindBody(); err != nil {
- panic(err)
+ err = requestCopy.RewindBody()
+ if err != nil {
+ return nil, errors.New("we must be able to seek on the Body Stream, otherwise retries would cause data corruption")
}
+
if !tryingPrimary {
requestCopy.Request.URL.Host = o.retryReadsFromSecondaryHost()
}
@@ -221,9 +216,27 @@ func NewRetryPolicyFactory(o RetryOptions) pipeline.Factory {
considerSecondary = false
action = "Retry: Secondary URL returned 404"
case err != nil:
- // NOTE: Protocol Responder returns non-nil if REST API returns invalid status code for the invoked operation
- if netErr, ok := err.(net.Error); ok && (netErr.Temporary() || netErr.Timeout()) {
- action = "Retry: net.Error and Temporary() or Timeout()"
+ // NOTE: Protocol Responder returns non-nil if REST API returns invalid status code for the invoked operation.
+ // Use ServiceCode to verify if the error is related to storage service-side,
+ // ServiceCode is set only when error related to storage service happened.
+ if stErr, ok := err.(StorageError); ok {
+ if stErr.Temporary() {
+ action = "Retry: StorageError with error service code and Temporary()"
+ } else if stErr.Response() != nil && isSuccessStatusCode(stErr.Response()) { // TODO: This is a temporarily work around, remove this after protocol layer fix the issue that net.Error is wrapped as storageError
+ action = "Retry: StorageError with success status code"
+ } else {
+ action = "NoRetry: StorageError not Temporary() and without retriable status code"
+ }
+ } else if netErr, ok := err.(net.Error); ok {
+ // Use non-retriable net.Error list, but not retriable list.
+ // As there are errors without Temporary() implementation,
+ // while need be retried, like 'connection reset by peer', 'transport connection broken' and etc.
+ // So the SDK do retry for most of the case, unless the error should not be retried for sure.
+ if !isNotRetriable(netErr) {
+ action = "Retry: net.Error and not in the non-retriable list"
+ } else {
+ action = "NoRetry: net.Error and in the non-retriable list"
+ }
} else {
action = "NoRetry: unrecognized error"
}
@@ -237,11 +250,17 @@ func NewRetryPolicyFactory(o RetryOptions) pipeline.Factory {
if err != nil {
tryCancel() // If we're returning an error, cancel this current/last per-retry timeout context
} else {
- // TODO: Right now, we've decided to leak the per-try Context until the user's Context is canceled.
- // Another option is that we wrap the last per-try context in a body and overwrite the Response's Body field with our wrapper.
+ // We wrap the last per-try context in a body and overwrite the Response's Body field with our wrapper.
// So, when the user closes the Body, the our per-try context gets closed too.
// Another option, is that the Last Policy do this wrapping for a per-retry context (not for the user's context)
- _ = tryCancel // So, for now, we don't call cancel: cancel()
+ if response == nil || response.Response() == nil {
+ // We do panic in the case response or response.Response() is nil,
+ // as for client, the response should not be nil if request is sent and the operations is executed successfully.
+ // Another option, is that execute the cancel function when response or response.Response() is nil,
+ // as in this case, current per-try has nothing to do in future.
+ return nil, errors.New("invalid state, response should not be nil when the operation is executed successfully")
+ }
+ response.Response().Body = &contextCancelReadCloser{cf: tryCancel, body: response.Response().Body}
}
break // Don't retry
}
@@ -259,6 +278,78 @@ func NewRetryPolicyFactory(o RetryOptions) pipeline.Factory {
})
}
+// contextCancelReadCloser helps to invoke context's cancelFunc properly when the ReadCloser is closed.
+type contextCancelReadCloser struct {
+ cf context.CancelFunc
+ body io.ReadCloser
+}
+
+func (rc *contextCancelReadCloser) Read(p []byte) (n int, err error) {
+ return rc.body.Read(p)
+}
+
+func (rc *contextCancelReadCloser) Close() error {
+ err := rc.body.Close()
+ if rc.cf != nil {
+ rc.cf()
+ }
+ return err
+}
+
+// isNotRetriable checks if the provided net.Error isn't retriable.
+func isNotRetriable(errToParse net.Error) bool {
+ // No error, so this is NOT retriable.
+ if errToParse == nil {
+ return true
+ }
+
+ // The error is either temporary or a timeout so it IS retriable (not not retriable).
+ if errToParse.Temporary() || errToParse.Timeout() {
+ return false
+ }
+
+ genericErr := error(errToParse)
+
+ // From here all the error are neither Temporary() nor Timeout().
+ switch err := errToParse.(type) {
+ case *net.OpError:
+ // The net.Error is also a net.OpError but the inner error is nil, so this is not retriable.
+ if err.Err == nil {
+ return true
+ }
+ genericErr = err.Err
+ }
+
+ switch genericErr.(type) {
+ case *net.AddrError, net.UnknownNetworkError, *net.DNSError, net.InvalidAddrError, *net.ParseError, *net.DNSConfigError:
+ // If the error is one of the ones listed, then it is NOT retriable.
+ return true
+ }
+
+ // If it's invalid header field name/value error thrown by http module, then it is NOT retriable.
+ // This could happen when metadata's key or value is invalid. (RoundTrip in transport.go)
+ if strings.Contains(genericErr.Error(), "invalid header field") {
+ return true
+ }
+
+ // Assume the error is retriable.
+ return false
+}
+
+var successStatusCodes = []int{http.StatusOK, http.StatusCreated, http.StatusAccepted, http.StatusNoContent, http.StatusPartialContent}
+
+func isSuccessStatusCode(resp *http.Response) bool {
+ if resp == nil {
+ return false
+ }
+ for _, i := range successStatusCodes {
+ if i == resp.StatusCode {
+ return true
+ }
+ }
+ return false
+}
+
// According to https://github.com/golang/go/wiki/CompilerOptimizations, the compiler will inline this method and hopefully optimize all calls to it away
var logf = func(format string, a ...interface{}) {}
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_policy_telemetry.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_telemetry.go
similarity index 100%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_policy_telemetry.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_telemetry.go
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_policy_unique_request_id.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_unique_request_id.go
similarity index 100%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_policy_unique_request_id.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_unique_request_id.go
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_retry_reader.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_retry_reader.go
similarity index 93%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_retry_reader.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_retry_reader.go
index 42724efa52..cb4e0e4f09 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_retry_reader.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_retry_reader.go
@@ -55,15 +55,6 @@ type retryReader struct {
// NewRetryReader creates a retry reader.
func NewRetryReader(ctx context.Context, initialResponse *http.Response,
info HTTPGetterInfo, o RetryReaderOptions, getter HTTPGetter) io.ReadCloser {
- if getter == nil {
- panic("getter must not be nil")
- }
- if info.Count < 0 {
- panic("info.Count must be >= 0")
- }
- if o.MaxRetryRequests < 0 {
- panic("o.MaxRetryRequests must be >= 0")
- }
return &retryReader{ctx: ctx, getter: getter, info: info, countWasBounded: info.Count != CountToEnd, response: initialResponse, o: o}
}
@@ -106,7 +97,7 @@ func (s *retryReader) Read(p []byte) (n int, err error) {
return n, err // All retries exhausted
}
- if netErr, ok := err.(net.Error); ok && (netErr.Timeout() || netErr.Temporary()) {
+ if _, ok := err.(net.Error); ok {
continue
// Loop around and try to get and read from new stream.
}
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_sas_account.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_sas_account.go
similarity index 95%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_sas_account.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_sas_account.go
index 8b51193f6a..860e3a2c57 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_sas_account.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_sas_account.go
@@ -2,6 +2,7 @@ package azblob
import (
"bytes"
+ "errors"
"fmt"
"strings"
"time"
@@ -22,17 +23,17 @@ type AccountSASSignatureValues struct {
// NewSASQueryParameters uses an account's shared key credential to sign this signature values to produce
// the proper SAS query parameters.
-func (v AccountSASSignatureValues) NewSASQueryParameters(sharedKeyCredential *SharedKeyCredential) SASQueryParameters {
+func (v AccountSASSignatureValues) NewSASQueryParameters(sharedKeyCredential *SharedKeyCredential) (SASQueryParameters, error) {
// https://docs.microsoft.com/en-us/rest/api/storageservices/Constructing-an-Account-SAS
if v.ExpiryTime.IsZero() || v.Permissions == "" || v.ResourceTypes == "" || v.Services == "" {
- panic("Account SAS is missing at least one of these: ExpiryTime, Permissions, Service, or ResourceType")
+ return SASQueryParameters{}, errors.New("account SAS is missing at least one of these: ExpiryTime, Permissions, Service, or ResourceType")
}
if v.Version == "" {
v.Version = SASVersion
}
perms := &AccountSASPermissions{}
if err := perms.Parse(v.Permissions); err != nil {
- panic(err)
+ return SASQueryParameters{}, err
}
v.Permissions = perms.String()
@@ -68,7 +69,7 @@ func (v AccountSASSignatureValues) NewSASQueryParameters(sharedKeyCredential *Sh
// Calculated SAS signature
signature: signature,
}
- return p
+ return p, nil
}
// The AccountSASPermissions type simplifies creating the permissions string for an Azure Storage Account SAS.
@@ -205,7 +206,7 @@ func (rt *AccountSASResourceTypes) Parse(s string) error {
switch r {
case 's':
rt.Service = true
- case 'q':
+ case 'c':
rt.Container = true
case 'o':
rt.Object = true
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_sas_query_params.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_sas_query_params.go
similarity index 100%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_sas_query_params.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_sas_query_params.go
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_service_codes_common.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_service_codes_common.go
similarity index 100%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_service_codes_common.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_service_codes_common.go
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_storage_error.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_storage_error.go
similarity index 95%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_storage_error.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_storage_error.go
index 03178b247a..e7872a8a3f 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_storage_error.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_storage_error.go
@@ -43,11 +43,14 @@ func newStorageError(cause error, response *http.Response, description string) e
response: response,
description: description,
},
+ serviceCode: ServiceCodeType(response.Header.Get("x-ms-error-code")),
}
}
// ServiceCode returns service-error information. The caller may examine these values but should not modify any of them.
-func (e *storageError) ServiceCode() ServiceCodeType { return e.serviceCode }
+func (e *storageError) ServiceCode() ServiceCodeType {
+ return e.serviceCode
+}
// Error implements the error interface's Error method to return a string representation of the error.
func (e *storageError) Error() string {
@@ -94,8 +97,6 @@ func (e *storageError) UnmarshalXML(d *xml.Decoder, start xml.StartElement) (err
break
case xml.CharData:
switch tokName {
- case "Code":
- e.serviceCode = ServiceCodeType(tt)
case "Message":
e.description = string(tt)
default:
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_util_validate.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_util_validate.go
similarity index 60%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_util_validate.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_util_validate.go
index 001a21c696..d7b2507e43 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_util_validate.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_util_validate.go
@@ -16,16 +16,10 @@ type httpRange struct {
}
func (r httpRange) pointers() *string {
- if r.offset == 0 && r.count == 0 { // Do common case first for performance
- return nil // No specified range
+ if r.offset == 0 && r.count == CountToEnd { // Do common case first for performance
+ return nil // No specified range
}
- if r.offset < 0 {
- panic("The range offset must be >= 0")
- }
- if r.count < 0 {
- panic("The range count must be >= 0")
- }
- endOffset := "" // if count == 0
+ endOffset := "" // if count == CountToEnd (0)
if r.count > 0 {
endOffset = strconv.FormatInt((r.offset+r.count)-1, 10)
}
@@ -35,27 +29,36 @@ func (r httpRange) pointers() *string {
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-func validateSeekableStreamAt0AndGetCount(body io.ReadSeeker) int64 {
+func validateSeekableStreamAt0AndGetCount(body io.ReadSeeker) (int64, error) {
if body == nil { // nil body's are "logically" seekable to 0 and are 0 bytes long
- return 0
+ return 0, nil
}
- validateSeekableStreamAt0(body)
+
+ err := validateSeekableStreamAt0(body)
+ if err != nil {
+ return 0, err
+ }
+
count, err := body.Seek(0, io.SeekEnd)
if err != nil {
- panic("failed to seek stream")
+ return 0, errors.New("body stream must be seekable")
}
+
body.Seek(0, io.SeekStart)
- return count
+ return count, nil
}
-func validateSeekableStreamAt0(body io.ReadSeeker) {
+// return an error if body is not a valid seekable stream at 0
+func validateSeekableStreamAt0(body io.ReadSeeker) error {
if body == nil { // nil body's are "logically" seekable to 0
- return
+ return nil
}
if pos, err := body.Seek(0, io.SeekCurrent); pos != 0 || err != nil {
+ // Help detect programmer error
if err != nil {
- panic(err)
+ return errors.New("body stream must be seekable")
}
- panic(errors.New("stream must be set to position 0"))
+ return errors.New("body stream must be set to position 0")
}
+ return nil
}
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_uuid.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_uuid.go
similarity index 96%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_uuid.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_uuid.go
index 1fc7e89cf2..66799f9cb6 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_uuid.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_uuid.go
@@ -21,10 +21,7 @@ type uuid [16]byte
func newUUID() (u uuid) {
u = uuid{}
// Set all bits to randomly (or pseudo-randomly) chosen values.
- _, err := rand.Read(u[:])
- if err != nil {
- panic("ran.Read failed")
- }
+ rand.Read(u[:])
u[8] = (u[8] | reservedRFC4122) & 0x7F // u.setVariant(ReservedRFC4122)
var version byte = 4
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zt_doc.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zt_doc.go
similarity index 100%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zt_doc.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zt_doc.go
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_append_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_append_blob.go
similarity index 75%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_append_blob.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_append_blob.go
index 8f3dc99349..89f29bdca2 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_append_blob.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_append_blob.go
@@ -33,20 +33,21 @@ func newAppendBlobClient(url url.URL, p pipeline.Pipeline) appendBlobClient {
// error.contentLength is the length of the request. timeout is the timeout parameter is expressed in seconds. For more
// information, see Setting
-// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the container's
-// lease is active and matches this ID. maxSize is optional conditional header. The max length in bytes permitted for
-// the append blob. If the Append Block operation would cause the blob to exceed that limit or if the blob size is
-// already greater than the value specified in this header, the request will fail with MaxBlobSizeConditionNotMet error
-// (HTTP status code 412 - Precondition Failed). appendPosition is optional conditional header, used only for the
-// Append Block operation. A number indicating the byte offset to compare. Append Block will succeed only if the append
-// position is equal to this number. If it is not, the request will fail with the AppendPositionConditionNotMet error
-// (HTTP status code 412 - Precondition Failed). ifModifiedSince is specify this header value to operate only on a blob
-// if it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate
-// only on a blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value to
-// operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a
-// matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded
-// in the analytics logs when storage analytics logging is enabled.
-func (client appendBlobClient) AppendBlock(ctx context.Context, body io.ReadSeeker, contentLength int64, timeout *int32, leaseID *string, maxSize *int64, appendPosition *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*AppendBlobAppendBlockResponse, error) {
+// Timeouts for Blob Service Operations. transactionalContentMD5 is specify the transactional md5 for the body, to
+// be validated by the service. leaseID is if specified, the operation only succeeds if the resource's lease is active
+// and matches this ID. maxSize is optional conditional header. The max length in bytes permitted for the append blob.
+// If the Append Block operation would cause the blob to exceed that limit or if the blob size is already greater than
+// the value specified in this header, the request will fail with MaxBlobSizeConditionNotMet error (HTTP status code
+// 412 - Precondition Failed). appendPosition is optional conditional header, used only for the Append Block operation.
+// A number indicating the byte offset to compare. Append Block will succeed only if the append position is equal to
+// this number. If it is not, the request will fail with the AppendPositionConditionNotMet error (HTTP status code 412
+// - Precondition Failed). ifModifiedSince is specify this header value to operate only on a blob if it has been
+// modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if
+// it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate only on blobs
+// with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value.
+// requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics
+// logs when storage analytics logging is enabled.
+func (client appendBlobClient) AppendBlock(ctx context.Context, body io.ReadSeeker, contentLength int64, timeout *int32, transactionalContentMD5 []byte, leaseID *string, maxSize *int64, appendPosition *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*AppendBlobAppendBlockResponse, error) {
if err := validate([]validation{
{targetValue: body,
constraints: []constraint{{target: "body", name: null, rule: true, chain: nil}}},
@@ -55,7 +56,7 @@ func (client appendBlobClient) AppendBlock(ctx context.Context, body io.ReadSeek
chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil {
return nil, err
}
- req, err := client.appendBlockPreparer(body, contentLength, timeout, leaseID, maxSize, appendPosition, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID)
+ req, err := client.appendBlockPreparer(body, contentLength, timeout, transactionalContentMD5, leaseID, maxSize, appendPosition, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID)
if err != nil {
return nil, err
}
@@ -67,7 +68,7 @@ func (client appendBlobClient) AppendBlock(ctx context.Context, body io.ReadSeek
}
// appendBlockPreparer prepares the AppendBlock request.
-func (client appendBlobClient) appendBlockPreparer(body io.ReadSeeker, contentLength int64, timeout *int32, leaseID *string, maxSize *int64, appendPosition *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
+func (client appendBlobClient) appendBlockPreparer(body io.ReadSeeker, contentLength int64, timeout *int32, transactionalContentMD5 []byte, leaseID *string, maxSize *int64, appendPosition *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
req, err := pipeline.NewRequest("PUT", client.url, body)
if err != nil {
return req, pipeline.NewError(err, "failed to create request")
@@ -79,6 +80,9 @@ func (client appendBlobClient) appendBlockPreparer(body io.ReadSeeker, contentLe
params.Set("comp", "appendblock")
req.URL.RawQuery = params.Encode()
req.Header.Set("Content-Length", strconv.FormatInt(contentLength, 10))
+ if transactionalContentMD5 != nil {
+ req.Header.Set("Content-MD5", base64.StdEncoding.EncodeToString(transactionalContentMD5))
+ }
if leaseID != nil {
req.Header.Set("x-ms-lease-id", *leaseID)
}
@@ -94,8 +98,8 @@ func (client appendBlobClient) appendBlockPreparer(body io.ReadSeeker, contentLe
if ifUnmodifiedSince != nil {
req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123))
}
- if ifMatches != nil {
- req.Header.Set("If-Match", string(*ifMatches))
+ if ifMatch != nil {
+ req.Header.Set("If-Match", string(*ifMatch))
}
if ifNoneMatch != nil {
req.Header.Set("If-None-Match", string(*ifNoneMatch))
@@ -135,25 +139,22 @@ func (client appendBlobClient) appendBlockResponder(resp pipeline.Response) (pip
// destination blob. If one or more name-value pairs are specified, the destination blob is created with the specified
// metadata, and metadata is not copied from the source blob or file. Note that beginning with version 2009-09-19,
// metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing Containers, Blobs, and
-// Metadata for more information. leaseID is if specified, the operation only succeeds if the container's lease is
+// Metadata for more information. leaseID is if specified, the operation only succeeds if the resource's lease is
// active and matches this ID. blobContentDisposition is optional. Sets the blob's Content-Disposition header.
// ifModifiedSince is specify this header value to operate only on a blob if it has been modified since the specified
// date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if it has not been modified
-// since the specified date/time. ifMatches is specify an ETag value to operate only on blobs with a matching value.
+// since the specified date/time. ifMatch is specify an ETag value to operate only on blobs with a matching value.
// ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. requestID is provides a
// client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage
// analytics logging is enabled.
-func (client appendBlobClient) Create(ctx context.Context, contentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*AppendBlobCreateResponse, error) {
+func (client appendBlobClient) Create(ctx context.Context, contentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*AppendBlobCreateResponse, error) {
if err := validate([]validation{
{targetValue: timeout,
constraints: []constraint{{target: "timeout", name: null, rule: false,
- chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}},
- {targetValue: metadata,
- constraints: []constraint{{target: "metadata", name: null, rule: false,
- chain: []constraint{{target: "metadata", name: pattern, rule: `^[a-zA-Z]+$`, chain: nil}}}}}}); err != nil {
+ chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil {
return nil, err
}
- req, err := client.createPreparer(contentLength, timeout, blobContentType, blobContentEncoding, blobContentLanguage, blobContentMD5, blobCacheControl, metadata, leaseID, blobContentDisposition, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID)
+ req, err := client.createPreparer(contentLength, timeout, blobContentType, blobContentEncoding, blobContentLanguage, blobContentMD5, blobCacheControl, metadata, leaseID, blobContentDisposition, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID)
if err != nil {
return nil, err
}
@@ -165,7 +166,7 @@ func (client appendBlobClient) Create(ctx context.Context, contentLength int64,
}
// createPreparer prepares the Create request.
-func (client appendBlobClient) createPreparer(contentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
+func (client appendBlobClient) createPreparer(contentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
req, err := pipeline.NewRequest("PUT", client.url, nil)
if err != nil {
return req, pipeline.NewError(err, "failed to create request")
@@ -208,8 +209,8 @@ func (client appendBlobClient) createPreparer(contentLength int64, timeout *int3
if ifUnmodifiedSince != nil {
req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123))
}
- if ifMatches != nil {
- req.Header.Set("If-Match", string(*ifMatches))
+ if ifMatch != nil {
+ req.Header.Set("If-Match", string(*ifMatch))
}
if ifNoneMatch != nil {
req.Header.Set("If-None-Match", string(*ifNoneMatch))
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_blob.go
similarity index 82%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_blob.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_blob.go
index b2f8eac665..aa8e0c68af 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_blob.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_blob.go
@@ -32,7 +32,7 @@ func newBlobClient(url url.URL, p pipeline.Pipeline) blobClient {
// copyID is the copy identifier provided in the x-ms-copy-id header of the original Copy Blob operation. timeout is
// the timeout parameter is expressed in seconds. For more information, see Setting
-// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the container's
+// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's
// lease is active and matches this ID. requestID is provides a client-generated, opaque value with a 1 KB character
// limit that is recorded in the analytics logs when storage analytics logging is enabled.
func (client blobClient) AbortCopyFromURL(ctx context.Context, copyID string, timeout *int32, leaseID *string, requestID *string) (*BlobAbortCopyFromURLResponse, error) {
@@ -99,18 +99,18 @@ func (client blobClient) abortCopyFromURLResponder(resp pipeline.Response) (pipe
// service returns 400 (Invalid request) if the proposed lease ID is not in the correct format. See Guid Constructor
// (String) for a list of valid GUID string formats. ifModifiedSince is specify this header value to operate only on a
// blob if it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to
-// operate only on a blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value
+// operate only on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value
// to operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs
// without a matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is
// recorded in the analytics logs when storage analytics logging is enabled.
-func (client blobClient) AcquireLease(ctx context.Context, timeout *int32, duration *int32, proposedLeaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*BlobAcquireLeaseResponse, error) {
+func (client blobClient) AcquireLease(ctx context.Context, timeout *int32, duration *int32, proposedLeaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlobAcquireLeaseResponse, error) {
if err := validate([]validation{
{targetValue: timeout,
constraints: []constraint{{target: "timeout", name: null, rule: false,
chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil {
return nil, err
}
- req, err := client.acquireLeasePreparer(timeout, duration, proposedLeaseID, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID)
+ req, err := client.acquireLeasePreparer(timeout, duration, proposedLeaseID, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID)
if err != nil {
return nil, err
}
@@ -122,7 +122,7 @@ func (client blobClient) AcquireLease(ctx context.Context, timeout *int32, durat
}
// acquireLeasePreparer prepares the AcquireLease request.
-func (client blobClient) acquireLeasePreparer(timeout *int32, duration *int32, proposedLeaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
+func (client blobClient) acquireLeasePreparer(timeout *int32, duration *int32, proposedLeaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
req, err := pipeline.NewRequest("PUT", client.url, nil)
if err != nil {
return req, pipeline.NewError(err, "failed to create request")
@@ -145,8 +145,8 @@ func (client blobClient) acquireLeasePreparer(timeout *int32, duration *int32, p
if ifUnmodifiedSince != nil {
req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123))
}
- if ifMatches != nil {
- req.Header.Set("If-Match", string(*ifMatches))
+ if ifMatch != nil {
+ req.Header.Set("If-Match", string(*ifMatch))
}
if ifNoneMatch != nil {
req.Header.Set("If-None-Match", string(*ifNoneMatch))
@@ -182,18 +182,18 @@ func (client blobClient) acquireLeaseResponder(resp pipeline.Response) (pipeline
// not appear with a break operation, a fixed-duration lease breaks after the remaining lease period elapses, and an
// infinite lease breaks immediately. ifModifiedSince is specify this header value to operate only on a blob if it has
// been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a
-// blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value to operate only
-// on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching
-// value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the
-// analytics logs when storage analytics logging is enabled.
-func (client blobClient) BreakLease(ctx context.Context, timeout *int32, breakPeriod *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*BlobBreakLeaseResponse, error) {
+// blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate only on
+// blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value.
+// requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics
+// logs when storage analytics logging is enabled.
+func (client blobClient) BreakLease(ctx context.Context, timeout *int32, breakPeriod *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlobBreakLeaseResponse, error) {
if err := validate([]validation{
{targetValue: timeout,
constraints: []constraint{{target: "timeout", name: null, rule: false,
chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil {
return nil, err
}
- req, err := client.breakLeasePreparer(timeout, breakPeriod, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID)
+ req, err := client.breakLeasePreparer(timeout, breakPeriod, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID)
if err != nil {
return nil, err
}
@@ -205,7 +205,7 @@ func (client blobClient) BreakLease(ctx context.Context, timeout *int32, breakPe
}
// breakLeasePreparer prepares the BreakLease request.
-func (client blobClient) breakLeasePreparer(timeout *int32, breakPeriod *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
+func (client blobClient) breakLeasePreparer(timeout *int32, breakPeriod *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
req, err := pipeline.NewRequest("PUT", client.url, nil)
if err != nil {
return req, pipeline.NewError(err, "failed to create request")
@@ -225,8 +225,8 @@ func (client blobClient) breakLeasePreparer(timeout *int32, breakPeriod *int32,
if ifUnmodifiedSince != nil {
req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123))
}
- if ifMatches != nil {
- req.Header.Set("If-Match", string(*ifMatches))
+ if ifMatch != nil {
+ req.Header.Set("If-Match", string(*ifMatch))
}
if ifNoneMatch != nil {
req.Header.Set("If-None-Match", string(*ifNoneMatch))
@@ -253,25 +253,25 @@ func (client blobClient) breakLeaseResponder(resp pipeline.Response) (pipeline.R
// ChangeLease [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete
// operations
//
-// leaseID is if specified, the operation only succeeds if the container's lease is active and matches this ID.
-// proposedLeaseID is proposed lease ID, in a GUID string format. The Blob service returns 400 (Invalid request) if the
-// proposed lease ID is not in the correct format. See Guid Constructor (String) for a list of valid GUID string
-// formats. timeout is the timeout parameter is expressed in seconds. For more information, see Setting
// Timeouts for Blob Service Operations. ifModifiedSince is specify this header value to operate only on a blob if
// it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only
-// on a blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value to operate
+// on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate
// only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a
// matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded
// in the analytics logs when storage analytics logging is enabled.
-func (client blobClient) ChangeLease(ctx context.Context, leaseID string, proposedLeaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*BlobChangeLeaseResponse, error) {
+func (client blobClient) ChangeLease(ctx context.Context, leaseID string, proposedLeaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlobChangeLeaseResponse, error) {
if err := validate([]validation{
{targetValue: timeout,
constraints: []constraint{{target: "timeout", name: null, rule: false,
chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil {
return nil, err
}
- req, err := client.changeLeasePreparer(leaseID, proposedLeaseID, timeout, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID)
+ req, err := client.changeLeasePreparer(leaseID, proposedLeaseID, timeout, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID)
if err != nil {
return nil, err
}
@@ -283,7 +283,7 @@ func (client blobClient) ChangeLease(ctx context.Context, leaseID string, propos
}
// changeLeasePreparer prepares the ChangeLease request.
-func (client blobClient) changeLeasePreparer(leaseID string, proposedLeaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
+func (client blobClient) changeLeasePreparer(leaseID string, proposedLeaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
req, err := pipeline.NewRequest("PUT", client.url, nil)
if err != nil {
return req, pipeline.NewError(err, "failed to create request")
@@ -302,8 +302,8 @@ func (client blobClient) changeLeasePreparer(leaseID string, proposedLeaseID str
if ifUnmodifiedSince != nil {
req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123))
}
- if ifMatches != nil {
- req.Header.Set("If-Match", string(*ifMatches))
+ if ifMatch != nil {
+ req.Header.Set("If-Match", string(*ifMatch))
}
if ifNoneMatch != nil {
req.Header.Set("If-None-Match", string(*ifNoneMatch))
@@ -338,22 +338,19 @@ func (client blobClient) changeLeaseResponder(resp pipeline.Response) (pipeline.
// 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing
// Containers, Blobs, and Metadata for more information. ifModifiedSince is specify this header value to operate only
// on a blob if it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to
-// operate only on a blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value
+// operate only on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value
// to operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs
-// without a matching value. leaseID is if specified, the operation only succeeds if the container's lease is active
-// and matches this ID. requestID is provides a client-generated, opaque value with a 1 KB character limit that is
-// recorded in the analytics logs when storage analytics logging is enabled.
-func (client blobClient) CreateSnapshot(ctx context.Context, timeout *int32, metadata map[string]string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, leaseID *string, requestID *string) (*BlobCreateSnapshotResponse, error) {
+// without a matching value. leaseID is if specified, the operation only succeeds if the resource's lease is active and
+// matches this ID. requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded
+// in the analytics logs when storage analytics logging is enabled.
+func (client blobClient) CreateSnapshot(ctx context.Context, timeout *int32, metadata map[string]string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, leaseID *string, requestID *string) (*BlobCreateSnapshotResponse, error) {
if err := validate([]validation{
{targetValue: timeout,
constraints: []constraint{{target: "timeout", name: null, rule: false,
- chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}},
- {targetValue: metadata,
- constraints: []constraint{{target: "metadata", name: null, rule: false,
- chain: []constraint{{target: "metadata", name: pattern, rule: `^[a-zA-Z]+$`, chain: nil}}}}}}); err != nil {
+ chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil {
return nil, err
}
- req, err := client.createSnapshotPreparer(timeout, metadata, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, leaseID, requestID)
+ req, err := client.createSnapshotPreparer(timeout, metadata, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, leaseID, requestID)
if err != nil {
return nil, err
}
@@ -365,7 +362,7 @@ func (client blobClient) CreateSnapshot(ctx context.Context, timeout *int32, met
}
// createSnapshotPreparer prepares the CreateSnapshot request.
-func (client blobClient) createSnapshotPreparer(timeout *int32, metadata map[string]string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, leaseID *string, requestID *string) (pipeline.Request, error) {
+func (client blobClient) createSnapshotPreparer(timeout *int32, metadata map[string]string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, leaseID *string, requestID *string) (pipeline.Request, error) {
req, err := pipeline.NewRequest("PUT", client.url, nil)
if err != nil {
return req, pipeline.NewError(err, "failed to create request")
@@ -387,8 +384,8 @@ func (client blobClient) createSnapshotPreparer(timeout *int32, metadata map[str
if ifUnmodifiedSince != nil {
req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123))
}
- if ifMatches != nil {
- req.Header.Set("If-Match", string(*ifMatches))
+ if ifMatch != nil {
+ req.Header.Set("If-Match", string(*ifMatch))
}
if ifNoneMatch != nil {
req.Header.Set("If-None-Match", string(*ifNoneMatch))
@@ -430,23 +427,23 @@ func (client blobClient) createSnapshotResponder(resp pipeline.Response) (pipeli
// href="https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/creating-a-snapshot-of-a-blob">Creating
// a Snapshot of a Blob. timeout is the timeout parameter is expressed in seconds. For more information, see Setting
-// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the container's
+// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's
// lease is active and matches this ID. deleteSnapshots is required if the blob has associated snapshots. Specify one
// of the following two options: include: Delete the base blob and all of its snapshots. only: Delete only the blob's
// snapshots and not the blob itself ifModifiedSince is specify this header value to operate only on a blob if it has
// been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a
-// blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value to operate only
-// on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching
-// value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the
-// analytics logs when storage analytics logging is enabled.
-func (client blobClient) Delete(ctx context.Context, snapshot *string, timeout *int32, leaseID *string, deleteSnapshots DeleteSnapshotsOptionType, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*BlobDeleteResponse, error) {
+// blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate only on
+// blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value.
+// requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics
+// logs when storage analytics logging is enabled.
+func (client blobClient) Delete(ctx context.Context, snapshot *string, timeout *int32, leaseID *string, deleteSnapshots DeleteSnapshotsOptionType, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlobDeleteResponse, error) {
if err := validate([]validation{
{targetValue: timeout,
constraints: []constraint{{target: "timeout", name: null, rule: false,
chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil {
return nil, err
}
- req, err := client.deletePreparer(snapshot, timeout, leaseID, deleteSnapshots, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID)
+ req, err := client.deletePreparer(snapshot, timeout, leaseID, deleteSnapshots, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID)
if err != nil {
return nil, err
}
@@ -458,7 +455,7 @@ func (client blobClient) Delete(ctx context.Context, snapshot *string, timeout *
}
// deletePreparer prepares the Delete request.
-func (client blobClient) deletePreparer(snapshot *string, timeout *int32, leaseID *string, deleteSnapshots DeleteSnapshotsOptionType, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
+func (client blobClient) deletePreparer(snapshot *string, timeout *int32, leaseID *string, deleteSnapshots DeleteSnapshotsOptionType, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
req, err := pipeline.NewRequest("DELETE", client.url, nil)
if err != nil {
return req, pipeline.NewError(err, "failed to create request")
@@ -483,8 +480,8 @@ func (client blobClient) deletePreparer(snapshot *string, timeout *int32, leaseI
if ifUnmodifiedSince != nil {
req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123))
}
- if ifMatches != nil {
- req.Header.Set("If-Match", string(*ifMatches))
+ if ifMatch != nil {
+ req.Header.Set("If-Match", string(*ifMatch))
}
if ifNoneMatch != nil {
req.Header.Set("If-None-Match", string(*ifNoneMatch))
@@ -516,22 +513,22 @@ func (client blobClient) deleteResponder(resp pipeline.Response) (pipeline.Respo
// a Snapshot of a Blob. timeout is the timeout parameter is expressed in seconds. For more information, see Setting
// Timeouts for Blob Service Operations. rangeParameter is return only the bytes of the blob in the specified
-// range. leaseID is if specified, the operation only succeeds if the container's lease is active and matches this ID.
+// range. leaseID is if specified, the operation only succeeds if the resource's lease is active and matches this ID.
// rangeGetContentMD5 is when set to true and specified together with the Range, the service returns the MD5 hash for
// the range, as long as the range is less than or equal to 4 MB in size. ifModifiedSince is specify this header value
// to operate only on a blob if it has been modified since the specified date/time. ifUnmodifiedSince is specify this
-// header value to operate only on a blob if it has not been modified since the specified date/time. ifMatches is
-// specify an ETag value to operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to
-// operate only on blobs without a matching value. requestID is provides a client-generated, opaque value with a 1 KB
-// character limit that is recorded in the analytics logs when storage analytics logging is enabled.
-func (client blobClient) Download(ctx context.Context, snapshot *string, timeout *int32, rangeParameter *string, leaseID *string, rangeGetContentMD5 *bool, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*downloadResponse, error) {
+// header value to operate only on a blob if it has not been modified since the specified date/time. ifMatch is specify
+// an ETag value to operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only
+// on blobs without a matching value. requestID is provides a client-generated, opaque value with a 1 KB character
+// limit that is recorded in the analytics logs when storage analytics logging is enabled.
+func (client blobClient) Download(ctx context.Context, snapshot *string, timeout *int32, rangeParameter *string, leaseID *string, rangeGetContentMD5 *bool, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*downloadResponse, error) {
if err := validate([]validation{
{targetValue: timeout,
constraints: []constraint{{target: "timeout", name: null, rule: false,
chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil {
return nil, err
}
- req, err := client.downloadPreparer(snapshot, timeout, rangeParameter, leaseID, rangeGetContentMD5, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID)
+ req, err := client.downloadPreparer(snapshot, timeout, rangeParameter, leaseID, rangeGetContentMD5, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID)
if err != nil {
return nil, err
}
@@ -543,7 +540,7 @@ func (client blobClient) Download(ctx context.Context, snapshot *string, timeout
}
// downloadPreparer prepares the Download request.
-func (client blobClient) downloadPreparer(snapshot *string, timeout *int32, rangeParameter *string, leaseID *string, rangeGetContentMD5 *bool, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
+func (client blobClient) downloadPreparer(snapshot *string, timeout *int32, rangeParameter *string, leaseID *string, rangeGetContentMD5 *bool, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
req, err := pipeline.NewRequest("GET", client.url, nil)
if err != nil {
return req, pipeline.NewError(err, "failed to create request")
@@ -571,8 +568,8 @@ func (client blobClient) downloadPreparer(snapshot *string, timeout *int32, rang
if ifUnmodifiedSince != nil {
req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123))
}
- if ifMatches != nil {
- req.Header.Set("If-Match", string(*ifMatches))
+ if ifMatch != nil {
+ req.Header.Set("If-Match", string(*ifMatch))
}
if ifNoneMatch != nil {
req.Header.Set("If-None-Match", string(*ifNoneMatch))
@@ -593,6 +590,44 @@ func (client blobClient) downloadResponder(resp pipeline.Response) (pipeline.Res
return &downloadResponse{rawResponse: resp.Response()}, err
}
+// GetAccountInfo returns the sku name and account kind
+func (client blobClient) GetAccountInfo(ctx context.Context) (*BlobGetAccountInfoResponse, error) {
+ req, err := client.getAccountInfoPreparer()
+ if err != nil {
+ return nil, err
+ }
+ resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.getAccountInfoResponder}, req)
+ if err != nil {
+ return nil, err
+ }
+ return resp.(*BlobGetAccountInfoResponse), err
+}
+
+// getAccountInfoPreparer prepares the GetAccountInfo request.
+func (client blobClient) getAccountInfoPreparer() (pipeline.Request, error) {
+ req, err := pipeline.NewRequest("GET", client.url, nil)
+ if err != nil {
+ return req, pipeline.NewError(err, "failed to create request")
+ }
+ params := req.URL.Query()
+ params.Set("restype", "account")
+ params.Set("comp", "properties")
+ req.URL.RawQuery = params.Encode()
+ req.Header.Set("x-ms-version", ServiceVersion)
+ return req, nil
+}
+
+// getAccountInfoResponder handles the response to the GetAccountInfo request.
+func (client blobClient) getAccountInfoResponder(resp pipeline.Response) (pipeline.Response, error) {
+ err := validateResponse(resp, http.StatusOK)
+ if resp == nil {
+ return nil, err
+ }
+ io.Copy(ioutil.Discard, resp.Response().Body)
+ resp.Response().Body.Close()
+ return &BlobGetAccountInfoResponse{rawResponse: resp.Response()}, err
+}
+
// GetProperties the Get Properties operation returns all user-defined metadata, standard HTTP properties, and system
// properties for the blob. It does not return the content of the blob.
//
@@ -601,21 +636,21 @@ func (client blobClient) downloadResponder(resp pipeline.Response) (pipeline.Res
// href="https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/creating-a-snapshot-of-a-blob">Creating
// a Snapshot of a Blob. timeout is the timeout parameter is expressed in seconds. For more information, see Setting
-// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the container's
+// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's
// lease is active and matches this ID. ifModifiedSince is specify this header value to operate only on a blob if it
// has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a
-// blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value to operate only
-// on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching
-// value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the
-// analytics logs when storage analytics logging is enabled.
-func (client blobClient) GetProperties(ctx context.Context, snapshot *string, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*BlobGetPropertiesResponse, error) {
+// blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate only on
+// blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value.
+// requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics
+// logs when storage analytics logging is enabled.
+func (client blobClient) GetProperties(ctx context.Context, snapshot *string, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlobGetPropertiesResponse, error) {
if err := validate([]validation{
{targetValue: timeout,
constraints: []constraint{{target: "timeout", name: null, rule: false,
chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil {
return nil, err
}
- req, err := client.getPropertiesPreparer(snapshot, timeout, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID)
+ req, err := client.getPropertiesPreparer(snapshot, timeout, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID)
if err != nil {
return nil, err
}
@@ -627,7 +662,7 @@ func (client blobClient) GetProperties(ctx context.Context, snapshot *string, ti
}
// getPropertiesPreparer prepares the GetProperties request.
-func (client blobClient) getPropertiesPreparer(snapshot *string, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
+func (client blobClient) getPropertiesPreparer(snapshot *string, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
req, err := pipeline.NewRequest("HEAD", client.url, nil)
if err != nil {
return req, pipeline.NewError(err, "failed to create request")
@@ -649,8 +684,8 @@ func (client blobClient) getPropertiesPreparer(snapshot *string, timeout *int32,
if ifUnmodifiedSince != nil {
req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123))
}
- if ifMatches != nil {
- req.Header.Set("If-Match", string(*ifMatches))
+ if ifMatch != nil {
+ req.Header.Set("If-Match", string(*ifMatch))
}
if ifNoneMatch != nil {
req.Header.Set("If-None-Match", string(*ifNoneMatch))
@@ -676,23 +711,23 @@ func (client blobClient) getPropertiesResponder(resp pipeline.Response) (pipelin
// ReleaseLease [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete
// operations
//
-// leaseID is if specified, the operation only succeeds if the container's lease is active and matches this ID. timeout
-// is the timeout parameter is expressed in seconds. For more information, see Setting
// Timeouts for Blob Service Operations. ifModifiedSince is specify this header value to operate only on a blob if
// it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only
-// on a blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value to operate
+// on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate
// only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a
// matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded
// in the analytics logs when storage analytics logging is enabled.
-func (client blobClient) ReleaseLease(ctx context.Context, leaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*BlobReleaseLeaseResponse, error) {
+func (client blobClient) ReleaseLease(ctx context.Context, leaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlobReleaseLeaseResponse, error) {
if err := validate([]validation{
{targetValue: timeout,
constraints: []constraint{{target: "timeout", name: null, rule: false,
chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil {
return nil, err
}
- req, err := client.releaseLeasePreparer(leaseID, timeout, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID)
+ req, err := client.releaseLeasePreparer(leaseID, timeout, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID)
if err != nil {
return nil, err
}
@@ -704,7 +739,7 @@ func (client blobClient) ReleaseLease(ctx context.Context, leaseID string, timeo
}
// releaseLeasePreparer prepares the ReleaseLease request.
-func (client blobClient) releaseLeasePreparer(leaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
+func (client blobClient) releaseLeasePreparer(leaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
req, err := pipeline.NewRequest("PUT", client.url, nil)
if err != nil {
return req, pipeline.NewError(err, "failed to create request")
@@ -722,8 +757,8 @@ func (client blobClient) releaseLeasePreparer(leaseID string, timeout *int32, if
if ifUnmodifiedSince != nil {
req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123))
}
- if ifMatches != nil {
- req.Header.Set("If-Match", string(*ifMatches))
+ if ifMatch != nil {
+ req.Header.Set("If-Match", string(*ifMatch))
}
if ifNoneMatch != nil {
req.Header.Set("If-None-Match", string(*ifNoneMatch))
@@ -750,23 +785,23 @@ func (client blobClient) releaseLeaseResponder(resp pipeline.Response) (pipeline
// RenewLease [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete
// operations
//
-// leaseID is if specified, the operation only succeeds if the container's lease is active and matches this ID. timeout
-// is the timeout parameter is expressed in seconds. For more information, see Setting
// Timeouts for Blob Service Operations. ifModifiedSince is specify this header value to operate only on a blob if
// it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only
-// on a blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value to operate
+// on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate
// only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a
// matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded
// in the analytics logs when storage analytics logging is enabled.
-func (client blobClient) RenewLease(ctx context.Context, leaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*BlobRenewLeaseResponse, error) {
+func (client blobClient) RenewLease(ctx context.Context, leaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlobRenewLeaseResponse, error) {
if err := validate([]validation{
{targetValue: timeout,
constraints: []constraint{{target: "timeout", name: null, rule: false,
chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil {
return nil, err
}
- req, err := client.renewLeasePreparer(leaseID, timeout, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID)
+ req, err := client.renewLeasePreparer(leaseID, timeout, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID)
if err != nil {
return nil, err
}
@@ -778,7 +813,7 @@ func (client blobClient) RenewLease(ctx context.Context, leaseID string, timeout
}
// renewLeasePreparer prepares the RenewLease request.
-func (client blobClient) renewLeasePreparer(leaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
+func (client blobClient) renewLeasePreparer(leaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
req, err := pipeline.NewRequest("PUT", client.url, nil)
if err != nil {
return req, pipeline.NewError(err, "failed to create request")
@@ -796,8 +831,8 @@ func (client blobClient) renewLeasePreparer(leaseID string, timeout *int32, ifMo
if ifUnmodifiedSince != nil {
req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123))
}
- if ifMatches != nil {
- req.Header.Set("If-Match", string(*ifMatches))
+ if ifMatch != nil {
+ req.Header.Set("If-Match", string(*ifMatch))
}
if ifNoneMatch != nil {
req.Header.Set("If-None-Match", string(*ifNoneMatch))
@@ -832,22 +867,21 @@ func (client blobClient) renewLeaseResponder(resp pipeline.Response) (pipeline.R
// blocks were validated when each was uploaded. blobContentEncoding is optional. Sets the blob's content encoding. If
// specified, this property is stored with the blob and returned with a read request. blobContentLanguage is optional.
// Set the blob's content language. If specified, this property is stored with the blob and returned with a read
-// request. leaseID is if specified, the operation only succeeds if the container's lease is active and matches this
-// ID. ifModifiedSince is specify this header value to operate only on a blob if it has been modified since the
-// specified date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if it has not been
-// modified since the specified date/time. ifMatches is specify an ETag value to operate only on blobs with a matching
-// value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value.
-// blobContentDisposition is optional. Sets the blob's Content-Disposition header. requestID is provides a
-// client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage
-// analytics logging is enabled.
-func (client blobClient) SetHTTPHeaders(ctx context.Context, timeout *int32, blobCacheControl *string, blobContentType *string, blobContentMD5 []byte, blobContentEncoding *string, blobContentLanguage *string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, blobContentDisposition *string, requestID *string) (*BlobSetHTTPHeadersResponse, error) {
+// request. leaseID is if specified, the operation only succeeds if the resource's lease is active and matches this ID.
+// ifModifiedSince is specify this header value to operate only on a blob if it has been modified since the specified
+// date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if it has not been modified
+// since the specified date/time. ifMatch is specify an ETag value to operate only on blobs with a matching value.
+// ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. blobContentDisposition is
+// optional. Sets the blob's Content-Disposition header. requestID is provides a client-generated, opaque value with a
+// 1 KB character limit that is recorded in the analytics logs when storage analytics logging is enabled.
+func (client blobClient) SetHTTPHeaders(ctx context.Context, timeout *int32, blobCacheControl *string, blobContentType *string, blobContentMD5 []byte, blobContentEncoding *string, blobContentLanguage *string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, blobContentDisposition *string, requestID *string) (*BlobSetHTTPHeadersResponse, error) {
if err := validate([]validation{
{targetValue: timeout,
constraints: []constraint{{target: "timeout", name: null, rule: false,
chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil {
return nil, err
}
- req, err := client.setHTTPHeadersPreparer(timeout, blobCacheControl, blobContentType, blobContentMD5, blobContentEncoding, blobContentLanguage, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, blobContentDisposition, requestID)
+ req, err := client.setHTTPHeadersPreparer(timeout, blobCacheControl, blobContentType, blobContentMD5, blobContentEncoding, blobContentLanguage, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, blobContentDisposition, requestID)
if err != nil {
return nil, err
}
@@ -859,7 +893,7 @@ func (client blobClient) SetHTTPHeaders(ctx context.Context, timeout *int32, blo
}
// setHTTPHeadersPreparer prepares the SetHTTPHeaders request.
-func (client blobClient) setHTTPHeadersPreparer(timeout *int32, blobCacheControl *string, blobContentType *string, blobContentMD5 []byte, blobContentEncoding *string, blobContentLanguage *string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, blobContentDisposition *string, requestID *string) (pipeline.Request, error) {
+func (client blobClient) setHTTPHeadersPreparer(timeout *int32, blobCacheControl *string, blobContentType *string, blobContentMD5 []byte, blobContentEncoding *string, blobContentLanguage *string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, blobContentDisposition *string, requestID *string) (pipeline.Request, error) {
req, err := pipeline.NewRequest("PUT", client.url, nil)
if err != nil {
return req, pipeline.NewError(err, "failed to create request")
@@ -894,8 +928,8 @@ func (client blobClient) setHTTPHeadersPreparer(timeout *int32, blobCacheControl
if ifUnmodifiedSince != nil {
req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123))
}
- if ifMatches != nil {
- req.Header.Set("If-Match", string(*ifMatches))
+ if ifMatch != nil {
+ req.Header.Set("If-Match", string(*ifMatch))
}
if ifNoneMatch != nil {
req.Header.Set("If-None-Match", string(*ifNoneMatch))
@@ -932,23 +966,20 @@ func (client blobClient) setHTTPHeadersResponder(resp pipeline.Response) (pipeli
// the specified metadata, and metadata is not copied from the source blob or file. Note that beginning with version
// 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing
// Containers, Blobs, and Metadata for more information. leaseID is if specified, the operation only succeeds if the
-// container's lease is active and matches this ID. ifModifiedSince is specify this header value to operate only on a
+// resource's lease is active and matches this ID. ifModifiedSince is specify this header value to operate only on a
// blob if it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to
-// operate only on a blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value
+// operate only on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value
// to operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs
// without a matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is
// recorded in the analytics logs when storage analytics logging is enabled.
-func (client blobClient) SetMetadata(ctx context.Context, timeout *int32, metadata map[string]string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*BlobSetMetadataResponse, error) {
+func (client blobClient) SetMetadata(ctx context.Context, timeout *int32, metadata map[string]string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlobSetMetadataResponse, error) {
if err := validate([]validation{
{targetValue: timeout,
constraints: []constraint{{target: "timeout", name: null, rule: false,
- chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}},
- {targetValue: metadata,
- constraints: []constraint{{target: "metadata", name: null, rule: false,
- chain: []constraint{{target: "metadata", name: pattern, rule: `^[a-zA-Z]+$`, chain: nil}}}}}}); err != nil {
+ chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil {
return nil, err
}
- req, err := client.setMetadataPreparer(timeout, metadata, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID)
+ req, err := client.setMetadataPreparer(timeout, metadata, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID)
if err != nil {
return nil, err
}
@@ -960,7 +991,7 @@ func (client blobClient) SetMetadata(ctx context.Context, timeout *int32, metada
}
// setMetadataPreparer prepares the SetMetadata request.
-func (client blobClient) setMetadataPreparer(timeout *int32, metadata map[string]string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
+func (client blobClient) setMetadataPreparer(timeout *int32, metadata map[string]string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
req, err := pipeline.NewRequest("PUT", client.url, nil)
if err != nil {
return req, pipeline.NewError(err, "failed to create request")
@@ -985,8 +1016,8 @@ func (client blobClient) setMetadataPreparer(timeout *int32, metadata map[string
if ifUnmodifiedSince != nil {
req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123))
}
- if ifMatches != nil {
- req.Header.Set("If-Match", string(*ifMatches))
+ if ifMatch != nil {
+ req.Header.Set("If-Match", string(*ifMatch))
}
if ifNoneMatch != nil {
req.Header.Set("If-None-Match", string(*ifNoneMatch))
@@ -1018,15 +1049,16 @@ func (client blobClient) setMetadataResponder(resp pipeline.Response) (pipeline.
// information, see Setting
// Timeouts for Blob Service Operations. requestID is provides a client-generated, opaque value with a 1 KB
-// character limit that is recorded in the analytics logs when storage analytics logging is enabled.
-func (client blobClient) SetTier(ctx context.Context, tier AccessTierType, timeout *int32, requestID *string) (*BlobSetTierResponse, error) {
+// character limit that is recorded in the analytics logs when storage analytics logging is enabled. leaseID is if
+// specified, the operation only succeeds if the resource's lease is active and matches this ID.
+func (client blobClient) SetTier(ctx context.Context, tier AccessTierType, timeout *int32, requestID *string, leaseID *string) (*BlobSetTierResponse, error) {
if err := validate([]validation{
{targetValue: timeout,
constraints: []constraint{{target: "timeout", name: null, rule: false,
chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil {
return nil, err
}
- req, err := client.setTierPreparer(tier, timeout, requestID)
+ req, err := client.setTierPreparer(tier, timeout, requestID, leaseID)
if err != nil {
return nil, err
}
@@ -1038,7 +1070,7 @@ func (client blobClient) SetTier(ctx context.Context, tier AccessTierType, timeo
}
// setTierPreparer prepares the SetTier request.
-func (client blobClient) setTierPreparer(tier AccessTierType, timeout *int32, requestID *string) (pipeline.Request, error) {
+func (client blobClient) setTierPreparer(tier AccessTierType, timeout *int32, requestID *string, leaseID *string) (pipeline.Request, error) {
req, err := pipeline.NewRequest("PUT", client.url, nil)
if err != nil {
return req, pipeline.NewError(err, "failed to create request")
@@ -1054,6 +1086,9 @@ func (client blobClient) setTierPreparer(tier AccessTierType, timeout *int32, re
if requestID != nil {
req.Header.Set("x-ms-client-request-id", *requestID)
}
+ if leaseID != nil {
+ req.Header.Set("x-ms-lease-id", *leaseID)
+ }
return req, nil
}
@@ -1082,27 +1117,23 @@ func (client blobClient) setTierResponder(resp pipeline.Response) (pipeline.Resp
// 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing
// Containers, Blobs, and Metadata for more information. sourceIfModifiedSince is specify this header value to operate
// only on a blob if it has been modified since the specified date/time. sourceIfUnmodifiedSince is specify this header
-// value to operate only on a blob if it has not been modified since the specified date/time. sourceIfMatches is
-// specify an ETag value to operate only on blobs with a matching value. sourceIfNoneMatch is specify an ETag value to
-// operate only on blobs without a matching value. ifModifiedSince is specify this header value to operate only on a
-// blob if it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to
-// operate only on a blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value
-// to operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs
-// without a matching value. leaseID is if specified, the operation only succeeds if the container's lease is active
-// and matches this ID. sourceLeaseID is specify this header to perform the operation only if the lease ID given
-// matches the active lease ID of the source blob. requestID is provides a client-generated, opaque value with a 1 KB
-// character limit that is recorded in the analytics logs when storage analytics logging is enabled.
-func (client blobClient) StartCopyFromURL(ctx context.Context, copySource string, timeout *int32, metadata map[string]string, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatches *ETag, sourceIfNoneMatch *ETag, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, leaseID *string, sourceLeaseID *string, requestID *string) (*BlobStartCopyFromURLResponse, error) {
+// value to operate only on a blob if it has not been modified since the specified date/time. sourceIfMatch is specify
+// an ETag value to operate only on blobs with a matching value. sourceIfNoneMatch is specify an ETag value to operate
+// only on blobs without a matching value. ifModifiedSince is specify this header value to operate only on a blob if it
+// has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a
+// blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate only on
+// blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value.
+// leaseID is if specified, the operation only succeeds if the resource's lease is active and matches this ID.
+// requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics
+// logs when storage analytics logging is enabled.
+func (client blobClient) StartCopyFromURL(ctx context.Context, copySource string, timeout *int32, metadata map[string]string, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, leaseID *string, requestID *string) (*BlobStartCopyFromURLResponse, error) {
if err := validate([]validation{
{targetValue: timeout,
constraints: []constraint{{target: "timeout", name: null, rule: false,
- chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}},
- {targetValue: metadata,
- constraints: []constraint{{target: "metadata", name: null, rule: false,
- chain: []constraint{{target: "metadata", name: pattern, rule: `^[a-zA-Z]+$`, chain: nil}}}}}}); err != nil {
+ chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil {
return nil, err
}
- req, err := client.startCopyFromURLPreparer(copySource, timeout, metadata, sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatches, sourceIfNoneMatch, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, leaseID, sourceLeaseID, requestID)
+ req, err := client.startCopyFromURLPreparer(copySource, timeout, metadata, sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatch, sourceIfNoneMatch, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, leaseID, requestID)
if err != nil {
return nil, err
}
@@ -1114,7 +1145,7 @@ func (client blobClient) StartCopyFromURL(ctx context.Context, copySource string
}
// startCopyFromURLPreparer prepares the StartCopyFromURL request.
-func (client blobClient) startCopyFromURLPreparer(copySource string, timeout *int32, metadata map[string]string, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatches *ETag, sourceIfNoneMatch *ETag, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, leaseID *string, sourceLeaseID *string, requestID *string) (pipeline.Request, error) {
+func (client blobClient) startCopyFromURLPreparer(copySource string, timeout *int32, metadata map[string]string, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, leaseID *string, requestID *string) (pipeline.Request, error) {
req, err := pipeline.NewRequest("PUT", client.url, nil)
if err != nil {
return req, pipeline.NewError(err, "failed to create request")
@@ -1135,8 +1166,8 @@ func (client blobClient) startCopyFromURLPreparer(copySource string, timeout *in
if sourceIfUnmodifiedSince != nil {
req.Header.Set("x-ms-source-if-unmodified-since", (*sourceIfUnmodifiedSince).In(gmt).Format(time.RFC1123))
}
- if sourceIfMatches != nil {
- req.Header.Set("x-ms-source-if-match", string(*sourceIfMatches))
+ if sourceIfMatch != nil {
+ req.Header.Set("x-ms-source-if-match", string(*sourceIfMatch))
}
if sourceIfNoneMatch != nil {
req.Header.Set("x-ms-source-if-none-match", string(*sourceIfNoneMatch))
@@ -1147,8 +1178,8 @@ func (client blobClient) startCopyFromURLPreparer(copySource string, timeout *in
if ifUnmodifiedSince != nil {
req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123))
}
- if ifMatches != nil {
- req.Header.Set("If-Match", string(*ifMatches))
+ if ifMatch != nil {
+ req.Header.Set("If-Match", string(*ifMatch))
}
if ifNoneMatch != nil {
req.Header.Set("If-None-Match", string(*ifNoneMatch))
@@ -1157,9 +1188,6 @@ func (client blobClient) startCopyFromURLPreparer(copySource string, timeout *in
if leaseID != nil {
req.Header.Set("x-ms-lease-id", *leaseID)
}
- if sourceLeaseID != nil {
- req.Header.Set("x-ms-source-lease-id", *sourceLeaseID)
- }
req.Header.Set("x-ms-version", ServiceVersion)
if requestID != nil {
req.Header.Set("x-ms-client-request-id", *requestID)
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_block_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_block_blob.go
similarity index 88%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_block_blob.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_block_blob.go
index 4e75dcea33..a8105b54f8 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_block_blob.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_block_blob.go
@@ -48,25 +48,22 @@ func newBlockBlobClient(url url.URL, p pipeline.Pipeline) blockBlobClient {
// destination blob. If one or more name-value pairs are specified, the destination blob is created with the specified
// metadata, and metadata is not copied from the source blob or file. Note that beginning with version 2009-09-19,
// metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing Containers, Blobs, and
-// Metadata for more information. leaseID is if specified, the operation only succeeds if the container's lease is
+// Metadata for more information. leaseID is if specified, the operation only succeeds if the resource's lease is
// active and matches this ID. blobContentDisposition is optional. Sets the blob's Content-Disposition header.
// ifModifiedSince is specify this header value to operate only on a blob if it has been modified since the specified
// date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if it has not been modified
-// since the specified date/time. ifMatches is specify an ETag value to operate only on blobs with a matching value.
+// since the specified date/time. ifMatch is specify an ETag value to operate only on blobs with a matching value.
// ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. requestID is provides a
// client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage
// analytics logging is enabled.
-func (client blockBlobClient) CommitBlockList(ctx context.Context, blocks BlockLookupList, timeout *int32, blobCacheControl *string, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*BlockBlobCommitBlockListResponse, error) {
+func (client blockBlobClient) CommitBlockList(ctx context.Context, blocks BlockLookupList, timeout *int32, blobCacheControl *string, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlockBlobCommitBlockListResponse, error) {
if err := validate([]validation{
{targetValue: timeout,
constraints: []constraint{{target: "timeout", name: null, rule: false,
- chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}},
- {targetValue: metadata,
- constraints: []constraint{{target: "metadata", name: null, rule: false,
- chain: []constraint{{target: "metadata", name: pattern, rule: `^[a-zA-Z]+$`, chain: nil}}}}}}); err != nil {
+ chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil {
return nil, err
}
- req, err := client.commitBlockListPreparer(blocks, timeout, blobCacheControl, blobContentType, blobContentEncoding, blobContentLanguage, blobContentMD5, metadata, leaseID, blobContentDisposition, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID)
+ req, err := client.commitBlockListPreparer(blocks, timeout, blobCacheControl, blobContentType, blobContentEncoding, blobContentLanguage, blobContentMD5, metadata, leaseID, blobContentDisposition, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID)
if err != nil {
return nil, err
}
@@ -78,7 +75,7 @@ func (client blockBlobClient) CommitBlockList(ctx context.Context, blocks BlockL
}
// commitBlockListPreparer prepares the CommitBlockList request.
-func (client blockBlobClient) commitBlockListPreparer(blocks BlockLookupList, timeout *int32, blobCacheControl *string, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
+func (client blockBlobClient) commitBlockListPreparer(blocks BlockLookupList, timeout *int32, blobCacheControl *string, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
req, err := pipeline.NewRequest("PUT", client.url, nil)
if err != nil {
return req, pipeline.NewError(err, "failed to create request")
@@ -121,8 +118,8 @@ func (client blockBlobClient) commitBlockListPreparer(blocks BlockLookupList, ti
if ifUnmodifiedSince != nil {
req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123))
}
- if ifMatches != nil {
- req.Header.Set("If-Match", string(*ifMatches))
+ if ifMatch != nil {
+ req.Header.Set("If-Match", string(*ifMatch))
}
if ifNoneMatch != nil {
req.Header.Set("If-None-Match", string(*ifNoneMatch))
@@ -163,7 +160,7 @@ func (client blockBlobClient) commitBlockListResponder(resp pipeline.Response) (
// href="https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/creating-a-snapshot-of-a-blob">Creating
// a Snapshot of a Blob. timeout is the timeout parameter is expressed in seconds. For more information, see Setting
-// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the container's
+// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's
// lease is active and matches this ID. requestID is provides a client-generated, opaque value with a 1 KB character
// limit that is recorded in the analytics logs when storage analytics logging is enabled.
func (client blockBlobClient) GetBlockList(ctx context.Context, listType BlockListType, snapshot *string, timeout *int32, leaseID *string, requestID *string) (*BlockList, error) {
@@ -223,7 +220,7 @@ func (client blockBlobClient) getBlockListResponder(resp pipeline.Response) (pip
defer resp.Response().Body.Close()
b, err := ioutil.ReadAll(resp.Response().Body)
if err != nil {
- return result, NewResponseError(err, resp.Response(), "failed to read response body")
+ return result, err
}
if len(b) > 0 {
b = removeBOM(b)
@@ -240,13 +237,14 @@ func (client blockBlobClient) getBlockListResponder(resp pipeline.Response) (pip
// blockID is a valid Base64 string value that identifies the block. Prior to encoding, the string must be less than or
// equal to 64 bytes in size. For a given blob, the length of the value specified for the blockid parameter must be the
// same size for each block. contentLength is the length of the request. body is initial data body will be closed upon
-// successful return. Callers should ensure closure when receiving an error.timeout is the timeout parameter is
-// expressed in seconds. For more information, see Setting
-// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the container's
+// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's
// lease is active and matches this ID. requestID is provides a client-generated, opaque value with a 1 KB character
// limit that is recorded in the analytics logs when storage analytics logging is enabled.
-func (client blockBlobClient) StageBlock(ctx context.Context, blockID string, contentLength int64, body io.ReadSeeker, timeout *int32, leaseID *string, requestID *string) (*BlockBlobStageBlockResponse, error) {
+func (client blockBlobClient) StageBlock(ctx context.Context, blockID string, contentLength int64, body io.ReadSeeker, transactionalContentMD5 []byte, timeout *int32, leaseID *string, requestID *string) (*BlockBlobStageBlockResponse, error) {
if err := validate([]validation{
{targetValue: body,
constraints: []constraint{{target: "body", name: null, rule: true, chain: nil}}},
@@ -255,7 +253,7 @@ func (client blockBlobClient) StageBlock(ctx context.Context, blockID string, co
chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil {
return nil, err
}
- req, err := client.stageBlockPreparer(blockID, contentLength, body, timeout, leaseID, requestID)
+ req, err := client.stageBlockPreparer(blockID, contentLength, body, transactionalContentMD5, timeout, leaseID, requestID)
if err != nil {
return nil, err
}
@@ -267,7 +265,7 @@ func (client blockBlobClient) StageBlock(ctx context.Context, blockID string, co
}
// stageBlockPreparer prepares the StageBlock request.
-func (client blockBlobClient) stageBlockPreparer(blockID string, contentLength int64, body io.ReadSeeker, timeout *int32, leaseID *string, requestID *string) (pipeline.Request, error) {
+func (client blockBlobClient) stageBlockPreparer(blockID string, contentLength int64, body io.ReadSeeker, transactionalContentMD5 []byte, timeout *int32, leaseID *string, requestID *string) (pipeline.Request, error) {
req, err := pipeline.NewRequest("PUT", client.url, body)
if err != nil {
return req, pipeline.NewError(err, "failed to create request")
@@ -280,6 +278,9 @@ func (client blockBlobClient) stageBlockPreparer(blockID string, contentLength i
params.Set("comp", "block")
req.URL.RawQuery = params.Encode()
req.Header.Set("Content-Length", strconv.FormatInt(contentLength, 10))
+ if transactionalContentMD5 != nil {
+ req.Header.Set("Content-MD5", base64.StdEncoding.EncodeToString(transactionalContentMD5))
+ }
if leaseID != nil {
req.Header.Set("x-ms-lease-id", *leaseID)
}
@@ -306,15 +307,15 @@ func (client blockBlobClient) stageBlockResponder(resp pipeline.Response) (pipel
//
// blockID is a valid Base64 string value that identifies the block. Prior to encoding, the string must be less than or
// equal to 64 bytes in size. For a given blob, the length of the value specified for the blockid parameter must be the
-// same size for each block. contentLength is the length of the request. sourceURL is specifiy an URL to the copy
-// source. sourceRange is bytes of source data in the specified range. sourceContentMD5 is specify the md5 calculated
-// for the range of bytes that must be read from the copy source. timeout is the timeout parameter is expressed in
-// seconds. For more information, see Setting
-// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the container's
+// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's
// lease is active and matches this ID. requestID is provides a client-generated, opaque value with a 1 KB character
// limit that is recorded in the analytics logs when storage analytics logging is enabled.
-func (client blockBlobClient) StageBlockFromURL(ctx context.Context, blockID string, contentLength int64, sourceURL *string, sourceRange *string, sourceContentMD5 []byte, timeout *int32, leaseID *string, requestID *string) (*BlockBlobStageBlockFromURLResponse, error) {
+func (client blockBlobClient) StageBlockFromURL(ctx context.Context, blockID string, contentLength int64, sourceURL string, sourceRange *string, sourceContentMD5 []byte, timeout *int32, leaseID *string, requestID *string) (*BlockBlobStageBlockFromURLResponse, error) {
if err := validate([]validation{
{targetValue: timeout,
constraints: []constraint{{target: "timeout", name: null, rule: false,
@@ -333,7 +334,7 @@ func (client blockBlobClient) StageBlockFromURL(ctx context.Context, blockID str
}
// stageBlockFromURLPreparer prepares the StageBlockFromURL request.
-func (client blockBlobClient) stageBlockFromURLPreparer(blockID string, contentLength int64, sourceURL *string, sourceRange *string, sourceContentMD5 []byte, timeout *int32, leaseID *string, requestID *string) (pipeline.Request, error) {
+func (client blockBlobClient) stageBlockFromURLPreparer(blockID string, contentLength int64, sourceURL string, sourceRange *string, sourceContentMD5 []byte, timeout *int32, leaseID *string, requestID *string) (pipeline.Request, error) {
req, err := pipeline.NewRequest("PUT", client.url, nil)
if err != nil {
return req, pipeline.NewError(err, "failed to create request")
@@ -346,9 +347,7 @@ func (client blockBlobClient) stageBlockFromURLPreparer(blockID string, contentL
params.Set("comp", "block")
req.URL.RawQuery = params.Encode()
req.Header.Set("Content-Length", strconv.FormatInt(contentLength, 10))
- if sourceURL != nil {
- req.Header.Set("x-ms-copy-source", *sourceURL)
- }
+ req.Header.Set("x-ms-copy-source", sourceURL)
if sourceRange != nil {
req.Header.Set("x-ms-source-range", *sourceRange)
}
@@ -397,27 +396,24 @@ func (client blockBlobClient) stageBlockFromURLResponder(resp pipeline.Response)
// destination blob. If one or more name-value pairs are specified, the destination blob is created with the specified
// metadata, and metadata is not copied from the source blob or file. Note that beginning with version 2009-09-19,
// metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing Containers, Blobs, and
-// Metadata for more information. leaseID is if specified, the operation only succeeds if the container's lease is
+// Metadata for more information. leaseID is if specified, the operation only succeeds if the resource's lease is
// active and matches this ID. blobContentDisposition is optional. Sets the blob's Content-Disposition header.
// ifModifiedSince is specify this header value to operate only on a blob if it has been modified since the specified
// date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if it has not been modified
-// since the specified date/time. ifMatches is specify an ETag value to operate only on blobs with a matching value.
+// since the specified date/time. ifMatch is specify an ETag value to operate only on blobs with a matching value.
// ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. requestID is provides a
// client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage
// analytics logging is enabled.
-func (client blockBlobClient) Upload(ctx context.Context, body io.ReadSeeker, contentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*BlockBlobUploadResponse, error) {
+func (client blockBlobClient) Upload(ctx context.Context, body io.ReadSeeker, contentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlockBlobUploadResponse, error) {
if err := validate([]validation{
{targetValue: body,
constraints: []constraint{{target: "body", name: null, rule: true, chain: nil}}},
{targetValue: timeout,
constraints: []constraint{{target: "timeout", name: null, rule: false,
- chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}},
- {targetValue: metadata,
- constraints: []constraint{{target: "metadata", name: null, rule: false,
- chain: []constraint{{target: "metadata", name: pattern, rule: `^[a-zA-Z]+$`, chain: nil}}}}}}); err != nil {
+ chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil {
return nil, err
}
- req, err := client.uploadPreparer(body, contentLength, timeout, blobContentType, blobContentEncoding, blobContentLanguage, blobContentMD5, blobCacheControl, metadata, leaseID, blobContentDisposition, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID)
+ req, err := client.uploadPreparer(body, contentLength, timeout, blobContentType, blobContentEncoding, blobContentLanguage, blobContentMD5, blobCacheControl, metadata, leaseID, blobContentDisposition, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID)
if err != nil {
return nil, err
}
@@ -429,7 +425,7 @@ func (client blockBlobClient) Upload(ctx context.Context, body io.ReadSeeker, co
}
// uploadPreparer prepares the Upload request.
-func (client blockBlobClient) uploadPreparer(body io.ReadSeeker, contentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
+func (client blockBlobClient) uploadPreparer(body io.ReadSeeker, contentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
req, err := pipeline.NewRequest("PUT", client.url, body)
if err != nil {
return req, pipeline.NewError(err, "failed to create request")
@@ -472,8 +468,8 @@ func (client blockBlobClient) uploadPreparer(body io.ReadSeeker, contentLength i
if ifUnmodifiedSince != nil {
req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123))
}
- if ifMatches != nil {
- req.Header.Set("If-Match", string(*ifMatches))
+ if ifMatch != nil {
+ req.Header.Set("If-Match", string(*ifMatch))
}
if ifNoneMatch != nil {
req.Header.Set("If-None-Match", string(*ifNoneMatch))
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_client.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_client.go
similarity index 100%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_client.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_client.go
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_container.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_container.go
similarity index 94%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_container.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_container.go
index 3e744fcbed..599e8118cc 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_container.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_container.go
@@ -7,14 +7,13 @@ import (
"bytes"
"context"
"encoding/xml"
+ "github.com/Azure/azure-pipeline-go/pipeline"
"io"
"io/ioutil"
"net/http"
"net/url"
"strconv"
"time"
-
- "github.com/Azure/azure-pipeline-go/pipeline"
)
// containerClient is the client for the Container methods of the Azblob service.
@@ -179,10 +178,10 @@ func (client containerClient) breakLeaseResponder(resp pipeline.Response) (pipel
// ChangeLease [Update] establishes and manages a lock on a container for delete operations. The lock duration can be
// 15 to 60 seconds, or can be infinite
//
-// leaseID is if specified, the operation only succeeds if the container's lease is active and matches this ID.
-// proposedLeaseID is proposed lease ID, in a GUID string format. The Blob service returns 400 (Invalid request) if the
-// proposed lease ID is not in the correct format. See Guid Constructor (String) for a list of valid GUID string
-// formats. timeout is the timeout parameter is expressed in seconds. For more information, see Setting
// Timeouts for Blob Service Operations. ifModifiedSince is specify this header value to operate only on a blob if
// it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only
@@ -264,10 +263,7 @@ func (client containerClient) Create(ctx context.Context, timeout *int32, metada
if err := validate([]validation{
{targetValue: timeout,
constraints: []constraint{{target: "timeout", name: null, rule: false,
- chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}},
- {targetValue: metadata,
- constraints: []constraint{{target: "metadata", name: null, rule: false,
- chain: []constraint{{target: "metadata", name: pattern, rule: `^[a-zA-Z]+$`, chain: nil}}}}}}); err != nil {
+ chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil {
return nil, err
}
req, err := client.createPreparer(timeout, metadata, access, requestID)
@@ -324,7 +320,7 @@ func (client containerClient) createResponder(resp pipeline.Response) (pipeline.
//
// timeout is the timeout parameter is expressed in seconds. For more information, see Setting
-// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the container's
+// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's
// lease is active and matches this ID. ifModifiedSince is specify this header value to operate only on a blob if it
// has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a
// blob if it has not been modified since the specified date/time. requestID is provides a client-generated, opaque
@@ -391,7 +387,7 @@ func (client containerClient) deleteResponder(resp pipeline.Response) (pipeline.
//
// timeout is the timeout parameter is expressed in seconds. For more information, see Setting
-// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the container's
+// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's
// lease is active and matches this ID. requestID is provides a client-generated, opaque value with a 1 KB character
// limit that is recorded in the analytics logs when storage analytics logging is enabled.
func (client containerClient) GetAccessPolicy(ctx context.Context, timeout *int32, leaseID *string, requestID *string) (*SignedIdentifiers, error) {
@@ -448,7 +444,7 @@ func (client containerClient) getAccessPolicyResponder(resp pipeline.Response) (
defer resp.Response().Body.Close()
b, err := ioutil.ReadAll(resp.Response().Body)
if err != nil {
- return result, NewResponseError(err, resp.Response(), "failed to read response body")
+ return result, err
}
if len(b) > 0 {
b = removeBOM(b)
@@ -460,12 +456,50 @@ func (client containerClient) getAccessPolicyResponder(resp pipeline.Response) (
return result, nil
}
+// GetAccountInfo returns the sku name and account kind
+func (client containerClient) GetAccountInfo(ctx context.Context) (*ContainerGetAccountInfoResponse, error) {
+ req, err := client.getAccountInfoPreparer()
+ if err != nil {
+ return nil, err
+ }
+ resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.getAccountInfoResponder}, req)
+ if err != nil {
+ return nil, err
+ }
+ return resp.(*ContainerGetAccountInfoResponse), err
+}
+
+// getAccountInfoPreparer prepares the GetAccountInfo request.
+func (client containerClient) getAccountInfoPreparer() (pipeline.Request, error) {
+ req, err := pipeline.NewRequest("GET", client.url, nil)
+ if err != nil {
+ return req, pipeline.NewError(err, "failed to create request")
+ }
+ params := req.URL.Query()
+ params.Set("restype", "account")
+ params.Set("comp", "properties")
+ req.URL.RawQuery = params.Encode()
+ req.Header.Set("x-ms-version", ServiceVersion)
+ return req, nil
+}
+
+// getAccountInfoResponder handles the response to the GetAccountInfo request.
+func (client containerClient) getAccountInfoResponder(resp pipeline.Response) (pipeline.Response, error) {
+ err := validateResponse(resp, http.StatusOK)
+ if resp == nil {
+ return nil, err
+ }
+ io.Copy(ioutil.Discard, resp.Response().Body)
+ resp.Response().Body.Close()
+ return &ContainerGetAccountInfoResponse{rawResponse: resp.Response()}, err
+}
+
// GetProperties returns all user-defined metadata and system properties for the specified container. The data returned
// does not include the container's list of blobs
//
// timeout is the timeout parameter is expressed in seconds. For more information, see Setting
-// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the container's
+// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's
// lease is active and matches this ID. requestID is provides a client-generated, opaque value with a 1 KB character
// limit that is recorded in the analytics logs when storage analytics logging is enabled.
func (client containerClient) GetProperties(ctx context.Context, timeout *int32, leaseID *string, requestID *string) (*ContainerGetPropertiesResponse, error) {
@@ -601,7 +635,7 @@ func (client containerClient) listBlobFlatSegmentResponder(resp pipeline.Respons
defer resp.Response().Body.Close()
b, err := ioutil.ReadAll(resp.Response().Body)
if err != nil {
- return result, NewResponseError(err, resp.Response(), "failed to read response body")
+ return result, err
}
if len(b) > 0 {
b = removeBOM(b)
@@ -699,7 +733,7 @@ func (client containerClient) listBlobHierarchySegmentResponder(resp pipeline.Re
defer resp.Response().Body.Close()
b, err := ioutil.ReadAll(resp.Response().Body)
if err != nil {
- return result, NewResponseError(err, resp.Response(), "failed to read response body")
+ return result, err
}
if len(b) > 0 {
b = removeBOM(b)
@@ -714,8 +748,8 @@ func (client containerClient) listBlobHierarchySegmentResponder(resp pipeline.Re
// ReleaseLease [Update] establishes and manages a lock on a container for delete operations. The lock duration can be
// 15 to 60 seconds, or can be infinite
//
-// leaseID is if specified, the operation only succeeds if the container's lease is active and matches this ID. timeout
-// is the timeout parameter is expressed in seconds. For more information, see Setting
// Timeouts for Blob Service Operations. ifModifiedSince is specify this header value to operate only on a blob if
// it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only
@@ -782,8 +816,8 @@ func (client containerClient) releaseLeaseResponder(resp pipeline.Response) (pip
// RenewLease [Update] establishes and manages a lock on a container for delete operations. The lock duration can be 15
// to 60 seconds, or can be infinite
//
-// leaseID is if specified, the operation only succeeds if the container's lease is active and matches this ID. timeout
-// is the timeout parameter is expressed in seconds. For more information, see Setting
// Timeouts for Blob Service Operations. ifModifiedSince is specify this header value to operate only on a blob if
// it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only
@@ -853,7 +887,7 @@ func (client containerClient) renewLeaseResponder(resp pipeline.Response) (pipel
// containerACL is the acls for the container timeout is the timeout parameter is expressed in seconds. For more
// information, see Setting
-// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the container's
+// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's
// lease is active and matches this ID. access is specifies whether data in the container may be accessed publicly and
// the level of access ifModifiedSince is specify this header value to operate only on a blob if it has been modified
// since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if it has
@@ -933,7 +967,7 @@ func (client containerClient) setAccessPolicyResponder(resp pipeline.Response) (
//
// timeout is the timeout parameter is expressed in seconds. For more information, see Setting
-// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the container's
+// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's
// lease is active and matches this ID. metadata is optional. Specifies a user-defined name-value pair associated with
// the blob. If no name-value pairs are specified, the operation will copy the metadata from the source blob or file to
// the destination blob. If one or more name-value pairs are specified, the destination blob is created with the
@@ -946,10 +980,7 @@ func (client containerClient) SetMetadata(ctx context.Context, timeout *int32, l
if err := validate([]validation{
{targetValue: timeout,
constraints: []constraint{{target: "timeout", name: null, rule: false,
- chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}},
- {targetValue: metadata,
- constraints: []constraint{{target: "metadata", name: null, rule: false,
- chain: []constraint{{target: "metadata", name: pattern, rule: `^[a-zA-Z]+$`, chain: nil}}}}}}); err != nil {
+ chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil {
return nil, err
}
req, err := client.setMetadataPreparer(timeout, leaseID, metadata, ifModifiedSince, requestID)
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_models.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_models.go
similarity index 90%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_models.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_models.go
index 3d8114ae6b..5c0434f50f 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_models.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_models.go
@@ -6,6 +6,7 @@ package azblob
import (
"encoding/base64"
"encoding/xml"
+ "errors"
"io"
"net/http"
"reflect"
@@ -86,6 +87,12 @@ func joinConst(s interface{}, sep string) string {
return strings.Join(ss, sep)
}
+func validateError(err error) {
+ if err != nil {
+ panic(err)
+ }
+}
+
// AccessTierType enumerates the values for access tier type.
type AccessTierType string
@@ -119,6 +126,25 @@ func PossibleAccessTierTypeValues() []AccessTierType {
return []AccessTierType{AccessTierArchive, AccessTierCool, AccessTierHot, AccessTierNone, AccessTierP10, AccessTierP20, AccessTierP30, AccessTierP4, AccessTierP40, AccessTierP50, AccessTierP6}
}
+// AccountKindType enumerates the values for account kind type.
+type AccountKindType string
+
+const (
+ // AccountKindBlobStorage ...
+ AccountKindBlobStorage AccountKindType = "BlobStorage"
+ // AccountKindNone represents an empty AccountKindType.
+ AccountKindNone AccountKindType = ""
+ // AccountKindStorage ...
+ AccountKindStorage AccountKindType = "Storage"
+ // AccountKindStorageV2 ...
+ AccountKindStorageV2 AccountKindType = "StorageV2"
+)
+
+// PossibleAccountKindTypeValues returns an array of possible values for the AccountKindType const type.
+func PossibleAccountKindTypeValues() []AccountKindType {
+ return []AccountKindType{AccountKindBlobStorage, AccountKindNone, AccountKindStorage, AccountKindStorageV2}
+}
+
// ArchiveStatusType enumerates the values for archive status type.
type ArchiveStatusType string
@@ -362,6 +388,29 @@ func PossibleSequenceNumberActionTypeValues() []SequenceNumberActionType {
return []SequenceNumberActionType{SequenceNumberActionIncrement, SequenceNumberActionMax, SequenceNumberActionNone, SequenceNumberActionUpdate}
}
+// SkuNameType enumerates the values for sku name type.
+type SkuNameType string
+
+const (
+ // SkuNameNone represents an empty SkuNameType.
+ SkuNameNone SkuNameType = ""
+ // SkuNamePremiumLRS ...
+ SkuNamePremiumLRS SkuNameType = "Premium_LRS"
+ // SkuNameStandardGRS ...
+ SkuNameStandardGRS SkuNameType = "Standard_GRS"
+ // SkuNameStandardLRS ...
+ SkuNameStandardLRS SkuNameType = "Standard_LRS"
+ // SkuNameStandardRAGRS ...
+ SkuNameStandardRAGRS SkuNameType = "Standard_RAGRS"
+ // SkuNameStandardZRS ...
+ SkuNameStandardZRS SkuNameType = "Standard_ZRS"
+)
+
+// PossibleSkuNameTypeValues returns an array of possible values for the SkuNameType const type.
+func PossibleSkuNameTypeValues() []SkuNameType {
+ return []SkuNameType{SkuNameNone, SkuNamePremiumLRS, SkuNameStandardGRS, SkuNameStandardLRS, SkuNameStandardRAGRS, SkuNameStandardZRS}
+}
+
// StorageErrorCodeType enumerates the values for storage error code type.
type StorageErrorCodeType string
@@ -595,18 +644,12 @@ type AccessPolicy struct {
// MarshalXML implements the xml.Marshaler interface for AccessPolicy.
func (ap AccessPolicy) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if reflect.TypeOf((*AccessPolicy)(nil)).Elem().Size() != reflect.TypeOf((*accessPolicy)(nil)).Elem().Size() {
- panic("size mismatch between AccessPolicy and accessPolicy")
- }
ap2 := (*accessPolicy)(unsafe.Pointer(&ap))
return e.EncodeElement(*ap2, start)
}
// UnmarshalXML implements the xml.Unmarshaler interface for AccessPolicy.
func (ap *AccessPolicy) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
- if reflect.TypeOf((*AccessPolicy)(nil)).Elem().Size() != reflect.TypeOf((*accessPolicy)(nil)).Elem().Size() {
- panic("size mismatch between AccessPolicy and accessPolicy")
- }
ap2 := (*accessPolicy)(unsafe.Pointer(ap))
return d.DecodeElement(ap2, &start)
}
@@ -644,7 +687,7 @@ func (ababr AppendBlobAppendBlockResponse) BlobCommittedBlockCount() int32 {
}
i, err := strconv.ParseInt(s, 10, 32)
if err != nil {
- panic(err)
+ i = 0
}
return int32(i)
}
@@ -657,7 +700,7 @@ func (ababr AppendBlobAppendBlockResponse) ContentMD5() []byte {
}
b, err := base64.StdEncoding.DecodeString(s)
if err != nil {
- panic(err)
+ b = nil
}
return b
}
@@ -670,7 +713,7 @@ func (ababr AppendBlobAppendBlockResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -693,7 +736,7 @@ func (ababr AppendBlobAppendBlockResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -736,7 +779,7 @@ func (abcr AppendBlobCreateResponse) ContentMD5() []byte {
}
b, err := base64.StdEncoding.DecodeString(s)
if err != nil {
- panic(err)
+ b = nil
}
return b
}
@@ -749,7 +792,7 @@ func (abcr AppendBlobCreateResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -777,7 +820,7 @@ func (abcr AppendBlobCreateResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -820,7 +863,7 @@ func (bacfur BlobAbortCopyFromURLResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -868,7 +911,7 @@ func (balr BlobAcquireLeaseResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -891,7 +934,7 @@ func (balr BlobAcquireLeaseResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -939,7 +982,7 @@ func (bblr BlobBreakLeaseResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -962,7 +1005,7 @@ func (bblr BlobBreakLeaseResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -975,7 +1018,7 @@ func (bblr BlobBreakLeaseResponse) LeaseTime() int32 {
}
i, err := strconv.ParseInt(s, 10, 32)
if err != nil {
- panic(err)
+ i = 0
}
return int32(i)
}
@@ -1018,7 +1061,7 @@ func (bclr BlobChangeLeaseResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -1041,7 +1084,7 @@ func (bclr BlobChangeLeaseResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -1089,7 +1132,7 @@ func (bcsr BlobCreateSnapshotResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -1112,7 +1155,7 @@ func (bcsr BlobCreateSnapshotResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -1160,7 +1203,7 @@ func (bdr BlobDeleteResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -1180,11 +1223,71 @@ func (bdr BlobDeleteResponse) Version() string {
return bdr.rawResponse.Header.Get("x-ms-version")
}
-// BlobFlatList ...
-type BlobFlatList struct {
+// BlobFlatListSegment ...
+type BlobFlatListSegment struct {
+ // XMLName is used for marshalling and is subject to removal in a future release.
+ XMLName xml.Name `xml:"Blobs"`
BlobItems []BlobItem `xml:"Blob"`
}
+// BlobGetAccountInfoResponse ...
+type BlobGetAccountInfoResponse struct {
+ rawResponse *http.Response
+}
+
+// Response returns the raw HTTP response object.
+func (bgair BlobGetAccountInfoResponse) Response() *http.Response {
+ return bgair.rawResponse
+}
+
+// StatusCode returns the HTTP status code of the response, e.g. 200.
+func (bgair BlobGetAccountInfoResponse) StatusCode() int {
+ return bgair.rawResponse.StatusCode
+}
+
+// Status returns the HTTP status message of the response, e.g. "200 OK".
+func (bgair BlobGetAccountInfoResponse) Status() string {
+ return bgair.rawResponse.Status
+}
+
+// AccountKind returns the value for header x-ms-account-kind.
+func (bgair BlobGetAccountInfoResponse) AccountKind() AccountKindType {
+ return AccountKindType(bgair.rawResponse.Header.Get("x-ms-account-kind"))
+}
+
+// Date returns the value for header Date.
+func (bgair BlobGetAccountInfoResponse) Date() time.Time {
+ s := bgair.rawResponse.Header.Get("Date")
+ if s == "" {
+ return time.Time{}
+ }
+ t, err := time.Parse(time.RFC1123, s)
+ if err != nil {
+ t = time.Time{}
+ }
+ return t
+}
+
+// ErrorCode returns the value for header x-ms-error-code.
+func (bgair BlobGetAccountInfoResponse) ErrorCode() string {
+ return bgair.rawResponse.Header.Get("x-ms-error-code")
+}
+
+// RequestID returns the value for header x-ms-request-id.
+func (bgair BlobGetAccountInfoResponse) RequestID() string {
+ return bgair.rawResponse.Header.Get("x-ms-request-id")
+}
+
+// SkuName returns the value for header x-ms-sku-name.
+func (bgair BlobGetAccountInfoResponse) SkuName() SkuNameType {
+ return SkuNameType(bgair.rawResponse.Header.Get("x-ms-sku-name"))
+}
+
+// Version returns the value for header x-ms-version.
+func (bgair BlobGetAccountInfoResponse) Version() string {
+ return bgair.rawResponse.Header.Get("x-ms-version")
+}
+
// BlobGetPropertiesResponse ...
type BlobGetPropertiesResponse struct {
rawResponse *http.Response
@@ -1228,6 +1331,19 @@ func (bgpr BlobGetPropertiesResponse) AccessTier() string {
return bgpr.rawResponse.Header.Get("x-ms-access-tier")
}
+// AccessTierChangeTime returns the value for header x-ms-access-tier-change-time.
+func (bgpr BlobGetPropertiesResponse) AccessTierChangeTime() time.Time {
+ s := bgpr.rawResponse.Header.Get("x-ms-access-tier-change-time")
+ if s == "" {
+ return time.Time{}
+ }
+ t, err := time.Parse(time.RFC1123, s)
+ if err != nil {
+ t = time.Time{}
+ }
+ return t
+}
+
// AccessTierInferred returns the value for header x-ms-access-tier-inferred.
func (bgpr BlobGetPropertiesResponse) AccessTierInferred() string {
return bgpr.rawResponse.Header.Get("x-ms-access-tier-inferred")
@@ -1246,7 +1362,7 @@ func (bgpr BlobGetPropertiesResponse) BlobCommittedBlockCount() int32 {
}
i, err := strconv.ParseInt(s, 10, 32)
if err != nil {
- panic(err)
+ i = 0
}
return int32(i)
}
@@ -1259,7 +1375,7 @@ func (bgpr BlobGetPropertiesResponse) BlobSequenceNumber() int64 {
}
i, err := strconv.ParseInt(s, 10, 64)
if err != nil {
- panic(err)
+ i = 0
}
return i
}
@@ -1297,7 +1413,7 @@ func (bgpr BlobGetPropertiesResponse) ContentLength() int64 {
}
i, err := strconv.ParseInt(s, 10, 64)
if err != nil {
- panic(err)
+ i = 0
}
return i
}
@@ -1310,7 +1426,7 @@ func (bgpr BlobGetPropertiesResponse) ContentMD5() []byte {
}
b, err := base64.StdEncoding.DecodeString(s)
if err != nil {
- panic(err)
+ b = nil
}
return b
}
@@ -1328,7 +1444,7 @@ func (bgpr BlobGetPropertiesResponse) CopyCompletionTime() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -1358,6 +1474,19 @@ func (bgpr BlobGetPropertiesResponse) CopyStatusDescription() string {
return bgpr.rawResponse.Header.Get("x-ms-copy-status-description")
}
+// CreationTime returns the value for header x-ms-creation-time.
+func (bgpr BlobGetPropertiesResponse) CreationTime() time.Time {
+ s := bgpr.rawResponse.Header.Get("x-ms-creation-time")
+ if s == "" {
+ return time.Time{}
+ }
+ t, err := time.Parse(time.RFC1123, s)
+ if err != nil {
+ t = time.Time{}
+ }
+ return t
+}
+
// Date returns the value for header Date.
func (bgpr BlobGetPropertiesResponse) Date() time.Time {
s := bgpr.rawResponse.Header.Get("Date")
@@ -1366,7 +1495,7 @@ func (bgpr BlobGetPropertiesResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -1404,7 +1533,7 @@ func (bgpr BlobGetPropertiesResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -1434,14 +1563,18 @@ func (bgpr BlobGetPropertiesResponse) Version() string {
return bgpr.rawResponse.Header.Get("x-ms-version")
}
-// BlobHierarchyList ...
-type BlobHierarchyList struct {
+// BlobHierarchyListSegment ...
+type BlobHierarchyListSegment struct {
+ // XMLName is used for marshalling and is subject to removal in a future release.
+ XMLName xml.Name `xml:"Blobs"`
BlobPrefixes []BlobPrefix `xml:"BlobPrefix"`
BlobItems []BlobItem `xml:"Blob"`
}
// BlobItem - An Azure Storage blob
type BlobItem struct {
+ // XMLName is used for marshalling and is subject to removal in a future release.
+ XMLName xml.Name `xml:"Blob"`
Name string `xml:"Name"`
Deleted bool `xml:"Deleted"`
Snapshot string `xml:"Snapshot"`
@@ -1456,8 +1589,11 @@ type BlobPrefix struct {
// BlobProperties - Properties of a blob
type BlobProperties struct {
- LastModified time.Time `xml:"Last-Modified"`
- Etag ETag `xml:"Etag"`
+ // XMLName is used for marshalling and is subject to removal in a future release.
+ XMLName xml.Name `xml:"Properties"`
+ CreationTime *time.Time `xml:"Creation-Time"`
+ LastModified time.Time `xml:"Last-Modified"`
+ Etag ETag `xml:"Etag"`
// ContentLength - Size in bytes
ContentLength *int64 `xml:"Content-Length"`
ContentType *string `xml:"Content-Type"`
@@ -1491,23 +1627,18 @@ type BlobProperties struct {
AccessTier AccessTierType `xml:"AccessTier"`
AccessTierInferred *bool `xml:"AccessTierInferred"`
// ArchiveStatus - Possible values include: 'ArchiveStatusRehydratePendingToHot', 'ArchiveStatusRehydratePendingToCool', 'ArchiveStatusNone'
- ArchiveStatus ArchiveStatusType `xml:"ArchiveStatus"`
+ ArchiveStatus ArchiveStatusType `xml:"ArchiveStatus"`
+ AccessTierChangeTime *time.Time `xml:"AccessTierChangeTime"`
}
// MarshalXML implements the xml.Marshaler interface for BlobProperties.
func (bp BlobProperties) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if reflect.TypeOf((*BlobProperties)(nil)).Elem().Size() != reflect.TypeOf((*blobProperties)(nil)).Elem().Size() {
- panic("size mismatch between BlobProperties and blobProperties")
- }
bp2 := (*blobProperties)(unsafe.Pointer(&bp))
return e.EncodeElement(*bp2, start)
}
// UnmarshalXML implements the xml.Unmarshaler interface for BlobProperties.
func (bp *BlobProperties) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
- if reflect.TypeOf((*BlobProperties)(nil)).Elem().Size() != reflect.TypeOf((*blobProperties)(nil)).Elem().Size() {
- panic("size mismatch between BlobProperties and blobProperties")
- }
bp2 := (*blobProperties)(unsafe.Pointer(bp))
return d.DecodeElement(bp2, &start)
}
@@ -1540,7 +1671,7 @@ func (brlr BlobReleaseLeaseResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -1563,7 +1694,7 @@ func (brlr BlobReleaseLeaseResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -1606,7 +1737,7 @@ func (brlr BlobRenewLeaseResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -1629,7 +1760,7 @@ func (brlr BlobRenewLeaseResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -1677,7 +1808,7 @@ func (bshhr BlobSetHTTPHeadersResponse) BlobSequenceNumber() int64 {
}
i, err := strconv.ParseInt(s, 10, 64)
if err != nil {
- panic(err)
+ i = 0
}
return i
}
@@ -1690,7 +1821,7 @@ func (bshhr BlobSetHTTPHeadersResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -1713,7 +1844,7 @@ func (bshhr BlobSetHTTPHeadersResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -1756,7 +1887,7 @@ func (bsmr BlobSetMetadataResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -1784,7 +1915,7 @@ func (bsmr BlobSetMetadataResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -1872,7 +2003,7 @@ func (bscfur BlobStartCopyFromURLResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -1895,7 +2026,7 @@ func (bscfur BlobStartCopyFromURLResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -1938,7 +2069,7 @@ func (bur BlobUndeleteResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -1994,7 +2125,7 @@ func (bbcblr BlockBlobCommitBlockListResponse) ContentMD5() []byte {
}
b, err := base64.StdEncoding.DecodeString(s)
if err != nil {
- panic(err)
+ b = nil
}
return b
}
@@ -2007,7 +2138,7 @@ func (bbcblr BlockBlobCommitBlockListResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -2035,7 +2166,7 @@ func (bbcblr BlockBlobCommitBlockListResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -2078,7 +2209,7 @@ func (bbsbfur BlockBlobStageBlockFromURLResponse) ContentMD5() []byte {
}
b, err := base64.StdEncoding.DecodeString(s)
if err != nil {
- panic(err)
+ b = nil
}
return b
}
@@ -2091,7 +2222,7 @@ func (bbsbfur BlockBlobStageBlockFromURLResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -2144,7 +2275,7 @@ func (bbsbr BlockBlobStageBlockResponse) ContentMD5() []byte {
}
b, err := base64.StdEncoding.DecodeString(s)
if err != nil {
- panic(err)
+ b = nil
}
return b
}
@@ -2157,7 +2288,7 @@ func (bbsbr BlockBlobStageBlockResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -2210,7 +2341,7 @@ func (bbur BlockBlobUploadResponse) ContentMD5() []byte {
}
b, err := base64.StdEncoding.DecodeString(s)
if err != nil {
- panic(err)
+ b = nil
}
return b
}
@@ -2223,7 +2354,7 @@ func (bbur BlockBlobUploadResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -2251,7 +2382,7 @@ func (bbur BlockBlobUploadResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -2296,7 +2427,7 @@ func (bl BlockList) BlobContentLength() int64 {
}
i, err := strconv.ParseInt(s, 10, 64)
if err != nil {
- panic(err)
+ i = 0
}
return i
}
@@ -2314,7 +2445,7 @@ func (bl BlockList) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -2337,7 +2468,7 @@ func (bl BlockList) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -2395,7 +2526,7 @@ func (calr ContainerAcquireLeaseResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -2418,7 +2549,7 @@ func (calr ContainerAcquireLeaseResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -2466,7 +2597,7 @@ func (cblr ContainerBreakLeaseResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -2489,7 +2620,7 @@ func (cblr ContainerBreakLeaseResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -2502,7 +2633,7 @@ func (cblr ContainerBreakLeaseResponse) LeaseTime() int32 {
}
i, err := strconv.ParseInt(s, 10, 32)
if err != nil {
- panic(err)
+ i = 0
}
return int32(i)
}
@@ -2545,7 +2676,7 @@ func (cclr ContainerChangeLeaseResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -2568,7 +2699,7 @@ func (cclr ContainerChangeLeaseResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -2616,7 +2747,7 @@ func (ccr ContainerCreateResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -2639,7 +2770,7 @@ func (ccr ContainerCreateResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -2682,7 +2813,7 @@ func (cdr ContainerDeleteResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -2702,6 +2833,64 @@ func (cdr ContainerDeleteResponse) Version() string {
return cdr.rawResponse.Header.Get("x-ms-version")
}
+// ContainerGetAccountInfoResponse ...
+type ContainerGetAccountInfoResponse struct {
+ rawResponse *http.Response
+}
+
+// Response returns the raw HTTP response object.
+func (cgair ContainerGetAccountInfoResponse) Response() *http.Response {
+ return cgair.rawResponse
+}
+
+// StatusCode returns the HTTP status code of the response, e.g. 200.
+func (cgair ContainerGetAccountInfoResponse) StatusCode() int {
+ return cgair.rawResponse.StatusCode
+}
+
+// Status returns the HTTP status message of the response, e.g. "200 OK".
+func (cgair ContainerGetAccountInfoResponse) Status() string {
+ return cgair.rawResponse.Status
+}
+
+// AccountKind returns the value for header x-ms-account-kind.
+func (cgair ContainerGetAccountInfoResponse) AccountKind() AccountKindType {
+ return AccountKindType(cgair.rawResponse.Header.Get("x-ms-account-kind"))
+}
+
+// Date returns the value for header Date.
+func (cgair ContainerGetAccountInfoResponse) Date() time.Time {
+ s := cgair.rawResponse.Header.Get("Date")
+ if s == "" {
+ return time.Time{}
+ }
+ t, err := time.Parse(time.RFC1123, s)
+ if err != nil {
+ t = time.Time{}
+ }
+ return t
+}
+
+// ErrorCode returns the value for header x-ms-error-code.
+func (cgair ContainerGetAccountInfoResponse) ErrorCode() string {
+ return cgair.rawResponse.Header.Get("x-ms-error-code")
+}
+
+// RequestID returns the value for header x-ms-request-id.
+func (cgair ContainerGetAccountInfoResponse) RequestID() string {
+ return cgair.rawResponse.Header.Get("x-ms-request-id")
+}
+
+// SkuName returns the value for header x-ms-sku-name.
+func (cgair ContainerGetAccountInfoResponse) SkuName() SkuNameType {
+ return SkuNameType(cgair.rawResponse.Header.Get("x-ms-sku-name"))
+}
+
+// Version returns the value for header x-ms-version.
+func (cgair ContainerGetAccountInfoResponse) Version() string {
+ return cgair.rawResponse.Header.Get("x-ms-version")
+}
+
// ContainerGetPropertiesResponse ...
type ContainerGetPropertiesResponse struct {
rawResponse *http.Response
@@ -2748,7 +2937,7 @@ func (cgpr ContainerGetPropertiesResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -2763,6 +2952,16 @@ func (cgpr ContainerGetPropertiesResponse) ETag() ETag {
return ETag(cgpr.rawResponse.Header.Get("ETag"))
}
+// HasImmutabilityPolicy returns the value for header x-ms-has-immutability-policy.
+func (cgpr ContainerGetPropertiesResponse) HasImmutabilityPolicy() string {
+ return cgpr.rawResponse.Header.Get("x-ms-has-immutability-policy")
+}
+
+// HasLegalHold returns the value for header x-ms-has-legal-hold.
+func (cgpr ContainerGetPropertiesResponse) HasLegalHold() string {
+ return cgpr.rawResponse.Header.Get("x-ms-has-legal-hold")
+}
+
// LastModified returns the value for header Last-Modified.
func (cgpr ContainerGetPropertiesResponse) LastModified() time.Time {
s := cgpr.rawResponse.Header.Get("Last-Modified")
@@ -2771,7 +2970,7 @@ func (cgpr ContainerGetPropertiesResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -2803,6 +3002,8 @@ func (cgpr ContainerGetPropertiesResponse) Version() string {
// ContainerItem - An Azure Storage container
type ContainerItem struct {
+ // XMLName is used for marshalling and is subject to removal in a future release.
+ XMLName xml.Name `xml:"Container"`
Name string `xml:"Name"`
Properties ContainerProperties `xml:"Properties"`
Metadata Metadata `xml:"Metadata"`
@@ -2819,23 +3020,19 @@ type ContainerProperties struct {
// LeaseDuration - Possible values include: 'LeaseDurationInfinite', 'LeaseDurationFixed', 'LeaseDurationNone'
LeaseDuration LeaseDurationType `xml:"LeaseDuration"`
// PublicAccess - Possible values include: 'PublicAccessContainer', 'PublicAccessBlob', 'PublicAccessNone'
- PublicAccess PublicAccessType `xml:"PublicAccess"`
+ PublicAccess PublicAccessType `xml:"PublicAccess"`
+ HasImmutabilityPolicy *bool `xml:"HasImmutabilityPolicy"`
+ HasLegalHold *bool `xml:"HasLegalHold"`
}
// MarshalXML implements the xml.Marshaler interface for ContainerProperties.
func (cp ContainerProperties) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if reflect.TypeOf((*ContainerProperties)(nil)).Elem().Size() != reflect.TypeOf((*containerProperties)(nil)).Elem().Size() {
- panic("size mismatch between ContainerProperties and containerProperties")
- }
cp2 := (*containerProperties)(unsafe.Pointer(&cp))
return e.EncodeElement(*cp2, start)
}
// UnmarshalXML implements the xml.Unmarshaler interface for ContainerProperties.
func (cp *ContainerProperties) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
- if reflect.TypeOf((*ContainerProperties)(nil)).Elem().Size() != reflect.TypeOf((*containerProperties)(nil)).Elem().Size() {
- panic("size mismatch between ContainerProperties and containerProperties")
- }
cp2 := (*containerProperties)(unsafe.Pointer(cp))
return d.DecodeElement(cp2, &start)
}
@@ -2868,7 +3065,7 @@ func (crlr ContainerReleaseLeaseResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -2891,7 +3088,7 @@ func (crlr ContainerReleaseLeaseResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -2934,7 +3131,7 @@ func (crlr ContainerRenewLeaseResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -2957,7 +3154,7 @@ func (crlr ContainerRenewLeaseResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -3005,7 +3202,7 @@ func (csapr ContainerSetAccessPolicyResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -3028,7 +3225,7 @@ func (csapr ContainerSetAccessPolicyResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -3071,7 +3268,7 @@ func (csmr ContainerSetMetadataResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -3094,7 +3291,7 @@ func (csmr ContainerSetMetadataResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -3126,7 +3323,7 @@ type CorsRule struct {
MaxAgeInSeconds int32 `xml:"MaxAgeInSeconds"`
}
-// downloadResponse ...
+// downloadResponse - Wraps the response from the blobClient.Download method.
type downloadResponse struct {
rawResponse *http.Response
}
@@ -3177,7 +3374,7 @@ func (dr downloadResponse) BlobCommittedBlockCount() int32 {
}
i, err := strconv.ParseInt(s, 10, 32)
if err != nil {
- panic(err)
+ i = 0
}
return int32(i)
}
@@ -3190,7 +3387,7 @@ func (dr downloadResponse) BlobContentMD5() []byte {
}
b, err := base64.StdEncoding.DecodeString(s)
if err != nil {
- panic(err)
+ b = nil
}
return b
}
@@ -3203,7 +3400,7 @@ func (dr downloadResponse) BlobSequenceNumber() int64 {
}
i, err := strconv.ParseInt(s, 10, 64)
if err != nil {
- panic(err)
+ i = 0
}
return i
}
@@ -3241,7 +3438,7 @@ func (dr downloadResponse) ContentLength() int64 {
}
i, err := strconv.ParseInt(s, 10, 64)
if err != nil {
- panic(err)
+ i = 0
}
return i
}
@@ -3254,7 +3451,7 @@ func (dr downloadResponse) ContentMD5() []byte {
}
b, err := base64.StdEncoding.DecodeString(s)
if err != nil {
- panic(err)
+ b = nil
}
return b
}
@@ -3277,7 +3474,7 @@ func (dr downloadResponse) CopyCompletionTime() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -3315,7 +3512,7 @@ func (dr downloadResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -3343,7 +3540,7 @@ func (dr downloadResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -3373,7 +3570,7 @@ func (dr downloadResponse) Version() string {
return dr.rawResponse.Header.Get("x-ms-version")
}
-// GeoReplication ...
+// GeoReplication - Geo-Replication information for the Secondary Storage Service
type GeoReplication struct {
// Status - The status of the secondary location. Possible values include: 'GeoReplicationStatusLive', 'GeoReplicationStatusBootstrap', 'GeoReplicationStatusUnavailable', 'GeoReplicationStatusNone'
Status GeoReplicationStatusType `xml:"Status"`
@@ -3383,18 +3580,12 @@ type GeoReplication struct {
// MarshalXML implements the xml.Marshaler interface for GeoReplication.
func (gr GeoReplication) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
- if reflect.TypeOf((*GeoReplication)(nil)).Elem().Size() != reflect.TypeOf((*geoReplication)(nil)).Elem().Size() {
- panic("size mismatch between GeoReplication and geoReplication")
- }
gr2 := (*geoReplication)(unsafe.Pointer(&gr))
return e.EncodeElement(*gr2, start)
}
// UnmarshalXML implements the xml.Unmarshaler interface for GeoReplication.
func (gr *GeoReplication) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
- if reflect.TypeOf((*GeoReplication)(nil)).Elem().Size() != reflect.TypeOf((*geoReplication)(nil)).Elem().Size() {
- panic("size mismatch between GeoReplication and geoReplication")
- }
gr2 := (*geoReplication)(unsafe.Pointer(gr))
return d.DecodeElement(gr2, &start)
}
@@ -3403,15 +3594,15 @@ func (gr *GeoReplication) UnmarshalXML(d *xml.Decoder, start xml.StartElement) e
type ListBlobsFlatSegmentResponse struct {
rawResponse *http.Response
// XMLName is used for marshalling and is subject to removal in a future release.
- XMLName xml.Name `xml:"EnumerationResults"`
- ServiceEndpoint string `xml:"ServiceEndpoint,attr"`
- ContainerName string `xml:"ContainerName,attr"`
- Prefix string `xml:"Prefix"`
- Marker string `xml:"Marker"`
- MaxResults int32 `xml:"MaxResults"`
- Delimiter string `xml:"Delimiter"`
- Segment BlobFlatList `xml:"Blobs"`
- NextMarker Marker `xml:"NextMarker"`
+ XMLName xml.Name `xml:"EnumerationResults"`
+ ServiceEndpoint string `xml:"ServiceEndpoint,attr"`
+ ContainerName string `xml:"ContainerName,attr"`
+ Prefix string `xml:"Prefix"`
+ Marker string `xml:"Marker"`
+ MaxResults int32 `xml:"MaxResults"`
+ Delimiter string `xml:"Delimiter"`
+ Segment BlobFlatListSegment `xml:"Blobs"`
+ NextMarker Marker `xml:"NextMarker"`
}
// Response returns the raw HTTP response object.
@@ -3442,7 +3633,7 @@ func (lbfsr ListBlobsFlatSegmentResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -3466,15 +3657,15 @@ func (lbfsr ListBlobsFlatSegmentResponse) Version() string {
type ListBlobsHierarchySegmentResponse struct {
rawResponse *http.Response
// XMLName is used for marshalling and is subject to removal in a future release.
- XMLName xml.Name `xml:"EnumerationResults"`
- ServiceEndpoint string `xml:"ServiceEndpoint,attr"`
- ContainerName string `xml:"ContainerName,attr"`
- Prefix string `xml:"Prefix"`
- Marker string `xml:"Marker"`
- MaxResults int32 `xml:"MaxResults"`
- Delimiter string `xml:"Delimiter"`
- Segment BlobHierarchyList `xml:"Blobs"`
- NextMarker Marker `xml:"NextMarker"`
+ XMLName xml.Name `xml:"EnumerationResults"`
+ ServiceEndpoint string `xml:"ServiceEndpoint,attr"`
+ ContainerName string `xml:"ContainerName,attr"`
+ Prefix string `xml:"Prefix"`
+ Marker string `xml:"Marker"`
+ MaxResults int32 `xml:"MaxResults"`
+ Delimiter string `xml:"Delimiter"`
+ Segment BlobHierarchyListSegment `xml:"Blobs"`
+ NextMarker Marker `xml:"NextMarker"`
}
// Response returns the raw HTTP response object.
@@ -3505,7 +3696,7 @@ func (lbhsr ListBlobsHierarchySegmentResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -3525,8 +3716,8 @@ func (lbhsr ListBlobsHierarchySegmentResponse) Version() string {
return lbhsr.rawResponse.Header.Get("x-ms-version")
}
-// ListContainersResponse - An enumeration of containers
-type ListContainersResponse struct {
+// ListContainersSegmentResponse - An enumeration of containers
+type ListContainersSegmentResponse struct {
rawResponse *http.Response
// XMLName is used for marshalling and is subject to removal in a future release.
XMLName xml.Name `xml:"EnumerationResults"`
@@ -3539,33 +3730,33 @@ type ListContainersResponse struct {
}
// Response returns the raw HTTP response object.
-func (lcr ListContainersResponse) Response() *http.Response {
- return lcr.rawResponse
+func (lcsr ListContainersSegmentResponse) Response() *http.Response {
+ return lcsr.rawResponse
}
// StatusCode returns the HTTP status code of the response, e.g. 200.
-func (lcr ListContainersResponse) StatusCode() int {
- return lcr.rawResponse.StatusCode
+func (lcsr ListContainersSegmentResponse) StatusCode() int {
+ return lcsr.rawResponse.StatusCode
}
// Status returns the HTTP status message of the response, e.g. "200 OK".
-func (lcr ListContainersResponse) Status() string {
- return lcr.rawResponse.Status
+func (lcsr ListContainersSegmentResponse) Status() string {
+ return lcsr.rawResponse.Status
}
// ErrorCode returns the value for header x-ms-error-code.
-func (lcr ListContainersResponse) ErrorCode() string {
- return lcr.rawResponse.Header.Get("x-ms-error-code")
+func (lcsr ListContainersSegmentResponse) ErrorCode() string {
+ return lcsr.rawResponse.Header.Get("x-ms-error-code")
}
// RequestID returns the value for header x-ms-request-id.
-func (lcr ListContainersResponse) RequestID() string {
- return lcr.rawResponse.Header.Get("x-ms-request-id")
+func (lcsr ListContainersSegmentResponse) RequestID() string {
+ return lcsr.rawResponse.Header.Get("x-ms-request-id")
}
// Version returns the value for header x-ms-version.
-func (lcr ListContainersResponse) Version() string {
- return lcr.rawResponse.Header.Get("x-ms-version")
+func (lcsr ListContainersSegmentResponse) Version() string {
+ return lcsr.rawResponse.Header.Get("x-ms-version")
}
// Logging - Azure Analytics Logging settings.
@@ -3581,7 +3772,7 @@ type Logging struct {
RetentionPolicy RetentionPolicy `xml:"RetentionPolicy"`
}
-// Metrics ...
+// Metrics - a summary of request statistics grouped by API in hour or minute aggregates for blobs
type Metrics struct {
// Version - The version of Storage Analytics to configure.
Version *string `xml:"Version"`
@@ -3620,7 +3811,7 @@ func (pbcpr PageBlobClearPagesResponse) BlobSequenceNumber() int64 {
}
i, err := strconv.ParseInt(s, 10, 64)
if err != nil {
- panic(err)
+ i = 0
}
return i
}
@@ -3633,7 +3824,7 @@ func (pbcpr PageBlobClearPagesResponse) ContentMD5() []byte {
}
b, err := base64.StdEncoding.DecodeString(s)
if err != nil {
- panic(err)
+ b = nil
}
return b
}
@@ -3646,7 +3837,7 @@ func (pbcpr PageBlobClearPagesResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -3669,7 +3860,7 @@ func (pbcpr PageBlobClearPagesResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -3722,7 +3913,7 @@ func (pbcir PageBlobCopyIncrementalResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -3745,7 +3936,7 @@ func (pbcir PageBlobCopyIncrementalResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -3788,7 +3979,7 @@ func (pbcr PageBlobCreateResponse) ContentMD5() []byte {
}
b, err := base64.StdEncoding.DecodeString(s)
if err != nil {
- panic(err)
+ b = nil
}
return b
}
@@ -3801,7 +3992,7 @@ func (pbcr PageBlobCreateResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -3829,7 +4020,7 @@ func (pbcr PageBlobCreateResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -3872,7 +4063,7 @@ func (pbrr PageBlobResizeResponse) BlobSequenceNumber() int64 {
}
i, err := strconv.ParseInt(s, 10, 64)
if err != nil {
- panic(err)
+ i = 0
}
return i
}
@@ -3885,7 +4076,7 @@ func (pbrr PageBlobResizeResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -3908,7 +4099,7 @@ func (pbrr PageBlobResizeResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -3951,7 +4142,7 @@ func (pbusnr PageBlobUpdateSequenceNumberResponse) BlobSequenceNumber() int64 {
}
i, err := strconv.ParseInt(s, 10, 64)
if err != nil {
- panic(err)
+ i = 0
}
return i
}
@@ -3964,7 +4155,7 @@ func (pbusnr PageBlobUpdateSequenceNumberResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -3987,7 +4178,7 @@ func (pbusnr PageBlobUpdateSequenceNumberResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -4030,7 +4221,7 @@ func (pbupr PageBlobUploadPagesResponse) BlobSequenceNumber() int64 {
}
i, err := strconv.ParseInt(s, 10, 64)
if err != nil {
- panic(err)
+ i = 0
}
return i
}
@@ -4043,7 +4234,7 @@ func (pbupr PageBlobUploadPagesResponse) ContentMD5() []byte {
}
b, err := base64.StdEncoding.DecodeString(s)
if err != nil {
- panic(err)
+ b = nil
}
return b
}
@@ -4056,7 +4247,7 @@ func (pbupr PageBlobUploadPagesResponse) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -4084,7 +4275,7 @@ func (pbupr PageBlobUploadPagesResponse) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -4129,7 +4320,7 @@ func (pl PageList) BlobContentLength() int64 {
}
i, err := strconv.ParseInt(s, 10, 64)
if err != nil {
- panic(err)
+ i = 0
}
return i
}
@@ -4142,7 +4333,7 @@ func (pl PageList) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -4165,7 +4356,7 @@ func (pl PageList) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -4186,7 +4377,7 @@ type PageRange struct {
End int64 `xml:"End"`
}
-// RetentionPolicy - the retention policy
+// RetentionPolicy - the retention policy which determines how long the associated data should persist
type RetentionPolicy struct {
// Enabled - Indicates whether a retention policy is enabled for the storage service
Enabled bool `xml:"Enabled"`
@@ -4194,6 +4385,64 @@ type RetentionPolicy struct {
Days *int32 `xml:"Days"`
}
+// ServiceGetAccountInfoResponse ...
+type ServiceGetAccountInfoResponse struct {
+ rawResponse *http.Response
+}
+
+// Response returns the raw HTTP response object.
+func (sgair ServiceGetAccountInfoResponse) Response() *http.Response {
+ return sgair.rawResponse
+}
+
+// StatusCode returns the HTTP status code of the response, e.g. 200.
+func (sgair ServiceGetAccountInfoResponse) StatusCode() int {
+ return sgair.rawResponse.StatusCode
+}
+
+// Status returns the HTTP status message of the response, e.g. "200 OK".
+func (sgair ServiceGetAccountInfoResponse) Status() string {
+ return sgair.rawResponse.Status
+}
+
+// AccountKind returns the value for header x-ms-account-kind.
+func (sgair ServiceGetAccountInfoResponse) AccountKind() AccountKindType {
+ return AccountKindType(sgair.rawResponse.Header.Get("x-ms-account-kind"))
+}
+
+// Date returns the value for header Date.
+func (sgair ServiceGetAccountInfoResponse) Date() time.Time {
+ s := sgair.rawResponse.Header.Get("Date")
+ if s == "" {
+ return time.Time{}
+ }
+ t, err := time.Parse(time.RFC1123, s)
+ if err != nil {
+ t = time.Time{}
+ }
+ return t
+}
+
+// ErrorCode returns the value for header x-ms-error-code.
+func (sgair ServiceGetAccountInfoResponse) ErrorCode() string {
+ return sgair.rawResponse.Header.Get("x-ms-error-code")
+}
+
+// RequestID returns the value for header x-ms-request-id.
+func (sgair ServiceGetAccountInfoResponse) RequestID() string {
+ return sgair.rawResponse.Header.Get("x-ms-request-id")
+}
+
+// SkuName returns the value for header x-ms-sku-name.
+func (sgair ServiceGetAccountInfoResponse) SkuName() SkuNameType {
+ return SkuNameType(sgair.rawResponse.Header.Get("x-ms-sku-name"))
+}
+
+// Version returns the value for header x-ms-version.
+func (sgair ServiceGetAccountInfoResponse) Version() string {
+ return sgair.rawResponse.Header.Get("x-ms-version")
+}
+
// ServiceSetPropertiesResponse ...
type ServiceSetPropertiesResponse struct {
rawResponse *http.Response
@@ -4232,12 +4481,11 @@ func (sspr ServiceSetPropertiesResponse) Version() string {
// SignedIdentifier - signed identifier
type SignedIdentifier struct {
// ID - a unique id
- ID string `xml:"Id"`
- // AccessPolicy - The access policy
+ ID string `xml:"Id"`
AccessPolicy AccessPolicy `xml:"AccessPolicy"`
}
-// SignedIdentifiers ...
+// SignedIdentifiers - Wraps the response from the containerClient.GetAccessPolicy method.
type SignedIdentifiers struct {
rawResponse *http.Response
Items []SignedIdentifier `xml:"SignedIdentifier"`
@@ -4271,7 +4519,7 @@ func (si SignedIdentifiers) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -4294,7 +4542,7 @@ func (si SignedIdentifiers) LastModified() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -4309,21 +4557,28 @@ func (si SignedIdentifiers) Version() string {
return si.rawResponse.Header.Get("x-ms-version")
}
+// StaticWebsite - The properties that enable an account to host a static website
+type StaticWebsite struct {
+ // Enabled - Indicates whether this account is hosting a static website
+ Enabled bool `xml:"Enabled"`
+ // IndexDocument - The default name of the index page under each directory
+ IndexDocument *string `xml:"IndexDocument"`
+ // ErrorDocument404Path - The absolute path of the custom 404 page
+ ErrorDocument404Path *string `xml:"ErrorDocument404Path"`
+}
+
// StorageServiceProperties - Storage Service Properties.
type StorageServiceProperties struct {
- rawResponse *http.Response
- // Logging - Azure Analytics Logging settings
- Logging *Logging `xml:"Logging"`
- // HourMetrics - A summary of request statistics grouped by API in hourly aggregates for blobs
- HourMetrics *Metrics `xml:"HourMetrics"`
- // MinuteMetrics - a summary of request statistics grouped by API in minute aggregates for blobs
+ rawResponse *http.Response
+ Logging *Logging `xml:"Logging"`
+ HourMetrics *Metrics `xml:"HourMetrics"`
MinuteMetrics *Metrics `xml:"MinuteMetrics"`
// Cors - The set of CORS rules.
Cors []CorsRule `xml:"Cors>CorsRule"`
// DefaultServiceVersion - The default version to use for requests to the Blob service if an incoming request's version is not specified. Possible values include version 2008-10-27 and all more recent versions
- DefaultServiceVersion *string `xml:"DefaultServiceVersion"`
- // DeleteRetentionPolicy - The Delete Retention Policy for the service
+ DefaultServiceVersion *string `xml:"DefaultServiceVersion"`
DeleteRetentionPolicy *RetentionPolicy `xml:"DeleteRetentionPolicy"`
+ StaticWebsite *StaticWebsite `xml:"StaticWebsite"`
}
// Response returns the raw HTTP response object.
@@ -4358,8 +4613,7 @@ func (ssp StorageServiceProperties) Version() string {
// StorageServiceStats - Stats for the storage service.
type StorageServiceStats struct {
- rawResponse *http.Response
- // GeoReplication - Geo-Replication information for the Secondary Storage Service
+ rawResponse *http.Response
GeoReplication *GeoReplication `xml:"GeoReplication"`
}
@@ -4386,7 +4640,7 @@ func (sss StorageServiceStats) Date() time.Time {
}
t, err := time.Parse(time.RFC1123, s)
if err != nil {
- panic(err)
+ t = time.Time{}
}
return t
}
@@ -4406,6 +4660,21 @@ func (sss StorageServiceStats) Version() string {
return sss.rawResponse.Header.Get("x-ms-version")
}
+func init() {
+ if reflect.TypeOf((*AccessPolicy)(nil)).Elem().Size() != reflect.TypeOf((*accessPolicy)(nil)).Elem().Size() {
+ validateError(errors.New("size mismatch between AccessPolicy and accessPolicy"))
+ }
+ if reflect.TypeOf((*BlobProperties)(nil)).Elem().Size() != reflect.TypeOf((*blobProperties)(nil)).Elem().Size() {
+ validateError(errors.New("size mismatch between BlobProperties and blobProperties"))
+ }
+ if reflect.TypeOf((*ContainerProperties)(nil)).Elem().Size() != reflect.TypeOf((*containerProperties)(nil)).Elem().Size() {
+ validateError(errors.New("size mismatch between ContainerProperties and containerProperties"))
+ }
+ if reflect.TypeOf((*GeoReplication)(nil)).Elem().Size() != reflect.TypeOf((*geoReplication)(nil)).Elem().Size() {
+ validateError(errors.New("size mismatch between GeoReplication and geoReplication"))
+ }
+}
+
const (
rfc3339Format = "2006-01-02T15:04:05.0000000Z07:00"
)
@@ -4445,6 +4714,26 @@ func (t *timeRFC3339) UnmarshalText(data []byte) (err error) {
return
}
+// internal type used for marshalling base64 encoded strings
+type base64Encoded struct {
+ b []byte
+}
+
+// MarshalText implements the encoding.TextMarshaler interface for base64Encoded.
+func (c base64Encoded) MarshalText() ([]byte, error) {
+ return []byte(base64.StdEncoding.EncodeToString(c.b)), nil
+}
+
+// UnmarshalText implements the encoding.TextUnmarshaler interface for base64Encoded.
+func (c *base64Encoded) UnmarshalText(data []byte) error {
+ b, err := base64.StdEncoding.DecodeString(string(data))
+ if err != nil {
+ return err
+ }
+ c.b = b
+ return nil
+}
+
// internal type used for marshalling
type accessPolicy struct {
Start timeRFC3339 `xml:"Start"`
@@ -4454,13 +4743,16 @@ type accessPolicy struct {
// internal type used for marshalling
type blobProperties struct {
+ // XMLName is used for marshalling and is subject to removal in a future release.
+ XMLName xml.Name `xml:"Properties"`
+ CreationTime *timeRFC1123 `xml:"Creation-Time"`
LastModified timeRFC1123 `xml:"Last-Modified"`
Etag ETag `xml:"Etag"`
ContentLength *int64 `xml:"Content-Length"`
ContentType *string `xml:"Content-Type"`
ContentEncoding *string `xml:"Content-Encoding"`
ContentLanguage *string `xml:"Content-Language"`
- ContentMD5 []byte `xml:"Content-MD5"`
+ ContentMD5 base64Encoded `xml:"Content-MD5"`
ContentDisposition *string `xml:"Content-Disposition"`
CacheControl *string `xml:"Cache-Control"`
BlobSequenceNumber *int64 `xml:"x-ms-blob-sequence-number"`
@@ -4482,16 +4774,19 @@ type blobProperties struct {
AccessTier AccessTierType `xml:"AccessTier"`
AccessTierInferred *bool `xml:"AccessTierInferred"`
ArchiveStatus ArchiveStatusType `xml:"ArchiveStatus"`
+ AccessTierChangeTime *timeRFC1123 `xml:"AccessTierChangeTime"`
}
// internal type used for marshalling
type containerProperties struct {
- LastModified timeRFC1123 `xml:"Last-Modified"`
- Etag ETag `xml:"Etag"`
- LeaseStatus LeaseStatusType `xml:"LeaseStatus"`
- LeaseState LeaseStateType `xml:"LeaseState"`
- LeaseDuration LeaseDurationType `xml:"LeaseDuration"`
- PublicAccess PublicAccessType `xml:"PublicAccess"`
+ LastModified timeRFC1123 `xml:"Last-Modified"`
+ Etag ETag `xml:"Etag"`
+ LeaseStatus LeaseStatusType `xml:"LeaseStatus"`
+ LeaseState LeaseStateType `xml:"LeaseState"`
+ LeaseDuration LeaseDurationType `xml:"LeaseDuration"`
+ PublicAccess PublicAccessType `xml:"PublicAccess"`
+ HasImmutabilityPolicy *bool `xml:"HasImmutabilityPolicy"`
+ HasLegalHold *bool `xml:"HasLegalHold"`
}
// internal type used for marshalling
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_page_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_page_blob.go
similarity index 78%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_page_blob.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_page_blob.go
index ce6507080e..ad588eed7d 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_page_blob.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_page_blob.go
@@ -32,24 +32,24 @@ func newPageBlobClient(url url.URL, p pipeline.Pipeline) pageBlobClient {
// information, see Setting
// Timeouts for Blob Service Operations. rangeParameter is return only the bytes of the blob in the specified
-// range. leaseID is if specified, the operation only succeeds if the container's lease is active and matches this ID.
+// range. leaseID is if specified, the operation only succeeds if the resource's lease is active and matches this ID.
// ifSequenceNumberLessThanOrEqualTo is specify this header value to operate only on a blob if it has a sequence number
// less than or equal to the specified. ifSequenceNumberLessThan is specify this header value to operate only on a blob
// if it has a sequence number less than the specified. ifSequenceNumberEqualTo is specify this header value to operate
// only on a blob if it has the specified sequence number. ifModifiedSince is specify this header value to operate only
// on a blob if it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to
-// operate only on a blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value
+// operate only on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value
// to operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs
// without a matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is
// recorded in the analytics logs when storage analytics logging is enabled.
-func (client pageBlobClient) ClearPages(ctx context.Context, contentLength int64, timeout *int32, rangeParameter *string, leaseID *string, ifSequenceNumberLessThanOrEqualTo *int64, ifSequenceNumberLessThan *int64, ifSequenceNumberEqualTo *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*PageBlobClearPagesResponse, error) {
+func (client pageBlobClient) ClearPages(ctx context.Context, contentLength int64, timeout *int32, rangeParameter *string, leaseID *string, ifSequenceNumberLessThanOrEqualTo *int64, ifSequenceNumberLessThan *int64, ifSequenceNumberEqualTo *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*PageBlobClearPagesResponse, error) {
if err := validate([]validation{
{targetValue: timeout,
constraints: []constraint{{target: "timeout", name: null, rule: false,
chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil {
return nil, err
}
- req, err := client.clearPagesPreparer(contentLength, timeout, rangeParameter, leaseID, ifSequenceNumberLessThanOrEqualTo, ifSequenceNumberLessThan, ifSequenceNumberEqualTo, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID)
+ req, err := client.clearPagesPreparer(contentLength, timeout, rangeParameter, leaseID, ifSequenceNumberLessThanOrEqualTo, ifSequenceNumberLessThan, ifSequenceNumberEqualTo, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID)
if err != nil {
return nil, err
}
@@ -61,7 +61,7 @@ func (client pageBlobClient) ClearPages(ctx context.Context, contentLength int64
}
// clearPagesPreparer prepares the ClearPages request.
-func (client pageBlobClient) clearPagesPreparer(contentLength int64, timeout *int32, rangeParameter *string, leaseID *string, ifSequenceNumberLessThanOrEqualTo *int64, ifSequenceNumberLessThan *int64, ifSequenceNumberEqualTo *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
+func (client pageBlobClient) clearPagesPreparer(contentLength int64, timeout *int32, rangeParameter *string, leaseID *string, ifSequenceNumberLessThanOrEqualTo *int64, ifSequenceNumberLessThan *int64, ifSequenceNumberEqualTo *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
req, err := pipeline.NewRequest("PUT", client.url, nil)
if err != nil {
return req, pipeline.NewError(err, "failed to create request")
@@ -94,8 +94,8 @@ func (client pageBlobClient) clearPagesPreparer(contentLength int64, timeout *in
if ifUnmodifiedSince != nil {
req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123))
}
- if ifMatches != nil {
- req.Header.Set("If-Match", string(*ifMatches))
+ if ifMatch != nil {
+ req.Header.Set("If-Match", string(*ifMatch))
}
if ifNoneMatch != nil {
req.Header.Set("If-None-Match", string(*ifNoneMatch))
@@ -129,28 +129,20 @@ func (client pageBlobClient) clearPagesResponder(resp pipeline.Response) (pipeli
// must either be public or must be authenticated via a shared access signature. timeout is the timeout parameter is
// expressed in seconds. For more information, see Setting
-// Timeouts for Blob Service Operations. metadata is optional. Specifies a user-defined name-value pair associated
-// with the blob. If no name-value pairs are specified, the operation will copy the metadata from the source blob or
-// file to the destination blob. If one or more name-value pairs are specified, the destination blob is created with
-// the specified metadata, and metadata is not copied from the source blob or file. Note that beginning with version
-// 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing
-// Containers, Blobs, and Metadata for more information. ifModifiedSince is specify this header value to operate only
-// on a blob if it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to
-// operate only on a blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value
-// to operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs
-// without a matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is
-// recorded in the analytics logs when storage analytics logging is enabled.
-func (client pageBlobClient) CopyIncremental(ctx context.Context, copySource string, timeout *int32, metadata map[string]string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*PageBlobCopyIncrementalResponse, error) {
+// Timeouts for Blob Service Operations. ifModifiedSince is specify this header value to operate only on a blob if
+// it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only
+// on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate
+// only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a
+// matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded
+// in the analytics logs when storage analytics logging is enabled.
+func (client pageBlobClient) CopyIncremental(ctx context.Context, copySource string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*PageBlobCopyIncrementalResponse, error) {
if err := validate([]validation{
{targetValue: timeout,
constraints: []constraint{{target: "timeout", name: null, rule: false,
- chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}},
- {targetValue: metadata,
- constraints: []constraint{{target: "metadata", name: null, rule: false,
- chain: []constraint{{target: "metadata", name: pattern, rule: `^[a-zA-Z]+$`, chain: nil}}}}}}); err != nil {
+ chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil {
return nil, err
}
- req, err := client.copyIncrementalPreparer(copySource, timeout, metadata, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID)
+ req, err := client.copyIncrementalPreparer(copySource, timeout, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID)
if err != nil {
return nil, err
}
@@ -162,7 +154,7 @@ func (client pageBlobClient) CopyIncremental(ctx context.Context, copySource str
}
// copyIncrementalPreparer prepares the CopyIncremental request.
-func (client pageBlobClient) copyIncrementalPreparer(copySource string, timeout *int32, metadata map[string]string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
+func (client pageBlobClient) copyIncrementalPreparer(copySource string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
req, err := pipeline.NewRequest("PUT", client.url, nil)
if err != nil {
return req, pipeline.NewError(err, "failed to create request")
@@ -173,19 +165,14 @@ func (client pageBlobClient) copyIncrementalPreparer(copySource string, timeout
}
params.Set("comp", "incrementalcopy")
req.URL.RawQuery = params.Encode()
- if metadata != nil {
- for k, v := range metadata {
- req.Header.Set("x-ms-meta-"+k, v)
- }
- }
if ifModifiedSince != nil {
req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123))
}
if ifUnmodifiedSince != nil {
req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123))
}
- if ifMatches != nil {
- req.Header.Set("If-Match", string(*ifMatches))
+ if ifMatch != nil {
+ req.Header.Set("If-Match", string(*ifMatch))
}
if ifNoneMatch != nil {
req.Header.Set("If-None-Match", string(*ifNoneMatch))
@@ -211,8 +198,9 @@ func (client pageBlobClient) copyIncrementalResponder(resp pipeline.Response) (p
// Create the Create operation creates a new page blob.
//
-// contentLength is the length of the request. timeout is the timeout parameter is expressed in seconds. For more
-// information, see Setting
// Timeouts for Blob Service Operations. blobContentType is optional. Sets the blob's content type. If specified,
// this property is stored with the blob and returned with a read request. blobContentEncoding is optional. Sets the
@@ -226,28 +214,23 @@ func (client pageBlobClient) copyIncrementalResponder(resp pipeline.Response) (p
// destination blob. If one or more name-value pairs are specified, the destination blob is created with the specified
// metadata, and metadata is not copied from the source blob or file. Note that beginning with version 2009-09-19,
// metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing Containers, Blobs, and
-// Metadata for more information. leaseID is if specified, the operation only succeeds if the container's lease is
+// Metadata for more information. leaseID is if specified, the operation only succeeds if the resource's lease is
// active and matches this ID. blobContentDisposition is optional. Sets the blob's Content-Disposition header.
// ifModifiedSince is specify this header value to operate only on a blob if it has been modified since the specified
// date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if it has not been modified
-// since the specified date/time. ifMatches is specify an ETag value to operate only on blobs with a matching value.
-// ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. blobContentLength is this
-// header specifies the maximum size for the page blob, up to 1 TB. The page blob size must be aligned to a 512-byte
-// boundary. blobSequenceNumber is set for page blobs only. The sequence number is a user-controlled value that you can
-// use to track requests. The value of the sequence number must be between 0 and 2^63 - 1. requestID is provides a
-// client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage
-// analytics logging is enabled.
-func (client pageBlobClient) Create(ctx context.Context, contentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, blobContentLength *int64, blobSequenceNumber *int64, requestID *string) (*PageBlobCreateResponse, error) {
+// since the specified date/time. ifMatch is specify an ETag value to operate only on blobs with a matching value.
+// ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. blobSequenceNumber is set
+// for page blobs only. The sequence number is a user-controlled value that you can use to track requests. The value of
+// the sequence number must be between 0 and 2^63 - 1. requestID is provides a client-generated, opaque value with a 1
+// KB character limit that is recorded in the analytics logs when storage analytics logging is enabled.
+func (client pageBlobClient) Create(ctx context.Context, contentLength int64, blobContentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, blobSequenceNumber *int64, requestID *string) (*PageBlobCreateResponse, error) {
if err := validate([]validation{
{targetValue: timeout,
constraints: []constraint{{target: "timeout", name: null, rule: false,
- chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}},
- {targetValue: metadata,
- constraints: []constraint{{target: "metadata", name: null, rule: false,
- chain: []constraint{{target: "metadata", name: pattern, rule: `^[a-zA-Z]+$`, chain: nil}}}}}}); err != nil {
+ chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil {
return nil, err
}
- req, err := client.createPreparer(contentLength, timeout, blobContentType, blobContentEncoding, blobContentLanguage, blobContentMD5, blobCacheControl, metadata, leaseID, blobContentDisposition, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, blobContentLength, blobSequenceNumber, requestID)
+ req, err := client.createPreparer(contentLength, blobContentLength, timeout, blobContentType, blobContentEncoding, blobContentLanguage, blobContentMD5, blobCacheControl, metadata, leaseID, blobContentDisposition, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, blobSequenceNumber, requestID)
if err != nil {
return nil, err
}
@@ -259,7 +242,7 @@ func (client pageBlobClient) Create(ctx context.Context, contentLength int64, ti
}
// createPreparer prepares the Create request.
-func (client pageBlobClient) createPreparer(contentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, blobContentLength *int64, blobSequenceNumber *int64, requestID *string) (pipeline.Request, error) {
+func (client pageBlobClient) createPreparer(contentLength int64, blobContentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, blobSequenceNumber *int64, requestID *string) (pipeline.Request, error) {
req, err := pipeline.NewRequest("PUT", client.url, nil)
if err != nil {
return req, pipeline.NewError(err, "failed to create request")
@@ -302,15 +285,13 @@ func (client pageBlobClient) createPreparer(contentLength int64, timeout *int32,
if ifUnmodifiedSince != nil {
req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123))
}
- if ifMatches != nil {
- req.Header.Set("If-Match", string(*ifMatches))
+ if ifMatch != nil {
+ req.Header.Set("If-Match", string(*ifMatch))
}
if ifNoneMatch != nil {
req.Header.Set("If-None-Match", string(*ifNoneMatch))
}
- if blobContentLength != nil {
- req.Header.Set("x-ms-blob-content-length", strconv.FormatInt(*blobContentLength, 10))
- }
+ req.Header.Set("x-ms-blob-content-length", strconv.FormatInt(blobContentLength, 10))
if blobSequenceNumber != nil {
req.Header.Set("x-ms-blob-sequence-number", strconv.FormatInt(*blobSequenceNumber, 10))
}
@@ -342,21 +323,21 @@ func (client pageBlobClient) createResponder(resp pipeline.Response) (pipeline.R
// a Snapshot of a Blob. timeout is the timeout parameter is expressed in seconds. For more information, see Setting
// Timeouts for Blob Service Operations. rangeParameter is return only the bytes of the blob in the specified
-// range. leaseID is if specified, the operation only succeeds if the container's lease is active and matches this ID.
+// range. leaseID is if specified, the operation only succeeds if the resource's lease is active and matches this ID.
// ifModifiedSince is specify this header value to operate only on a blob if it has been modified since the specified
// date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if it has not been modified
-// since the specified date/time. ifMatches is specify an ETag value to operate only on blobs with a matching value.
+// since the specified date/time. ifMatch is specify an ETag value to operate only on blobs with a matching value.
// ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. requestID is provides a
// client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage
// analytics logging is enabled.
-func (client pageBlobClient) GetPageRanges(ctx context.Context, snapshot *string, timeout *int32, rangeParameter *string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*PageList, error) {
+func (client pageBlobClient) GetPageRanges(ctx context.Context, snapshot *string, timeout *int32, rangeParameter *string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*PageList, error) {
if err := validate([]validation{
{targetValue: timeout,
constraints: []constraint{{target: "timeout", name: null, rule: false,
chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil {
return nil, err
}
- req, err := client.getPageRangesPreparer(snapshot, timeout, rangeParameter, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID)
+ req, err := client.getPageRangesPreparer(snapshot, timeout, rangeParameter, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID)
if err != nil {
return nil, err
}
@@ -368,7 +349,7 @@ func (client pageBlobClient) GetPageRanges(ctx context.Context, snapshot *string
}
// getPageRangesPreparer prepares the GetPageRanges request.
-func (client pageBlobClient) getPageRangesPreparer(snapshot *string, timeout *int32, rangeParameter *string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
+func (client pageBlobClient) getPageRangesPreparer(snapshot *string, timeout *int32, rangeParameter *string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
req, err := pipeline.NewRequest("GET", client.url, nil)
if err != nil {
return req, pipeline.NewError(err, "failed to create request")
@@ -394,8 +375,8 @@ func (client pageBlobClient) getPageRangesPreparer(snapshot *string, timeout *in
if ifUnmodifiedSince != nil {
req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123))
}
- if ifMatches != nil {
- req.Header.Set("If-Match", string(*ifMatches))
+ if ifMatch != nil {
+ req.Header.Set("If-Match", string(*ifMatch))
}
if ifNoneMatch != nil {
req.Header.Set("If-None-Match", string(*ifNoneMatch))
@@ -420,7 +401,7 @@ func (client pageBlobClient) getPageRangesResponder(resp pipeline.Response) (pip
defer resp.Response().Body.Close()
b, err := ioutil.ReadAll(resp.Response().Body)
if err != nil {
- return result, NewResponseError(err, resp.Response(), "failed to read response body")
+ return result, err
}
if len(b) > 0 {
b = removeBOM(b)
@@ -445,21 +426,21 @@ func (client pageBlobClient) getPageRangesResponder(resp pipeline.Response) (pip
// target blob and previous snapshot. Changed pages include both updated and cleared pages. The target blob may be a
// snapshot, as long as the snapshot specified by prevsnapshot is the older of the two. Note that incremental snapshots
// are currently supported only for blobs created on or after January 1, 2016. rangeParameter is return only the bytes
-// of the blob in the specified range. leaseID is if specified, the operation only succeeds if the container's lease is
+// of the blob in the specified range. leaseID is if specified, the operation only succeeds if the resource's lease is
// active and matches this ID. ifModifiedSince is specify this header value to operate only on a blob if it has been
// modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if
-// it has not been modified since the specified date/time. ifMatches is specify an ETag value to operate only on blobs
+// it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate only on blobs
// with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value.
// requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics
// logs when storage analytics logging is enabled.
-func (client pageBlobClient) GetPageRangesDiff(ctx context.Context, snapshot *string, timeout *int32, prevsnapshot *string, rangeParameter *string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*PageList, error) {
+func (client pageBlobClient) GetPageRangesDiff(ctx context.Context, snapshot *string, timeout *int32, prevsnapshot *string, rangeParameter *string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*PageList, error) {
if err := validate([]validation{
{targetValue: timeout,
constraints: []constraint{{target: "timeout", name: null, rule: false,
chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil {
return nil, err
}
- req, err := client.getPageRangesDiffPreparer(snapshot, timeout, prevsnapshot, rangeParameter, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID)
+ req, err := client.getPageRangesDiffPreparer(snapshot, timeout, prevsnapshot, rangeParameter, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID)
if err != nil {
return nil, err
}
@@ -471,7 +452,7 @@ func (client pageBlobClient) GetPageRangesDiff(ctx context.Context, snapshot *st
}
// getPageRangesDiffPreparer prepares the GetPageRangesDiff request.
-func (client pageBlobClient) getPageRangesDiffPreparer(snapshot *string, timeout *int32, prevsnapshot *string, rangeParameter *string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
+func (client pageBlobClient) getPageRangesDiffPreparer(snapshot *string, timeout *int32, prevsnapshot *string, rangeParameter *string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
req, err := pipeline.NewRequest("GET", client.url, nil)
if err != nil {
return req, pipeline.NewError(err, "failed to create request")
@@ -500,8 +481,8 @@ func (client pageBlobClient) getPageRangesDiffPreparer(snapshot *string, timeout
if ifUnmodifiedSince != nil {
req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123))
}
- if ifMatches != nil {
- req.Header.Set("If-Match", string(*ifMatches))
+ if ifMatch != nil {
+ req.Header.Set("If-Match", string(*ifMatch))
}
if ifNoneMatch != nil {
req.Header.Set("If-None-Match", string(*ifNoneMatch))
@@ -526,7 +507,7 @@ func (client pageBlobClient) getPageRangesDiffResponder(resp pipeline.Response)
defer resp.Response().Body.Close()
b, err := ioutil.ReadAll(resp.Response().Body)
if err != nil {
- return result, NewResponseError(err, resp.Response(), "failed to read response body")
+ return result, err
}
if len(b) > 0 {
b = removeBOM(b)
@@ -544,21 +525,21 @@ func (client pageBlobClient) getPageRangesDiffResponder(resp pipeline.Response)
// be aligned to a 512-byte boundary. timeout is the timeout parameter is expressed in seconds. For more information,
// see Setting
-// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the container's
+// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's
// lease is active and matches this ID. ifModifiedSince is specify this header value to operate only on a blob if it
// has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a
-// blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value to operate only
-// on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching
-// value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the
-// analytics logs when storage analytics logging is enabled.
-func (client pageBlobClient) Resize(ctx context.Context, blobContentLength int64, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*PageBlobResizeResponse, error) {
+// blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate only on
+// blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value.
+// requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics
+// logs when storage analytics logging is enabled.
+func (client pageBlobClient) Resize(ctx context.Context, blobContentLength int64, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*PageBlobResizeResponse, error) {
if err := validate([]validation{
{targetValue: timeout,
constraints: []constraint{{target: "timeout", name: null, rule: false,
chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil {
return nil, err
}
- req, err := client.resizePreparer(blobContentLength, timeout, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID)
+ req, err := client.resizePreparer(blobContentLength, timeout, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID)
if err != nil {
return nil, err
}
@@ -570,7 +551,7 @@ func (client pageBlobClient) Resize(ctx context.Context, blobContentLength int64
}
// resizePreparer prepares the Resize request.
-func (client pageBlobClient) resizePreparer(blobContentLength int64, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
+func (client pageBlobClient) resizePreparer(blobContentLength int64, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
req, err := pipeline.NewRequest("PUT", client.url, nil)
if err != nil {
return req, pipeline.NewError(err, "failed to create request")
@@ -590,8 +571,8 @@ func (client pageBlobClient) resizePreparer(blobContentLength int64, timeout *in
if ifUnmodifiedSince != nil {
req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123))
}
- if ifMatches != nil {
- req.Header.Set("If-Match", string(*ifMatches))
+ if ifMatch != nil {
+ req.Header.Set("If-Match", string(*ifMatch))
}
if ifNoneMatch != nil {
req.Header.Set("If-None-Match", string(*ifNoneMatch))
@@ -621,23 +602,23 @@ func (client pageBlobClient) resizeResponder(resp pipeline.Response) (pipeline.R
// applies to page blobs only. This property indicates how the service should modify the blob's sequence number timeout
// is the timeout parameter is expressed in seconds. For more information, see Setting
-// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the container's
+// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's
// lease is active and matches this ID. ifModifiedSince is specify this header value to operate only on a blob if it
// has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a
-// blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value to operate only
-// on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching
-// value. blobSequenceNumber is set for page blobs only. The sequence number is a user-controlled value that you can
-// use to track requests. The value of the sequence number must be between 0 and 2^63 - 1. requestID is provides a
+// blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate only on
+// blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value.
+// blobSequenceNumber is set for page blobs only. The sequence number is a user-controlled value that you can use to
+// track requests. The value of the sequence number must be between 0 and 2^63 - 1. requestID is provides a
// client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage
// analytics logging is enabled.
-func (client pageBlobClient) UpdateSequenceNumber(ctx context.Context, sequenceNumberAction SequenceNumberActionType, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, blobSequenceNumber *int64, requestID *string) (*PageBlobUpdateSequenceNumberResponse, error) {
+func (client pageBlobClient) UpdateSequenceNumber(ctx context.Context, sequenceNumberAction SequenceNumberActionType, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, blobSequenceNumber *int64, requestID *string) (*PageBlobUpdateSequenceNumberResponse, error) {
if err := validate([]validation{
{targetValue: timeout,
constraints: []constraint{{target: "timeout", name: null, rule: false,
chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil {
return nil, err
}
- req, err := client.updateSequenceNumberPreparer(sequenceNumberAction, timeout, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, blobSequenceNumber, requestID)
+ req, err := client.updateSequenceNumberPreparer(sequenceNumberAction, timeout, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, blobSequenceNumber, requestID)
if err != nil {
return nil, err
}
@@ -649,7 +630,7 @@ func (client pageBlobClient) UpdateSequenceNumber(ctx context.Context, sequenceN
}
// updateSequenceNumberPreparer prepares the UpdateSequenceNumber request.
-func (client pageBlobClient) updateSequenceNumberPreparer(sequenceNumberAction SequenceNumberActionType, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, blobSequenceNumber *int64, requestID *string) (pipeline.Request, error) {
+func (client pageBlobClient) updateSequenceNumberPreparer(sequenceNumberAction SequenceNumberActionType, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, blobSequenceNumber *int64, requestID *string) (pipeline.Request, error) {
req, err := pipeline.NewRequest("PUT", client.url, nil)
if err != nil {
return req, pipeline.NewError(err, "failed to create request")
@@ -669,8 +650,8 @@ func (client pageBlobClient) updateSequenceNumberPreparer(sequenceNumberAction S
if ifUnmodifiedSince != nil {
req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123))
}
- if ifMatches != nil {
- req.Header.Set("If-Match", string(*ifMatches))
+ if ifMatch != nil {
+ req.Header.Set("If-Match", string(*ifMatch))
}
if ifNoneMatch != nil {
req.Header.Set("If-None-Match", string(*ifNoneMatch))
@@ -700,21 +681,22 @@ func (client pageBlobClient) updateSequenceNumberResponder(resp pipeline.Respons
// UploadPages the Upload Pages operation writes a range of pages to a page blob
//
// body is initial data body will be closed upon successful return. Callers should ensure closure when receiving an
-// error.contentLength is the length of the request. timeout is the timeout parameter is expressed in seconds. For more
+// error.contentLength is the length of the request. transactionalContentMD5 is specify the transactional md5 for the
+// body, to be validated by the service. timeout is the timeout parameter is expressed in seconds. For more
// information, see Setting
// Timeouts for Blob Service Operations. rangeParameter is return only the bytes of the blob in the specified
-// range. leaseID is if specified, the operation only succeeds if the container's lease is active and matches this ID.
+// range. leaseID is if specified, the operation only succeeds if the resource's lease is active and matches this ID.
// ifSequenceNumberLessThanOrEqualTo is specify this header value to operate only on a blob if it has a sequence number
// less than or equal to the specified. ifSequenceNumberLessThan is specify this header value to operate only on a blob
// if it has a sequence number less than the specified. ifSequenceNumberEqualTo is specify this header value to operate
// only on a blob if it has the specified sequence number. ifModifiedSince is specify this header value to operate only
// on a blob if it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to
-// operate only on a blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value
+// operate only on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value
// to operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs
// without a matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is
// recorded in the analytics logs when storage analytics logging is enabled.
-func (client pageBlobClient) UploadPages(ctx context.Context, body io.ReadSeeker, contentLength int64, timeout *int32, rangeParameter *string, leaseID *string, ifSequenceNumberLessThanOrEqualTo *int64, ifSequenceNumberLessThan *int64, ifSequenceNumberEqualTo *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*PageBlobUploadPagesResponse, error) {
+func (client pageBlobClient) UploadPages(ctx context.Context, body io.ReadSeeker, contentLength int64, transactionalContentMD5 []byte, timeout *int32, rangeParameter *string, leaseID *string, ifSequenceNumberLessThanOrEqualTo *int64, ifSequenceNumberLessThan *int64, ifSequenceNumberEqualTo *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*PageBlobUploadPagesResponse, error) {
if err := validate([]validation{
{targetValue: body,
constraints: []constraint{{target: "body", name: null, rule: true, chain: nil}}},
@@ -723,7 +705,7 @@ func (client pageBlobClient) UploadPages(ctx context.Context, body io.ReadSeeker
chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil {
return nil, err
}
- req, err := client.uploadPagesPreparer(body, contentLength, timeout, rangeParameter, leaseID, ifSequenceNumberLessThanOrEqualTo, ifSequenceNumberLessThan, ifSequenceNumberEqualTo, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID)
+ req, err := client.uploadPagesPreparer(body, contentLength, transactionalContentMD5, timeout, rangeParameter, leaseID, ifSequenceNumberLessThanOrEqualTo, ifSequenceNumberLessThan, ifSequenceNumberEqualTo, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID)
if err != nil {
return nil, err
}
@@ -735,7 +717,7 @@ func (client pageBlobClient) UploadPages(ctx context.Context, body io.ReadSeeker
}
// uploadPagesPreparer prepares the UploadPages request.
-func (client pageBlobClient) uploadPagesPreparer(body io.ReadSeeker, contentLength int64, timeout *int32, rangeParameter *string, leaseID *string, ifSequenceNumberLessThanOrEqualTo *int64, ifSequenceNumberLessThan *int64, ifSequenceNumberEqualTo *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
+func (client pageBlobClient) uploadPagesPreparer(body io.ReadSeeker, contentLength int64, transactionalContentMD5 []byte, timeout *int32, rangeParameter *string, leaseID *string, ifSequenceNumberLessThanOrEqualTo *int64, ifSequenceNumberLessThan *int64, ifSequenceNumberEqualTo *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) {
req, err := pipeline.NewRequest("PUT", client.url, body)
if err != nil {
return req, pipeline.NewError(err, "failed to create request")
@@ -747,6 +729,9 @@ func (client pageBlobClient) uploadPagesPreparer(body io.ReadSeeker, contentLeng
params.Set("comp", "page")
req.URL.RawQuery = params.Encode()
req.Header.Set("Content-Length", strconv.FormatInt(contentLength, 10))
+ if transactionalContentMD5 != nil {
+ req.Header.Set("Content-MD5", base64.StdEncoding.EncodeToString(transactionalContentMD5))
+ }
if rangeParameter != nil {
req.Header.Set("x-ms-range", *rangeParameter)
}
@@ -768,8 +753,8 @@ func (client pageBlobClient) uploadPagesPreparer(body io.ReadSeeker, contentLeng
if ifUnmodifiedSince != nil {
req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123))
}
- if ifMatches != nil {
- req.Header.Set("If-Match", string(*ifMatches))
+ if ifMatch != nil {
+ req.Header.Set("If-Match", string(*ifMatch))
}
if ifNoneMatch != nil {
req.Header.Set("If-None-Match", string(*ifNoneMatch))
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_responder_policy.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_responder_policy.go
similarity index 96%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_responder_policy.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_responder_policy.go
index 2f391d7312..8a023d0a02 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_responder_policy.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_responder_policy.go
@@ -55,7 +55,7 @@ func validateResponse(resp pipeline.Response, successStatusCodes ...int) error {
defer resp.Response().Body.Close()
b, err := ioutil.ReadAll(resp.Response().Body)
if err != nil {
- return NewResponseError(err, resp.Response(), "failed to read response body")
+ return err
}
// the service code, description and details will be populated during unmarshalling
responseError := NewResponseError(nil, resp.Response(), resp.Response().Status)
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_response_error.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_response_error.go
similarity index 100%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_response_error.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_response_error.go
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_service.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_service.go
similarity index 90%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_service.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_service.go
index 76f235e159..c6840b43bd 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_service.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_service.go
@@ -25,6 +25,44 @@ func newServiceClient(url url.URL, p pipeline.Pipeline) serviceClient {
return serviceClient{newManagementClient(url, p)}
}
+// GetAccountInfo returns the sku name and account kind
+func (client serviceClient) GetAccountInfo(ctx context.Context) (*ServiceGetAccountInfoResponse, error) {
+ req, err := client.getAccountInfoPreparer()
+ if err != nil {
+ return nil, err
+ }
+ resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.getAccountInfoResponder}, req)
+ if err != nil {
+ return nil, err
+ }
+ return resp.(*ServiceGetAccountInfoResponse), err
+}
+
+// getAccountInfoPreparer prepares the GetAccountInfo request.
+func (client serviceClient) getAccountInfoPreparer() (pipeline.Request, error) {
+ req, err := pipeline.NewRequest("GET", client.url, nil)
+ if err != nil {
+ return req, pipeline.NewError(err, "failed to create request")
+ }
+ params := req.URL.Query()
+ params.Set("restype", "account")
+ params.Set("comp", "properties")
+ req.URL.RawQuery = params.Encode()
+ req.Header.Set("x-ms-version", ServiceVersion)
+ return req, nil
+}
+
+// getAccountInfoResponder handles the response to the GetAccountInfo request.
+func (client serviceClient) getAccountInfoResponder(resp pipeline.Response) (pipeline.Response, error) {
+ err := validateResponse(resp, http.StatusOK)
+ if resp == nil {
+ return nil, err
+ }
+ io.Copy(ioutil.Discard, resp.Response().Body)
+ resp.Response().Body.Close()
+ return &ServiceGetAccountInfoResponse{rawResponse: resp.Response()}, err
+}
+
// GetProperties gets the properties of a storage account's Blob service, including properties for Storage Analytics
// and CORS (Cross-Origin Resource Sharing) rules.
//
@@ -83,7 +121,7 @@ func (client serviceClient) getPropertiesResponder(resp pipeline.Response) (pipe
defer resp.Response().Body.Close()
b, err := ioutil.ReadAll(resp.Response().Body)
if err != nil {
- return result, NewResponseError(err, resp.Response(), "failed to read response body")
+ return result, err
}
if len(b) > 0 {
b = removeBOM(b)
@@ -153,7 +191,7 @@ func (client serviceClient) getStatisticsResponder(resp pipeline.Response) (pipe
defer resp.Response().Body.Close()
b, err := ioutil.ReadAll(resp.Response().Body)
if err != nil {
- return result, NewResponseError(err, resp.Response(), "failed to read response body")
+ return result, err
}
if len(b) > 0 {
b = removeBOM(b)
@@ -183,7 +221,7 @@ func (client serviceClient) getStatisticsResponder(resp pipeline.Response) (pipe
// href="https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations">Setting
// Timeouts for Blob Service Operations. requestID is provides a client-generated, opaque value with a 1 KB
// character limit that is recorded in the analytics logs when storage analytics logging is enabled.
-func (client serviceClient) ListContainersSegment(ctx context.Context, prefix *string, marker *string, maxresults *int32, include ListContainersIncludeType, timeout *int32, requestID *string) (*ListContainersResponse, error) {
+func (client serviceClient) ListContainersSegment(ctx context.Context, prefix *string, marker *string, maxresults *int32, include ListContainersIncludeType, timeout *int32, requestID *string) (*ListContainersSegmentResponse, error) {
if err := validate([]validation{
{targetValue: maxresults,
constraints: []constraint{{target: "maxresults", name: null, rule: false,
@@ -201,7 +239,7 @@ func (client serviceClient) ListContainersSegment(ctx context.Context, prefix *s
if err != nil {
return nil, err
}
- return resp.(*ListContainersResponse), err
+ return resp.(*ListContainersSegmentResponse), err
}
// listContainersSegmentPreparer prepares the ListContainersSegment request.
@@ -241,14 +279,14 @@ func (client serviceClient) listContainersSegmentResponder(resp pipeline.Respons
if resp == nil {
return nil, err
}
- result := &ListContainersResponse{rawResponse: resp.Response()}
+ result := &ListContainersSegmentResponse{rawResponse: resp.Response()}
if err != nil {
return result, err
}
defer resp.Response().Body.Close()
b, err := ioutil.ReadAll(resp.Response().Body)
if err != nil {
- return result, NewResponseError(err, resp.Response(), "failed to read response body")
+ return result, err
}
if len(b) > 0 {
b = removeBOM(b)
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_validation.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_validation.go
similarity index 100%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_validation.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_validation.go
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_version.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_version.go
similarity index 100%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_version.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_version.go
diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_response_helpers.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_response_helpers.go
similarity index 98%
rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_response_helpers.go
rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_response_helpers.go
index b4f058b674..8c7f594532 100644
--- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_response_helpers.go
+++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_response_helpers.go
@@ -65,7 +65,7 @@ func (r *DownloadResponse) Body(o RetryReaderOptions) io.ReadCloser {
func(ctx context.Context, getInfo HTTPGetterInfo) (*http.Response, error) {
resp, err := r.b.Download(ctx, getInfo.Offset, getInfo.Count,
BlobAccessConditions{
- HTTPAccessConditions: HTTPAccessConditions{IfMatch: getInfo.ETag},
+ ModifiedAccessConditions: ModifiedAccessConditions{IfMatch: getInfo.ETag},
},
false)
if err != nil {
diff --git a/vendor/vendor.json b/vendor/vendor.json
index 00eeedc905..9652b98b42 100644
--- a/vendor/vendor.json
+++ b/vendor/vendor.json
@@ -9,10 +9,10 @@
"revisionTime": "2018-06-07T21:19:23Z"
},
{
- "checksumSHA1": "5nsGu77r69lloEWbFhMof2UA9rY=",
- "path": "github.com/Azure/azure-storage-blob-go/2018-03-28/azblob",
- "revision": "eaae161d9d5e07363f04ddb19d84d57efc66d1a1",
- "revisionTime": "2018-07-12T00:56:34Z"
+ "checksumSHA1": "2tjghBLyLnO+Gry+Nu+f6y8txiw=",
+ "path": "github.com/Azure/azure-storage-blob-go/azblob",
+ "revision": "cf01652132ccc92af2b9da9d2de542b5b7eafc1d",
+ "revisionTime": "2018-10-23T07:08:48Z"
},
{
"checksumSHA1": "QC55lHNOv1+UAL2xtIHw17MJ8J8=",