Skip to content

Commit

Permalink
Revert "[Go][Track2] Added Blob/Container Lease Client (#14342)" (#14566
Browse files Browse the repository at this point in the history
)

This reverts commit eddb62b.
  • Loading branch information
mohsha-msft committed Apr 21, 2021
1 parent eddb62b commit 72e587b
Show file tree
Hide file tree
Showing 21 changed files with 320 additions and 684 deletions.
71 changes: 53 additions & 18 deletions sdk/storage/azblob/zc_blobClient.go
Expand Up @@ -43,16 +43,6 @@ func (b BlobClient) WithSnapshot(snapshot string) BlobClient {
}
}

func (b BlobClient) NewBlobLeaseClient(leaseId string) BlobLeaseClient {
if leaseId == "" {
leaseId = newUUID().String()
}
return BlobLeaseClient{
BlobClient: b,
LeaseId: leaseId,
}
}

func (b BlobClient) GetAccountInfo(ctx context.Context) (BlobGetAccountInfoResponse, error) {
return b.client.GetAccountInfo(ctx, nil)
}
Expand All @@ -77,10 +67,10 @@ func (b BlobClient) Download(ctx context.Context, options *DownloadBlobOptions)
count = *options.Count
}
return &DownloadResponse{
b: b,
BlobDownloadResponse: dr,
ctx: ctx,
getInfo: HTTPGetterInfo{Offset: offset, Count: count, ETag: *dr.ETag},
b: b,
BlobDownloadResponse: dr,
ctx: ctx,
getInfo: HTTPGetterInfo{Offset: offset, Count: count, ETag: *dr.ETag},
}, err
}

Expand Down Expand Up @@ -157,6 +147,51 @@ func (b BlobClient) CreateSnapshot(ctx context.Context, options *CreateBlobSnaps
return resp, handleError(err)
}

// 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 BlobClient) AcquireLease(ctx context.Context, options *AcquireBlobLeaseOptions) (BlobAcquireLeaseResponse, error) {
basics, access := options.pointers()
resp, err := b.client.AcquireLease(ctx, basics, access)

return resp, handleError(err)
}

// RenewLease renews the blob's previously-acquired lease.
// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-blob.
func (b BlobClient) RenewLease(ctx context.Context, leaseID string, options *RenewBlobLeaseOptions) (BlobRenewLeaseResponse, error) {
basics, access := options.pointers()
return b.client.RenewLease(ctx, leaseID, basics, access)
}

// ReleaseLease releases the blob's previously-acquired lease.
// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-blob.
func (b BlobClient) ReleaseLease(ctx context.Context, leaseID string, options *ReleaseBlobLeaseOptions) (BlobReleaseLeaseResponse, error) {
basics, access := options.pointers()
resp, err := b.client.ReleaseLease(ctx, leaseID, basics, access)

return resp, handleError(err)
}

// 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 BlobClient) BreakLease(ctx context.Context, options *BreakBlobLeaseOptions) (BlobBreakLeaseResponse, error) {
basics, access := options.pointers()
resp, err := b.client.BreakLease(ctx, basics, access)

return resp, handleError(err)
}

// ChangeLease changes the blob's lease ID.
// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-blob.
func (b BlobClient) ChangeLease(ctx context.Context, leaseID string, proposedID string, options *ChangeBlobLeaseOptions) (BlobChangeLeaseResponse, error) {
basics, access := options.pointers()
resp, err := b.client.ChangeLease(ctx, leaseID, proposedID, basics, access)

return resp, handleError(err)
}

// 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 BlobClient) StartCopyFromURL(ctx context.Context, copySource string, options *StartCopyBlobOptions) (BlobStartCopyFromURLResponse, error) {
Expand Down Expand Up @@ -215,13 +250,13 @@ func (b BlobClient) GetBlobSASToken(permissions BlobSASPermissions, validityTime

return BlobSASSignatureValues{
ContainerName: urlParts.ContainerName,
BlobName: urlParts.BlobName,
SnapshotTime: t,
Version: SASVersion,
BlobName: urlParts.BlobName,
SnapshotTime: t,
Version: SASVersion,

Permissions: permissions.String(),

StartTime: time.Now(),
StartTime: time.Now(),
ExpiryTime: time.Now().Add(validityTime),
}.NewSASQueryParameters(b.cred)
}
97 changes: 97 additions & 0 deletions sdk/storage/azblob/zc_blobRequestOptions.go
Expand Up @@ -150,6 +150,103 @@ func (o *CreateBlobSnapshotOptions) pointers() (blobSetMetadataOptions *BlobCrea
return &basics, o.CpkInfo, o.CpkScopeInfo, o.ModifiedAccessConditions, o.LeaseAccessConditions
}

type AcquireBlobLeaseOptions struct {
// Specifies the duration of the lease, in seconds, or negative one (-1) for a lease that never expires. A non-infinite lease
// can be between 15 and 60 seconds. A lease duration cannot be changed using renew or change.
Duration int32

// 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.
ProposedLeaseID *string

ModifiedAccessConditions *ModifiedAccessConditions
}

