mirror of https://github.com/poanetwork/quorum.git
795 lines
41 KiB
Go
795 lines
41 KiB
Go
package azblob
|
|
|
|
// Code generated by Microsoft (R) AutoRest Code Generator.
|
|
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
|
|
|
import (
|
|
"context"
|
|
"encoding/base64"
|
|
"encoding/xml"
|
|
"github.com/Azure/azure-pipeline-go/pipeline"
|
|
"io"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"net/url"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
// pageBlobClient is the client for the PageBlob methods of the Azblob service.
|
|
type pageBlobClient struct {
|
|
managementClient
|
|
}
|
|
|
|
// newPageBlobClient creates an instance of the pageBlobClient client.
|
|
func newPageBlobClient(url url.URL, p pipeline.Pipeline) pageBlobClient {
|
|
return pageBlobClient{newManagementClient(url, p)}
|
|
}
|
|
|
|
// ClearPages the Clear Pages operation clears a set of pages from a page blob
|
|
//
|
|
// contentLength is the length of the request. timeout is the timeout parameter is expressed in seconds. For more
|
|
// information, see <a
|
|
// href="https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations">Setting
|
|
// Timeouts for Blob Service Operations.</a> 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.
|
|
// 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
|
|
// 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) {
|
|
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)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.clearPagesResponder}, req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return resp.(*PageBlobClearPagesResponse), err
|
|
}
|
|
|
|
// 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) {
|
|
req, err := pipeline.NewRequest("PUT", client.url, nil)
|
|
if err != nil {
|
|
return req, pipeline.NewError(err, "failed to create request")
|
|
}
|
|
params := req.URL.Query()
|
|
if timeout != nil {
|
|
params.Set("timeout", strconv.FormatInt(int64(*timeout), 10))
|
|
}
|
|
params.Set("comp", "page")
|
|
req.URL.RawQuery = params.Encode()
|
|
req.Header.Set("Content-Length", strconv.FormatInt(contentLength, 10))
|
|
if rangeParameter != nil {
|
|
req.Header.Set("x-ms-range", *rangeParameter)
|
|
}
|
|
if leaseID != nil {
|
|
req.Header.Set("x-ms-lease-id", *leaseID)
|
|
}
|
|
if ifSequenceNumberLessThanOrEqualTo != nil {
|
|
req.Header.Set("x-ms-if-sequence-number-le", strconv.FormatInt(*ifSequenceNumberLessThanOrEqualTo, 10))
|
|
}
|
|
if ifSequenceNumberLessThan != nil {
|
|
req.Header.Set("x-ms-if-sequence-number-lt", strconv.FormatInt(*ifSequenceNumberLessThan, 10))
|
|
}
|
|
if ifSequenceNumberEqualTo != nil {
|
|
req.Header.Set("x-ms-if-sequence-number-eq", strconv.FormatInt(*ifSequenceNumberEqualTo, 10))
|
|
}
|
|
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 ifNoneMatch != nil {
|
|
req.Header.Set("If-None-Match", string(*ifNoneMatch))
|
|
}
|
|
req.Header.Set("x-ms-version", ServiceVersion)
|
|
if requestID != nil {
|
|
req.Header.Set("x-ms-client-request-id", *requestID)
|
|
}
|
|
req.Header.Set("x-ms-page-write", "clear")
|
|
return req, nil
|
|
}
|
|
|
|
// clearPagesResponder handles the response to the ClearPages request.
|
|
func (client pageBlobClient) clearPagesResponder(resp pipeline.Response) (pipeline.Response, error) {
|
|
err := validateResponse(resp, http.StatusOK, http.StatusCreated)
|
|
if resp == nil {
|
|
return nil, err
|
|
}
|
|
io.Copy(ioutil.Discard, resp.Response().Body)
|
|
resp.Response().Body.Close()
|
|
return &PageBlobClearPagesResponse{rawResponse: resp.Response()}, err
|
|
}
|
|
|
|
// CopyIncremental the Copy Incremental operation copies a snapshot of the source page blob to a destination page blob.
|
|
// The snapshot is copied such that only the differential changes between the previously copied snapshot are
|
|
// transferred to the destination. The copied snapshots are complete copies of the original snapshot and can be read or
|
|
// copied from as usual. This API is supported since REST version 2016-05-31.
|
|
//
|
|
// copySource is specifies the name of the source page blob snapshot. This value is a URL of up to 2 KB in length that
|
|
// specifies a page blob snapshot. The value should be URL-encoded as it would appear in a request URI. The source blob
|
|
// 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 <a
|
|
// href="https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations">Setting
|
|
// Timeouts for Blob Service Operations.</a> 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) {
|
|
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 {
|
|
return nil, err
|
|
}
|
|
req, err := client.copyIncrementalPreparer(copySource, timeout, metadata, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.copyIncrementalResponder}, req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return resp.(*PageBlobCopyIncrementalResponse), err
|
|
}
|
|
|
|
// 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) {
|
|
req, err := pipeline.NewRequest("PUT", client.url, nil)
|
|
if err != nil {
|
|
return req, pipeline.NewError(err, "failed to create request")
|
|
}
|
|
params := req.URL.Query()
|
|
if timeout != nil {
|
|
params.Set("timeout", strconv.FormatInt(int64(*timeout), 10))
|
|
}
|
|
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 ifNoneMatch != nil {
|
|
req.Header.Set("If-None-Match", string(*ifNoneMatch))
|
|
}
|
|
req.Header.Set("x-ms-copy-source", copySource)
|
|
req.Header.Set("x-ms-version", ServiceVersion)
|
|
if requestID != nil {
|
|
req.Header.Set("x-ms-client-request-id", *requestID)
|
|
}
|
|
return req, nil
|
|
}
|
|
|
|
// copyIncrementalResponder handles the response to the CopyIncremental request.
|
|
func (client pageBlobClient) copyIncrementalResponder(resp pipeline.Response) (pipeline.Response, error) {
|
|
err := validateResponse(resp, http.StatusOK, http.StatusAccepted)
|
|
if resp == nil {
|
|
return nil, err
|
|
}
|
|
io.Copy(ioutil.Discard, resp.Response().Body)
|
|
resp.Response().Body.Close()
|
|
return &PageBlobCopyIncrementalResponse{rawResponse: resp.Response()}, err
|
|
}
|
|
|
|
// 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 <a
|
|
// href="https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations">Setting
|
|
// Timeouts for Blob Service Operations.</a> 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
|
|
// 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. blobContentMD5 is optional. An MD5 hash of the blob content. Note that this
|
|
// hash is not validated, as the hashes for the individual blocks were validated when each was uploaded.
|
|
// blobCacheControl is optional. Sets the blob's cache control. If specified, this property is stored with the blob and
|
|
// returned with a read request. 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. leaseID is if specified, the operation only succeeds if the container'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) {
|
|
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 {
|
|
return nil, err
|
|
}
|
|
req, err := client.createPreparer(contentLength, timeout, blobContentType, blobContentEncoding, blobContentLanguage, blobContentMD5, blobCacheControl, metadata, leaseID, blobContentDisposition, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, blobContentLength, blobSequenceNumber, requestID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.createResponder}, req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return resp.(*PageBlobCreateResponse), err
|
|
}
|
|
|
|
// 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) {
|
|
req, err := pipeline.NewRequest("PUT", client.url, nil)
|
|
if err != nil {
|
|
return req, pipeline.NewError(err, "failed to create request")
|
|
}
|
|
params := req.URL.Query()
|
|
if timeout != nil {
|
|
params.Set("timeout", strconv.FormatInt(int64(*timeout), 10))
|
|
}
|
|
req.URL.RawQuery = params.Encode()
|
|
req.Header.Set("Content-Length", strconv.FormatInt(contentLength, 10))
|
|
if blobContentType != nil {
|
|
req.Header.Set("x-ms-blob-content-type", *blobContentType)
|
|
}
|
|
if blobContentEncoding != nil {
|
|
req.Header.Set("x-ms-blob-content-encoding", *blobContentEncoding)
|
|
}
|
|
if blobContentLanguage != nil {
|
|
req.Header.Set("x-ms-blob-content-language", *blobContentLanguage)
|
|
}
|
|
if blobContentMD5 != nil {
|
|
req.Header.Set("x-ms-blob-content-md5", base64.StdEncoding.EncodeToString(blobContentMD5))
|
|
}
|
|
if blobCacheControl != nil {
|
|
req.Header.Set("x-ms-blob-cache-control", *blobCacheControl)
|
|
}
|
|
if metadata != nil {
|
|
for k, v := range metadata {
|
|
req.Header.Set("x-ms-meta-"+k, v)
|
|
}
|
|
}
|
|
if leaseID != nil {
|
|
req.Header.Set("x-ms-lease-id", *leaseID)
|
|
}
|
|
if blobContentDisposition != nil {
|
|
req.Header.Set("x-ms-blob-content-disposition", *blobContentDisposition)
|
|
}
|
|
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 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))
|
|
}
|
|
if blobSequenceNumber != nil {
|
|
req.Header.Set("x-ms-blob-sequence-number", strconv.FormatInt(*blobSequenceNumber, 10))
|
|
}
|
|
req.Header.Set("x-ms-version", ServiceVersion)
|
|
if requestID != nil {
|
|
req.Header.Set("x-ms-client-request-id", *requestID)
|
|
}
|
|
req.Header.Set("x-ms-blob-type", "PageBlob")
|
|
return req, nil
|
|
}
|
|
|
|
// createResponder handles the response to the Create request.
|
|
func (client pageBlobClient) createResponder(resp pipeline.Response) (pipeline.Response, error) {
|
|
err := validateResponse(resp, http.StatusOK, http.StatusCreated)
|
|
if resp == nil {
|
|
return nil, err
|
|
}
|
|
io.Copy(ioutil.Discard, resp.Response().Body)
|
|
resp.Response().Body.Close()
|
|
return &PageBlobCreateResponse{rawResponse: resp.Response()}, err
|
|
}
|
|
|
|
// GetPageRanges the Get Page Ranges operation returns the list of valid page ranges for a page blob or snapshot of a
|
|
// page blob
|
|
//
|
|
// snapshot is the snapshot parameter is an opaque DateTime value that, when present, specifies the blob snapshot to
|
|
// retrieve. For more information on working with blob snapshots, see <a
|
|
// href="https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/creating-a-snapshot-of-a-blob">Creating
|
|
// a Snapshot of a Blob.</a> timeout is the timeout parameter is expressed in seconds. For more information, see <a
|
|
// href="https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations">Setting
|
|
// Timeouts for Blob Service Operations.</a> 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.
|
|
// 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) 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) {
|
|
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)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.getPageRangesResponder}, req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return resp.(*PageList), err
|
|
}
|
|
|
|
// 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) {
|
|
req, err := pipeline.NewRequest("GET", client.url, nil)
|
|
if err != nil {
|
|
return req, pipeline.NewError(err, "failed to create request")
|
|
}
|
|
params := req.URL.Query()
|
|
if snapshot != nil && len(*snapshot) > 0 {
|
|
params.Set("snapshot", *snapshot)
|
|
}
|
|
if timeout != nil {
|
|
params.Set("timeout", strconv.FormatInt(int64(*timeout), 10))
|
|
}
|
|
params.Set("comp", "pagelist")
|
|
req.URL.RawQuery = params.Encode()
|
|
if rangeParameter != nil {
|
|
req.Header.Set("x-ms-range", *rangeParameter)
|
|
}
|
|
if leaseID != nil {
|
|
req.Header.Set("x-ms-lease-id", *leaseID)
|
|
}
|
|
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 ifNoneMatch != nil {
|
|
req.Header.Set("If-None-Match", string(*ifNoneMatch))
|
|
}
|
|
req.Header.Set("x-ms-version", ServiceVersion)
|
|
if requestID != nil {
|
|
req.Header.Set("x-ms-client-request-id", *requestID)
|
|
}
|
|
return req, nil
|
|
}
|
|
|
|
// getPageRangesResponder handles the response to the GetPageRanges request.
|
|
func (client pageBlobClient) getPageRangesResponder(resp pipeline.Response) (pipeline.Response, error) {
|
|
err := validateResponse(resp, http.StatusOK)
|
|
if resp == nil {
|
|
return nil, err
|
|
}
|
|
result := &PageList{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")
|
|
}
|
|
if len(b) > 0 {
|
|
b = removeBOM(b)
|
|
err = xml.Unmarshal(b, result)
|
|
if err != nil {
|
|
return result, NewResponseError(err, resp.Response(), "failed to unmarshal response body")
|
|
}
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
// GetPageRangesDiff [Update] The Get Page Ranges Diff operation returns the list of valid page ranges for a page blob
|
|
// that were changed between target blob and previous snapshot.
|
|
//
|
|
// snapshot is the snapshot parameter is an opaque DateTime value that, when present, specifies the blob snapshot to
|
|
// retrieve. For more information on working with blob snapshots, see <a
|
|
// href="https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/creating-a-snapshot-of-a-blob">Creating
|
|
// a Snapshot of a Blob.</a> timeout is the timeout parameter is expressed in seconds. For more information, see <a
|
|
// href="https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations">Setting
|
|
// Timeouts for Blob Service Operations.</a> prevsnapshot is optional in version 2015-07-08 and newer. The prevsnapshot
|
|
// parameter is a DateTime value that specifies that the response will contain only pages that were changed between
|
|
// 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
|
|
// 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) 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) {
|
|
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)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.getPageRangesDiffResponder}, req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return resp.(*PageList), err
|
|
}
|
|
|
|
// 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) {
|
|
req, err := pipeline.NewRequest("GET", client.url, nil)
|
|
if err != nil {
|
|
return req, pipeline.NewError(err, "failed to create request")
|
|
}
|
|
params := req.URL.Query()
|
|
if snapshot != nil && len(*snapshot) > 0 {
|
|
params.Set("snapshot", *snapshot)
|
|
}
|
|
if timeout != nil {
|
|
params.Set("timeout", strconv.FormatInt(int64(*timeout), 10))
|
|
}
|
|
if prevsnapshot != nil && len(*prevsnapshot) > 0 {
|
|
params.Set("prevsnapshot", *prevsnapshot)
|
|
}
|
|
params.Set("comp", "pagelist")
|
|
req.URL.RawQuery = params.Encode()
|
|
if rangeParameter != nil {
|
|
req.Header.Set("x-ms-range", *rangeParameter)
|
|
}
|
|
if leaseID != nil {
|
|
req.Header.Set("x-ms-lease-id", *leaseID)
|
|
}
|
|
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 ifNoneMatch != nil {
|
|
req.Header.Set("If-None-Match", string(*ifNoneMatch))
|
|
}
|
|
req.Header.Set("x-ms-version", ServiceVersion)
|
|
if requestID != nil {
|
|
req.Header.Set("x-ms-client-request-id", *requestID)
|
|
}
|
|
return req, nil
|
|
}
|
|
|
|
// getPageRangesDiffResponder handles the response to the GetPageRangesDiff request.
|
|
func (client pageBlobClient) getPageRangesDiffResponder(resp pipeline.Response) (pipeline.Response, error) {
|
|
err := validateResponse(resp, http.StatusOK)
|
|
if resp == nil {
|
|
return nil, err
|
|
}
|
|
result := &PageList{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")
|
|
}
|
|
if len(b) > 0 {
|
|
b = removeBOM(b)
|
|
err = xml.Unmarshal(b, result)
|
|
if err != nil {
|
|
return result, NewResponseError(err, resp.Response(), "failed to unmarshal response body")
|
|
}
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
// Resize resize the Blob
|
|
//
|
|
// 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. timeout is the timeout parameter is expressed in seconds. For more information,
|
|
// see <a
|
|
// href="https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations">Setting
|
|
// Timeouts for Blob Service Operations.</a> 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. 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) {
|
|
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)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.resizeResponder}, req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return resp.(*PageBlobResizeResponse), err
|
|
}
|
|
|
|
// 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) {
|
|
req, err := pipeline.NewRequest("PUT", client.url, nil)
|
|
if err != nil {
|
|
return req, pipeline.NewError(err, "failed to create request")
|
|
}
|
|
params := req.URL.Query()
|
|
if timeout != nil {
|
|
params.Set("timeout", strconv.FormatInt(int64(*timeout), 10))
|
|
}
|
|
params.Set("comp", "properties")
|
|
req.URL.RawQuery = params.Encode()
|
|
if leaseID != nil {
|
|
req.Header.Set("x-ms-lease-id", *leaseID)
|
|
}
|
|
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 ifNoneMatch != nil {
|
|
req.Header.Set("If-None-Match", string(*ifNoneMatch))
|
|
}
|
|
req.Header.Set("x-ms-blob-content-length", strconv.FormatInt(blobContentLength, 10))
|
|
req.Header.Set("x-ms-version", ServiceVersion)
|
|
if requestID != nil {
|
|
req.Header.Set("x-ms-client-request-id", *requestID)
|
|
}
|
|
return req, nil
|
|
}
|
|
|
|
// resizeResponder handles the response to the Resize request.
|
|
func (client pageBlobClient) resizeResponder(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 &PageBlobResizeResponse{rawResponse: resp.Response()}, err
|
|
}
|
|
|
|
// UpdateSequenceNumber update the sequence number of the blob
|
|
//
|
|
// sequenceNumberAction is required if the x-ms-blob-sequence-number header is set for the request. This property
|
|
// 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 <a
|
|
// href="https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations">Setting
|
|
// Timeouts for Blob Service Operations.</a> 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. 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) {
|
|
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)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.updateSequenceNumberResponder}, req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return resp.(*PageBlobUpdateSequenceNumberResponse), err
|
|
}
|
|
|
|
// 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) {
|
|
req, err := pipeline.NewRequest("PUT", client.url, nil)
|
|
if err != nil {
|
|
return req, pipeline.NewError(err, "failed to create request")
|
|
}
|
|
params := req.URL.Query()
|
|
if timeout != nil {
|
|
params.Set("timeout", strconv.FormatInt(int64(*timeout), 10))
|
|
}
|
|
params.Set("comp", "properties")
|
|
req.URL.RawQuery = params.Encode()
|
|
if leaseID != nil {
|
|
req.Header.Set("x-ms-lease-id", *leaseID)
|
|
}
|
|
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 ifNoneMatch != nil {
|
|
req.Header.Set("If-None-Match", string(*ifNoneMatch))
|
|
}
|
|
req.Header.Set("x-ms-sequence-number-action", string(sequenceNumberAction))
|
|
if blobSequenceNumber != nil {
|
|
req.Header.Set("x-ms-blob-sequence-number", strconv.FormatInt(*blobSequenceNumber, 10))
|
|
}
|
|
req.Header.Set("x-ms-version", ServiceVersion)
|
|
if requestID != nil {
|
|
req.Header.Set("x-ms-client-request-id", *requestID)
|
|
}
|
|
return req, nil
|
|
}
|
|
|
|
// updateSequenceNumberResponder handles the response to the UpdateSequenceNumber request.
|
|
func (client pageBlobClient) updateSequenceNumberResponder(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 &PageBlobUpdateSequenceNumberResponse{rawResponse: resp.Response()}, err
|
|
}
|
|
|
|
// 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
|
|
// information, see <a
|
|
// href="https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations">Setting
|
|
// Timeouts for Blob Service Operations.</a> 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.
|
|
// 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
|
|
// 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) {
|
|
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}}}}}}); err != nil {
|
|
return nil, err
|
|
}
|
|
req, err := client.uploadPagesPreparer(body, contentLength, timeout, rangeParameter, leaseID, ifSequenceNumberLessThanOrEqualTo, ifSequenceNumberLessThan, ifSequenceNumberEqualTo, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.uploadPagesResponder}, req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return resp.(*PageBlobUploadPagesResponse), err
|
|
}
|
|
|
|
// 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) {
|
|
req, err := pipeline.NewRequest("PUT", client.url, body)
|
|
if err != nil {
|
|
return req, pipeline.NewError(err, "failed to create request")
|
|
}
|
|
params := req.URL.Query()
|
|
if timeout != nil {
|
|
params.Set("timeout", strconv.FormatInt(int64(*timeout), 10))
|
|
}
|
|
params.Set("comp", "page")
|
|
req.URL.RawQuery = params.Encode()
|
|
req.Header.Set("Content-Length", strconv.FormatInt(contentLength, 10))
|
|
if rangeParameter != nil {
|
|
req.Header.Set("x-ms-range", *rangeParameter)
|
|
}
|
|
if leaseID != nil {
|
|
req.Header.Set("x-ms-lease-id", *leaseID)
|
|
}
|
|
if ifSequenceNumberLessThanOrEqualTo != nil {
|
|
req.Header.Set("x-ms-if-sequence-number-le", strconv.FormatInt(*ifSequenceNumberLessThanOrEqualTo, 10))
|
|
}
|
|
if ifSequenceNumberLessThan != nil {
|
|
req.Header.Set("x-ms-if-sequence-number-lt", strconv.FormatInt(*ifSequenceNumberLessThan, 10))
|
|
}
|
|
if ifSequenceNumberEqualTo != nil {
|
|
req.Header.Set("x-ms-if-sequence-number-eq", strconv.FormatInt(*ifSequenceNumberEqualTo, 10))
|
|
}
|
|
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 ifNoneMatch != nil {
|
|
req.Header.Set("If-None-Match", string(*ifNoneMatch))
|
|
}
|
|
req.Header.Set("x-ms-version", ServiceVersion)
|
|
if requestID != nil {
|
|
req.Header.Set("x-ms-client-request-id", *requestID)
|
|
}
|
|
req.Header.Set("x-ms-page-write", "update")
|
|
return req, nil
|
|
}
|
|
|
|
// uploadPagesResponder handles the response to the UploadPages request.
|
|
func (client pageBlobClient) uploadPagesResponder(resp pipeline.Response) (pipeline.Response, error) {
|
|
err := validateResponse(resp, http.StatusOK, http.StatusCreated)
|
|
if resp == nil {
|
|
return nil, err
|
|
}
|
|
io.Copy(ioutil.Discard, resp.Response().Body)
|
|
resp.Response().Body.Close()
|
|
return &PageBlobUploadPagesResponse{rawResponse: resp.Response()}, err
|
|
}
|