Skip to content

Commit 02a1735

Browse files
committed
create a new bucket instance in methods for consistency with existing code
1 parent 9de39f7 commit 02a1735

File tree

2 files changed

+98
-23
lines changed

2 files changed

+98
-23
lines changed

alioss/client/storage_client.go

Lines changed: 62 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -141,9 +141,21 @@ func (dsc DefaultStorageClient) Copy(
141141
destinationObject string,
142142
) error {
143143
log.Printf("Copying object from %s to %s", sourceObject, destinationObject)
144+
srcURL := fmt.Sprintf("%s/%s", dsc.bucketURL, sourceObject)
145+
destURL := fmt.Sprintf("%s/%s", dsc.bucketURL, destinationObject)
144146

145-
if _, err := dsc.bucket.CopyObject(sourceObject, destinationObject); err != nil {
146-
return fmt.Errorf("failed to copy object from %s to %s: %w", sourceObject, destinationObject, err)
147+
client, err := oss.New(dsc.storageConfig.Endpoint, dsc.storageConfig.AccessKeyID, dsc.storageConfig.AccessKeySecret)
148+
if err != nil {
149+
return err
150+
}
151+
152+
bucket, err := client.Bucket(dsc.storageConfig.BucketName)
153+
if err != nil {
154+
return err
155+
}
156+
157+
if _, err := bucket.CopyObject(sourceObject, destinationObject); err != nil {
158+
return fmt.Errorf("failed to copy object from %s to %s: %w", srcURL, destURL, err)
147159
}
148160

149161
return nil
@@ -168,11 +180,11 @@ func (dsc DefaultStorageClient) Delete(
168180
}
169181

170182
func (dsc DefaultStorageClient) DeleteRecursive(
171-
objectPrefix string,
183+
prefix string,
172184
) error {
173-
if objectPrefix != "" {
185+
if prefix != "" {
174186
log.Printf("Deleting all objects in bucket %s with prefix '%s'\n",
175-
dsc.storageConfig.BucketName, objectPrefix)
187+
dsc.storageConfig.BucketName, prefix)
176188
} else {
177189
log.Printf("Deleting all objects in bucket %s\n",
178190
dsc.storageConfig.BucketName)
@@ -182,20 +194,29 @@ func (dsc DefaultStorageClient) DeleteRecursive(
182194

183195
for {
184196
var listOptions []oss.Option
185-
if objectPrefix != "" {
186-
listOptions = append(listOptions, oss.Prefix(objectPrefix))
197+
if prefix != "" {
198+
listOptions = append(listOptions, oss.Prefix(prefix))
187199
}
188200
if marker != "" {
189201
listOptions = append(listOptions, oss.Marker(marker))
190202
}
203+
client, err := oss.New(dsc.storageConfig.Endpoint, dsc.storageConfig.AccessKeyID, dsc.storageConfig.AccessKeySecret)
204+
if err != nil {
205+
return err
206+
}
191207

192-
resp, err := dsc.bucket.ListObjects(listOptions...)
208+
bucket, err := client.Bucket(dsc.storageConfig.BucketName)
209+
if err != nil {
210+
return err
211+
}
212+
213+
resp, err := bucket.ListObjects(listOptions...)
193214
if err != nil {
194215
return fmt.Errorf("error listing objects: %w", err)
195216
}
196217

197218
for _, object := range resp.Objects {
198-
if err := dsc.bucket.DeleteObject(object.Key); err != nil {
219+
if err := bucket.DeleteObject(object.Key); err != nil {
199220
log.Printf("Failed to delete object %s: %v\n", object.Key, err)
200221
}
201222
}
@@ -301,7 +322,17 @@ func (dsc DefaultStorageClient) List(
301322
opts = append(opts, oss.Marker(marker))
302323
}
303324

304-
resp, err := dsc.bucket.ListObjects(opts...)
325+
client, err := oss.New(dsc.storageConfig.Endpoint, dsc.storageConfig.AccessKeyID, dsc.storageConfig.AccessKeySecret)
326+
if err != nil {
327+
return nil, err
328+
}
329+
330+
bucket, err := client.Bucket(dsc.storageConfig.BucketName)
331+
if err != nil {
332+
return nil, err
333+
}
334+
335+
resp, err := bucket.ListObjects(opts...)
305336
if err != nil {
306337
return nil, fmt.Errorf("error retrieving page of objects: %w", err)
307338
}
@@ -326,20 +357,30 @@ type BlobProperties struct {
326357
}
327358

328359
func (dsc DefaultStorageClient) Properties(
329-
bucketObject string,
360+
object string,
330361
) error {
331362
log.Printf("Getting properties for object %s/%s\n",
332-
dsc.storageConfig.BucketName, bucketObject)
363+
dsc.storageConfig.BucketName, object)
364+
365+
client, err := oss.New(dsc.storageConfig.Endpoint, dsc.storageConfig.AccessKeyID, dsc.storageConfig.AccessKeySecret)
366+
if err != nil {
367+
return err
368+
}
333369

334-
meta, err := dsc.bucket.GetObjectDetailedMeta(bucketObject)
370+
bucket, err := client.Bucket(dsc.storageConfig.BucketName)
371+
if err != nil {
372+
return err
373+
}
374+
375+
meta, err := bucket.GetObjectDetailedMeta(object)
335376
if err != nil {
336377
var ossErr oss.ServiceError
337378
if errors.As(err, &ossErr) && ossErr.StatusCode == 404 {
338379
fmt.Println(`{}`)
339380
return nil
340381
}
341382

342-
return fmt.Errorf("failed to get properties for object %s: %w", bucketObject, err)
383+
return fmt.Errorf("failed to get properties for object %s: %w", object, err)
343384
}
344385

345386
eTag := meta.Get("ETag")
@@ -383,7 +424,12 @@ func (dsc DefaultStorageClient) Properties(
383424
func (dsc DefaultStorageClient) EnsureBucketExists() error {
384425
log.Printf("Ensuring bucket '%s' exists\n", dsc.storageConfig.BucketName)
385426

386-
exists, err := dsc.client.IsBucketExist(dsc.storageConfig.BucketName)
427+
client, err := oss.New(dsc.storageConfig.Endpoint, dsc.storageConfig.AccessKeyID, dsc.storageConfig.AccessKeySecret)
428+
if err != nil {
429+
return err
430+
}
431+
432+
exists, err := client.IsBucketExist(dsc.storageConfig.BucketName)
387433
if err != nil {
388434
return fmt.Errorf("failed to check if bucket exists: %w", err)
389435
}
@@ -393,7 +439,7 @@ func (dsc DefaultStorageClient) EnsureBucketExists() error {
393439
return nil
394440
}
395441

396-
if err := dsc.client.CreateBucket(dsc.storageConfig.BucketName); err != nil {
442+
if err := client.CreateBucket(dsc.storageConfig.BucketName); err != nil {
397443
return fmt.Errorf("failed to create bucket '%s': %w", dsc.storageConfig.BucketName, err)
398444
}
399445

alioss/integration/general_ali_test.go

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ package integration_test
33
import (
44
"bytes"
55
"fmt"
6+
"regexp"
7+
"strings"
8+
"time"
69

710
"os"
811

@@ -396,9 +399,33 @@ var _ = Describe("General testing for all Ali regions", func() {
396399
})
397400
})
398401

402+
const maxBucketLen = 63
403+
const suffixLen = 8
404+
399405
Describe("Invoking `ensure-bucket-exists`", func() {
400406
It("creates a bucket that can be observed via the OSS API", func() {
401-
newBucketName := bucketName + "-bommel"
407+
408+
base := bucketName
409+
410+
maxBaseLen := maxBucketLen - 1 - suffixLen
411+
if maxBaseLen < 1 {
412+
maxBaseLen = maxBucketLen - 1
413+
}
414+
if len(base) > maxBaseLen {
415+
base = base[:maxBaseLen]
416+
}
417+
418+
rawSuffix := integration.GenerateRandomString()
419+
safe := strings.ToLower(rawSuffix)
420+
421+
re := regexp.MustCompile(`[^a-z0-9]`)
422+
safe = re.ReplaceAllString(safe, "")
423+
if len(safe) < suffixLen {
424+
safe = safe + "0123456789abcdef"
425+
}
426+
safe = safe[:suffixLen]
427+
428+
newBucketName := fmt.Sprintf("%s-%s", base, safe)
402429

403430
cfg := defaultConfig
404431
cfg.BucketName = newBucketName
@@ -411,19 +438,22 @@ var _ = Describe("General testing for all Ali regions", func() {
411438

412439
defer func() {
413440
if err := ossClient.DeleteBucket(newBucketName); err != nil {
414-
if _, ferr := fmt.Fprintf(GinkgoWriter, "cleanup: failed to delete bucket %s: %v\n", newBucketName, err); ferr != nil {
415-
GinkgoWriter.Printf("cleanup: failed to write cleanup message: %v\n", ferr)
441+
if svcErr, ok := err.(oss.ServiceError); ok && svcErr.StatusCode == 404 {
442+
return
416443
}
444+
fmt.Fprintf(GinkgoWriter, "cleanup: failed to delete bucket %s: %v\n", newBucketName, err) //nolint:errcheck
417445
}
418446
}()
419447

420448
s1, err := integration.RunCli(cliPath, configPath, "ensure-bucket-exists")
421449
Expect(err).ToNot(HaveOccurred())
422450
Expect(s1.ExitCode()).To(BeZero())
423451

424-
exists, err := ossClient.IsBucketExist(newBucketName)
425-
Expect(err).ToNot(HaveOccurred())
426-
Expect(exists).To(BeTrue())
452+
Eventually(func(g Gomega) bool {
453+
exists, existsErr := ossClient.IsBucketExist(newBucketName)
454+
g.Expect(existsErr).ToNot(HaveOccurred())
455+
return exists
456+
}, 30*time.Second, 1*time.Second).Should(BeTrue())
427457
})
428458

429459
It("is idempotent", func() {
@@ -436,5 +466,4 @@ var _ = Describe("General testing for all Ali regions", func() {
436466
Expect(s2.ExitCode()).To(BeZero())
437467
})
438468
})
439-
440469
})

0 commit comments

Comments
 (0)