func (o *AcquireBlobLeaseOptions) pointers() (blobAcquireLeaseOptions *BlobAcquireLeaseOptions, modifiedAccessConditions *ModifiedAccessConditions) {
if o == nil {
return nil, nil
}

basics := BlobAcquireLeaseOptions{
Duration: &o.Duration,
ProposedLeaseId: o.ProposedLeaseID,
}

return &basics, o.ModifiedAccessConditions
}

type RenewBlobLeaseOptions struct {
ModifiedAccessConditions *ModifiedAccessConditions
}

func (o *RenewBlobLeaseOptions) pointers() (blobRenewLeaseOptions *BlobRenewLeaseOptions, modifiedAccessConditions *ModifiedAccessConditions) {
if o == nil {
return nil, nil
}

return nil, o.ModifiedAccessConditions
}

type ReleaseBlobLeaseOptions struct {
ModifiedAccessConditions *ModifiedAccessConditions
}

func (o *ReleaseBlobLeaseOptions) pointers() (blobReleaseLeaseOptions *BlobReleaseLeaseOptions, modifiedAccessConditions *ModifiedAccessConditions) {
if o == nil {
return nil, nil
}

return nil, o.ModifiedAccessConditions
}

type BreakBlobLeaseOptions struct {
// For a break operation, proposed duration the lease should continue before it is broken, in seconds, between 0 and 60. This
// break period is only used if it is shorter than the time remaining on the lease. If longer, the time remaining on the lease
// is used. A new lease will not be available before the break period has expired, but the lease may be held for longer than
// the break period. If this header does not appear with a break operation, a fixed-duration lease breaks after the remaining
// lease period elapses, and an infinite lease breaks immediately.
BreakPeriod *int32
ModifiedAccessConditions *ModifiedAccessConditions
}

func (o *BreakBlobLeaseOptions) pointers() (blobBreakLeaseOptions *BlobBreakLeaseOptions, modifiedAccessConditions *ModifiedAccessConditions) {
if o == nil {
return nil, nil
}

if o.BreakPeriod != nil {
period := leasePeriodPointer(*o.BreakPeriod)
basics := BlobBreakLeaseOptions{
BreakPeriod: period,
}
return &basics, o.ModifiedAccessConditions
}

return nil, o.ModifiedAccessConditions
}

// LeaseBreakNaturally tells ContainerURL's or BlobClient's BreakLease method to break the lease using service semantics.
const LeaseBreakNaturally = -1

func leasePeriodPointer(period int32) (p *int32) {
if period != LeaseBreakNaturally {
p = &period
}
return nil
}

type ChangeBlobLeaseOptions struct {
ModifiedAccessConditions *ModifiedAccessConditions
}

func (o *ChangeBlobLeaseOptions) pointers() (blobChangeLeaseOptions *BlobChangeLeaseOptions, modifiedAccessConditions *ModifiedAccessConditions) {
if o == nil {
return nil, nil
}

return nil, o.ModifiedAccessConditions
}

type StartCopyBlobOptions struct {
// Optional. Used to set blob tags in various blob operations.
BlobTagsMap *map[string]string
Expand Down
9 changes: 3 additions & 6 deletions sdk/storage/azblob/zc_client_options.go
@@ -1,6 +1,3 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

package azblob

import (
Expand All @@ -23,7 +20,7 @@ func (o *ClientOptions) getConnectionOptions() *connectionOptions {

return &connectionOptions{
HTTPClient: o.HTTPClient,
Retry: o.Retry,
Telemetry: o.Telemetry,
Retry: o.Retry,
Telemetry: o.Telemetry,
}
}
}
63 changes: 55 additions & 8 deletions sdk/storage/azblob/zc_containerClient.go
Expand Up @@ -5,6 +5,7 @@ package azblob

import (
"context"
"errors"
"time"

"github.com/Azure/azure-sdk-for-go/sdk/azcore"
Expand Down Expand Up @@ -89,13 +90,6 @@ func (c ContainerClient) NewPageBlobClient(blobName string) PageBlobClient {
}
}

func (c ContainerClient) NewContainerLeaseClient() ContainerLeaseClient {
return ContainerLeaseClient{
ContainerClient: c,
LeaseId: newUUID().String(),
}
}

func (c ContainerClient) GetAccountInfo(ctx context.Context) (ContainerGetAccountInfoResponse, error) {
resp, err := c.client.GetAccountInfo(ctx, nil)

Expand Down Expand Up @@ -194,6 +188,59 @@ func (c ContainerClient) SetAccessPolicy(ctx context.Context, options *SetAccess
return resp, handleError(err)
}

// 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 ContainerClient) AcquireLease(ctx context.Context, leaseOptions *AcquireLeaseOptionsContainer) (ContainerAcquireLeaseResponse, error) {

if leaseOptions == nil || leaseOptions.ContainerAcquireLeaseOptions == nil || leaseOptions.ContainerAcquireLeaseOptions.Duration == nil || leaseOptions.ContainerAcquireLeaseOptions.ProposedLeaseId == nil {
return ContainerAcquireLeaseResponse{}, errors.New("leaseOptions must be specified, with at least ProposedLeaseID and Duration specified under ContainerAcquireLeaseOptions")
}

resp, err := c.client.AcquireLease(ctx, leaseOptions.ContainerAcquireLeaseOptions, leaseOptions.ModifiedAccessConditions)

return resp, handleError(err)
}

// RenewLease renews the container's previously-acquired lease.
// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-container.
func (c ContainerClient) RenewLease(ctx context.Context, leaseId string, leaseOptions *RenewLeaseOptionsContainer) (ContainerRenewLeaseResponse, error) {
renewOptions, accessConditions := leaseOptions.pointers()

resp, err := c.client.RenewLease(ctx, leaseId, renewOptions, accessConditions)

return resp, handleError(err)
}

// ReleaseLease releases the container's previously-acquired lease.
// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-container.
func (c ContainerClient) ReleaseLease(ctx context.Context, leaseID string, leaseOptions *ReleaseLeaseOptionsContainer) (ContainerReleaseLeaseResponse, error) {
options, ac := leaseOptions.pointers()

resp, err := c.client.ReleaseLease(ctx, leaseID, options, ac)

return resp, handleError(err)
}

// 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 ContainerClient) BreakLease(ctx context.Context, container *BreakLeaseOptionsContainer) (ContainerBreakLeaseResponse, error) {
options, ac := container.pointers()

resp, err := c.client.BreakLease(ctx, options, ac)

return resp, handleError(err)
}

