Skip to content

Commit 793a1b3

Browse files
Paul Hewletteccles
authored andcommitted
Upgrade azure-sdk/storage/azblob
AB#8963
1 parent 96a91ed commit 793a1b3

File tree

15 files changed

+151
-153
lines changed

15 files changed

+151
-153
lines changed

azblob/accessconditions.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@ package azblob
33
import (
44
"errors"
55

6+
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
67
azStorageBlob "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
78
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blob"
9+
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/lease"
810
)
911

1012
func storerOptionConditions(options *StorerOptions) (blob.AccessConditions, error) {
@@ -17,20 +19,22 @@ func storerOptionConditions(options *StorerOptions) (blob.AccessConditions, erro
1719
return blobAccessConditions, errors.New("etag value missing")
1820
}
1921

20-
blobAccessConditions = azStorageBlob.BlobAccessConditions{}
22+
blobAccessConditions = blob.AccessConditions{}
2123
if options.leaseID != "" {
22-
blobAccessConditions.LeaseAccessConditions = &azStorageBlob.LeaseAccessConditions{
24+
blobAccessConditions.LeaseAccessConditions = &lease.AccessConditions{
2325
LeaseID: &options.leaseID,
2426
}
2527
}
2628

27-
blobAccessConditions.ModifiedAccessConditions = &azStorageBlob.ModifiedAccessConditions{}
29+
blobAccessConditions.ModifiedAccessConditions = &blob.ModifiedAccessConditions{}
2830

2931
switch options.etagCondition {
3032
case ETagMatch:
31-
blobAccessConditions.ModifiedAccessConditions.IfMatch = &options.etag
33+
t := azcore.ETag(options.etag)
34+
blobAccessConditions.ModifiedAccessConditions.IfMatch = &t
3235
case ETagNoneMatch:
33-
blobAccessConditions.ModifiedAccessConditions.IfNoneMatch = &options.etag
36+
t := azcore.ETag(options.etag)
37+
blobAccessConditions.ModifiedAccessConditions.IfNoneMatch = &t
3438
case TagsWhere:
3539
blobAccessConditions.ModifiedAccessConditions.IfTags = &options.etag
3640
default:

azblob/delete.go

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ import (
44
"context"
55
"errors"
66

7+
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
78
msazblob "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
9+
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blockblob"
810
"github.com/datatrails/go-datatrails-common/logger"
911
)
1012

@@ -15,16 +17,12 @@ func (azp *Storer) Delete(
1517
) error {
1618
logger.Sugar.Debugf("Delete blob %s", identity)
1719

18-
blockBlobClient, err := azp.containerClient.NewBlockBlobClient(identity)
19-
if err != nil {
20-
logger.Sugar.Infof("Cannot get block blob client blob: %v", err)
21-
return ErrorFromError(err)
22-
}
20+
blockBlobClient := azp.containerClient.NewBlockBlobClient(identity)
2321

24-
_, err = blockBlobClient.Delete(ctx, nil)
25-
var terr *msazblob.StorageError
22+
_, err := blockBlobClient.Delete(ctx, nil)
23+
var terr *azcore.ResponseError
2624
if errors.As(err, &terr) {
27-
resp := terr.Response()
25+
resp := terr.RawResponse
2826
if resp.Body != nil {
2927
defer resp.Body.Close()
3028
}

azblob/download.go

Lines changed: 13 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"net/http"
1010

1111
azStorageBlob "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
12+
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blob"
1213

1314
"github.com/datatrails/go-datatrails-common/logger"
1415
)
@@ -31,11 +32,7 @@ func (azp *Storer) getTags(
3132
var err error
3233
logger.Sugar.Debugf("getTags BlockBlob URL %s", identity)
3334

34-
blobClient, err := azp.containerClient.NewBlobClient(identity)
35-
if err != nil {
36-
logger.Sugar.Debugf("getTags BlockBlob Client %s error: %v", identity, err)
37-
return nil, ErrorFromError(err)
38-
}
35+
blobClient := azp.containerClient.NewBlobClient(identity)
3936

4037
resp, err := blobClient.GetTags(ctx, nil)
4138
if err != nil {
@@ -55,13 +52,11 @@ func (azp *Storer) getTags(
5552
func (azp *Storer) getMetadata(
5653
ctx context.Context,
5754
identity string,
58-
) (map[string]string, error) {
55+
) (map[string]*string, error) {
5956
logger.Sugar.Debugf("getMetadata BlockBlob URL %s", identity)
6057

61-
blobClient, err := azp.containerClient.NewBlobClient(identity)
62-
if err != nil {
63-
return nil, ErrorFromError(err)
64-
}
58+
blobClient := azp.containerClient.NewBlobClient(identity)
59+
6560
ctx, cancel := context.WithCancel(ctx)
6661
defer cancel()
6762
resp, err := blobClient.GetProperties(ctx, nil)
@@ -143,16 +138,14 @@ func (azp *Storer) Reader(
143138
}
144139

145140
logger.Sugar.Debugf("Creating New io.Reader")
146-
resp.BlobClient, err = azp.containerClient.NewBlobClient(identity)
147-
if err != nil {
148-
return nil, ErrorFromError(err)
149-
}
150-
countToEnd := int64(azStorageBlob.CountToEnd)
151-
get, err := resp.BlobClient.Download(
141+
resp.BlobClient = azp.containerClient.NewBlobClient(identity)
142+
get, err := resp.BlobClient.DownloadStream(
152143
ctx,
153-
&azStorageBlob.BlobDownloadOptions{
154-
BlobAccessConditions: &blobAccessConditions,
155-
Count: &countToEnd,
144+
&blob.DownloadStreamOptions{
145+
AccessConditions: &blobAccessConditions,
146+
Range: blob.HTTPRange{
147+
Count: int64(blob.CountToEnd),
148+
},
156149
},
157150
)
158151

@@ -173,10 +166,7 @@ func (azp *Storer) Reader(
173166
if options.getMetadata == BothMetadataAndBlob {
174167
_ = readerResponseMetadata(resp, resp.Metadata) // the parse error is benign
175168
}
176-
}
177-
178-
if get.RawResponse != nil {
179-
resp.Reader = get.Body(nil)
169+
resp.Reader = get.Body
180170
}
181171
return resp, err
182172
}

azblob/error.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ import (
66
"errors"
77
"net/http"
88

9+
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
910
azStorageBlob "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
11+
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blob"
12+
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/bloberror"
1013
"github.com/datatrails/go-datatrails-common/logger"
1114
)
1215

@@ -43,9 +46,9 @@ func (e *Error) Unwrap() error {
4346
// StatusCode returns status code for failing request or 500 if code is not available on the error
4447
func (e *Error) StatusCode() int {
4548

46-
var terr *azStorageBlob.StorageError
49+
var terr *azcore.ResponseError
4750
if errors.As(e.err, &terr) {
48-
resp := terr.Response()
51+
resp := terr.RawResponse
4952
if resp.Body != nil {
5053
defer resp.Body.Close()
5154
}
@@ -62,7 +65,7 @@ func (e *Error) StatusCode() int {
6265

6366
// StorageErrorCode returns the underlying azure storage ErrorCode string eg "BlobNotFound"
6467
func (e *Error) StorageErrorCode() string {
65-
var terr *azStorageBlob.StorageError
68+
var terr *azcore.ResponseError
6669
if errors.As(e.err, &terr) {
6770
if terr.ErrorCode != "" {
6871
return string(terr.ErrorCode)
@@ -74,5 +77,5 @@ func (e *Error) StorageErrorCode() string {
7477
// IsConditionNotMet returns true if the err is the storage code indicating that
7578
// a If- header predicate (eg ETag) was not met
7679
func (e *Error) IsConditionNotMet() bool {
77-
return e.StorageErrorCode() == string(azStorageBlob.StorageErrorCodeConditionNotMet)
80+
return bloberror.HasCode(e, bloberror.ConditionNotMet)
7881
}

azblob/lease.go

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"net/http"
1010
"time"
1111

12+
"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
1213
azStorageBlob "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
1314
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blob"
1415
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/lease"
@@ -85,25 +86,24 @@ func (azp *Storer) AcquireLeaseRenewable(
8586
func (azp *Storer) acquireLease(
8687
ctx context.Context, objectname string, leaseTimeout int32,
8788
) (
88-
*lease.BlobAcquireResponse, *blob.Client, error,
89+
*lease.ContainerAcquireResponse, *lease.ContainerClient, error,
8990
) {
9091
logger.Sugar.Debugf("acquireLease: %v", objectname)
9192

92-
blockBlobClient, err := azp.containerClient.NewBlockBlobClient(objectname)
93+
leaseBlobClient, err := lease.NewContainerClient(
94+
azp.containerClient,
95+
&lease.ContainerClientOptions{
96+
LeaseID: to.Ptr(objectname),
97+
},
98+
)
9399
if err != nil {
94100
logger.Sugar.Infof("cannot create block blob client %s: %v", objectname, err)
95101
return nil, nil, err
96102
}
97-
leaseBlobClient, err := blockBlobClient.NewBlobLeaseClient(nil)
98-
if err != nil {
99-
logger.Sugar.Infof("cannot create lease Blob %s: %v", objectname, err)
100-
return nil, nil, err
101-
}
102103
lease, err := leaseBlobClient.AcquireLease(
103104
ctx,
104-
&azStorageBlob.BlobAcquireLeaseOptions{
105-
Duration: &leaseTimeout,
106-
},
105+
leaseTimeout,
106+
nil,
107107
)
108108

109109
return &lease, leaseBlobClient, err
@@ -122,12 +122,12 @@ func (azp *Storer) ReleaseLeaseDeferable(ctx context.Context, objectname string,
122122
func (azp *Storer) ReleaseLease(ctx context.Context, objectname string, leaseID string,
123123
) error {
124124
logger.Sugar.Debugf("ReleaseLease: %v", objectname)
125-
blockBlobClient, err := azp.containerClient.NewBlockBlobClient(objectname)
126-
if err != nil {
127-
logger.Sugar.Infof("cannot create block Blob client %s: %v", objectname, err)
128-
return err
129-
}
130-
leaseBlobClient, err := blockBlobClient.NewBlobLeaseClient(&leaseID)
125+
leaseBlobClient, err := lease.NewContainerClient(
126+
azp.containerClient,
127+
&lease.ContainerClientOptions{
128+
LeaseID: to.Ptr(objectname),
129+
},
130+
)
131131
if err != nil {
132132
logger.Sugar.Infof("cannot create lease Blob %s: %v", objectname, err)
133133
return err

azblob/list.go

Lines changed: 22 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
azStorageBlob "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
99
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blob"
1010
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/container"
11+
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/service"
1112

1213
"github.com/datatrails/go-datatrails-common/logger"
1314
)
@@ -29,23 +30,22 @@ func (azp *Storer) Count(ctx context.Context, tagsFilter string) (int64, error)
2930
//
3031
// tagsFilter example: "dog='germanshepherd' and penguin='emperorpenguin'"
3132
// Returns all blobs with the specific tag filter
32-
func (azp *Storer) FilteredList(ctx context.Context, tagsFilter string) ([]*azStorageBlob.FilterBlobItem, error) {
33+
func (azp *Storer) FilteredList(ctx context.Context, tagsFilter string) ([]*service.FilterBlobItem, error) {
3334
logger.Sugar.Debugf("FilteredList")
3435

35-
var filteredBlobs []*azStorageBlob.FilterBlobItem
36+
var filteredBlobs []*service.FilterBlobItem
3637
var err error
3738

38-
result, err := azp.serviceClient.FindBlobsByTags(
39+
result, err := azp.serviceClient.FilterBlobs(
3940
ctx,
40-
&azStorageBlob.ServiceFilterBlobsOptions{
41-
Where: &tagsFilter,
42-
},
41+
tagsFilter,
42+
nil,
4343
)
4444
if err != nil {
45-
return filteredBlobs, err
45+
return nil, err
4646
}
4747

48-
filteredBlobs = result.Blobs
48+
filteredBlobs = result.FilterBlobSegment.Blobs
4949

5050
return filteredBlobs, err
5151
}
@@ -54,10 +54,6 @@ type ListerResponse struct {
5454
Marker ListMarker // nil if no more pages
5555
Prefix string
5656

57-
// Standard request status things
58-
StatusCode int // For If- header fails, err can be nil and code can be 304
59-
Status string
60-
6157
Items []*container.BlobItem
6258
}
6359

@@ -67,44 +63,42 @@ func (azp *Storer) List(ctx context.Context, opts ...Option) (*ListerResponse, e
6763
for _, opt := range opts {
6864
opt(options)
6965
}
70-
o := azStorageBlob.ContainerListBlobsFlatOptions{
66+
o := azStorageBlob.ListBlobsFlatOptions{
7167
Marker: options.listMarker,
68+
Include: container.ListBlobsInclude{
69+
Metadata: options.listIncludeMetadata,
70+
Tags: options.listIncludeTags,
71+
},
7272
}
7373
if options.listPrefix != "" {
7474
o.Prefix = &options.listPrefix
7575
}
76-
if options.listIncludeTags {
77-
o.Include = append(o.Include, azStorageBlob.ListBlobsIncludeItemTags)
78-
}
79-
if options.listIncludeMetadata {
80-
o.Include = append(o.Include, azStorageBlob.ListBlobsIncludeItemMetadata)
81-
}
8276

8377
// TODO: v1.21 feature which would be great
8478
// if options.listDelim != "" {
8579
// }
8680
r := &ListerResponse{Items: []*container.BlobItem{}}
8781

8882
// blob listings are returned across multiple pages
89-
pager := azp.containerClient.NewListBlobsFlatPager(azp.container, &o)
90-
if !pager.NextPage(ctx) {
91-
return r, nil
83+
pager := azp.containerClient.NewListBlobsFlatPager(&o)
84+
resp, err := pager.NextPage(ctx)
85+
if err != nil {
86+
return nil, err
9287
}
93-
resp := pager.PageResponse()
94-
r.Status = resp.RawResponse.Status
95-
r.StatusCode = resp.RawResponse.StatusCode
9688
if resp.Prefix != nil {
9789
r.Prefix = *resp.Prefix
9890
}
99-
91+
r.Items = append(r.Items, resp.Segment.BlobItems...)
10092
// continue fetching pages until no more remain
10193
for pager.More() {
10294
// advance to the next page
103-
page, err := pager.NextPage(ctx)
95+
resp, err := pager.NextPage(ctx)
10496
if err != nil {
10597
return nil, err
10698
}
107-
99+
if resp.Prefix != nil {
100+
r.Prefix = *resp.Prefix
101+
}
108102
// Note: we pass on the azure type otherwise we would be copying for no good
109103
// reason. let the caller decided how to deal with that
110104
r.Items = append(r.Items, resp.Segment.BlobItems...)

azblob/options.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func (g GetMetadata) String() string {
3434
// StorerOptions - optional args for specifying optional behaviour
3535
type StorerOptions struct {
3636
leaseID string
37-
metadata map[string]string
37+
metadata map[string]*string
3838
tags map[string]string
3939
getMetadata GetMetadata
4040
getTags bool
@@ -150,7 +150,7 @@ func WithLeaseID(leaseID string) Option {
150150
}
151151

152152
// WithMetadata specifies metadata to add - Write() only
153-
func WithMetadata(metadata map[string]string) Option {
153+
func WithMetadata(metadata map[string]*string) Option {
154154
return func(a *StorerOptions) {
155155
a.metadata = metadata
156156
}

0 commit comments

Comments
 (0)