// ChangeLease changes the container's lease ID.
// For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-container.
func (c ContainerClient) ChangeLease(ctx context.Context, leaseID string, proposedID string, options *ChangeLeaseOptionsContainer) (ContainerChangeLeaseResponse, error) {
clo, ac := options.pointers()

resp, err := c.client.ChangeLease(ctx, leaseID, proposedID, clo, ac)

return resp, handleError(err)
}

// ListBlobsFlatSegment returns a pager for blobs starting from the specified Marker. Use an empty
// Marker to start enumeration from the beginning. Blob names are returned in lexicographic order.
// For more information, see https://docs.microsoft.com/rest/api/storageservices/list-blobs.
Expand Down Expand Up @@ -230,7 +277,7 @@ func (c ContainerClient) GetContainerSASToken(permissions BlobSASPermissions, va

Permissions: permissions.String(),

StartTime: time.Now(),
StartTime: time.Now(),
ExpiryTime: time.Now().Add(validityTime),
}.NewSASQueryParameters(c.cred)
}
58 changes: 58 additions & 0 deletions sdk/storage/azblob/zc_containerRequestOptions.go
Expand Up @@ -80,6 +80,64 @@ func (o *SetAccessPolicyOptions) pointers() (ContainerSetAccessPolicyOptions, *L
return o.ContainerSetAccessPolicyOptions, lac, mac
}

type AcquireLeaseOptionsContainer struct {
// At least Access and ContainerAcl must be specified
ContainerAcquireLeaseOptions *ContainerAcquireLeaseOptions
ModifiedAccessConditions *ModifiedAccessConditions
}

type RenewLeaseOptionsContainer struct {
ContainerRenewLeaseOptions *ContainerRenewLeaseOptions
ModifiedAccessConditions *ModifiedAccessConditions
}

func (o *RenewLeaseOptionsContainer) pointers() (*ContainerRenewLeaseOptions, *ModifiedAccessConditions) {
if o == nil {
return nil, nil
}

return o.ContainerRenewLeaseOptions, o.ModifiedAccessConditions
}

type ReleaseLeaseOptionsContainer struct {
ContainerReleaseLeaseOptions *ContainerReleaseLeaseOptions
ModifiedAccessConditions *ModifiedAccessConditions
}

func (o *ReleaseLeaseOptionsContainer) pointers() (*ContainerReleaseLeaseOptions, *ModifiedAccessConditions) {
if o == nil {
return nil, nil
}

return o.ContainerReleaseLeaseOptions, o.ModifiedAccessConditions
}

type BreakLeaseOptionsContainer struct {
ContainerBreakLeaseOptions *ContainerBreakLeaseOptions
ModifiedAccessConditions *ModifiedAccessConditions
}

func (o *BreakLeaseOptionsContainer) pointers() (*ContainerBreakLeaseOptions, *ModifiedAccessConditions) {
if o == nil {
return nil, nil
}

return o.ContainerBreakLeaseOptions, o.ModifiedAccessConditions
}

type ChangeLeaseOptionsContainer struct {
ContainerChangeLeaseOptions *ContainerChangeLeaseOptions
ModifiedAccessConditions *ModifiedAccessConditions
}

func (o *ChangeLeaseOptionsContainer) pointers() (*ContainerChangeLeaseOptions, *ModifiedAccessConditions) {
if o == nil {
return nil, nil
}

return o.ContainerChangeLeaseOptions, o.ModifiedAccessConditions
}

type SetMetadataContainerOptions struct {
Metadata *map[string]string
LeaseAccessConditions *LeaseAccessConditions
Expand Down

0 comments on commit 72e587b

Please sign in to comment.