Skip to content

Commit 67dee32

Browse files
committed
handle bucket eventual consistency in Init
1 parent f3b28a5 commit 67dee32

File tree

1 file changed

+24
-6
lines changed

1 file changed

+24
-6
lines changed

internal/aws_test.go

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
. "github.com/kahing/goofys/api/common"
1919
. "gopkg.in/check.v1"
2020

21+
"fmt"
2122
"syscall"
2223
"time"
2324
)
@@ -57,13 +58,30 @@ type S3BucketEventualConsistency struct {
5758
*S3Backend
5859
}
5960

61+
func (s *S3BucketEventualConsistency) Init(key string) (err error) {
62+
// TODO: make Init return errno instead
63+
NoSuchBucket := fmt.Sprintf("bucket %v does not exist", s.Bucket())
64+
65+
for i := 0; i < 10; i++ {
66+
err = s.S3Backend.Init(key)
67+
if err != nil && err.Error() == NoSuchBucket {
68+
s3Log.Infof("waiting for bucket")
69+
time.Sleep((time.Duration(i) + 1) * 2 * time.Second)
70+
} else {
71+
return
72+
}
73+
}
74+
75+
return
76+
}
77+
6078
func (s *S3BucketEventualConsistency) ListBlobs(param *ListBlobsInput) (*ListBlobsOutput, error) {
6179
for i := 0; i < 10; i++ {
6280
res, err := s.S3Backend.ListBlobs(param)
6381
switch err {
6482
case syscall.ENXIO:
65-
time.Sleep((time.Duration(i) + 1) * 2 * time.Second)
6683
s3Log.Infof("waiting for bucket")
84+
time.Sleep((time.Duration(i) + 1) * 2 * time.Second)
6785
default:
6886
return res, err
6987
}
@@ -77,8 +95,8 @@ func (s *S3BucketEventualConsistency) DeleteBlob(param *DeleteBlobInput) (*Delet
7795
res, err := s.S3Backend.DeleteBlob(param)
7896
switch err {
7997
case syscall.ENXIO:
80-
time.Sleep((time.Duration(i) + 1) * 2 * time.Second)
8198
s3Log.Infof("waiting for bucket")
99+
time.Sleep((time.Duration(i) + 1) * 2 * time.Second)
82100
default:
83101
return res, err
84102
}
@@ -92,8 +110,8 @@ func (s *S3BucketEventualConsistency) DeleteBlobs(param *DeleteBlobsInput) (*Del
92110
res, err := s.S3Backend.DeleteBlobs(param)
93111
switch err {
94112
case syscall.ENXIO:
95-
time.Sleep((time.Duration(i) + 1) * 2 * time.Second)
96113
s3Log.Infof("waiting for bucket")
114+
time.Sleep((time.Duration(i) + 1) * 2 * time.Second)
97115
default:
98116
return res, err
99117
}
@@ -107,8 +125,8 @@ func (s *S3BucketEventualConsistency) CopyBlob(param *CopyBlobInput) (*CopyBlobO
107125
res, err := s.S3Backend.CopyBlob(param)
108126
switch err {
109127
case syscall.ENXIO:
110-
time.Sleep((time.Duration(i) + 1) * 2 * time.Second)
111128
s3Log.Infof("waiting for bucket")
129+
time.Sleep((time.Duration(i) + 1) * 2 * time.Second)
112130
default:
113131
return res, err
114132
}
@@ -123,8 +141,8 @@ func (s *S3BucketEventualConsistency) PutBlob(param *PutBlobInput) (*PutBlobOutp
123141
switch err {
124142
case syscall.ENXIO:
125143
param.Body.Seek(0, 0)
126-
time.Sleep((time.Duration(i) + 1) * 2 * time.Second)
127144
s3Log.Infof("waiting for bucket")
145+
time.Sleep((time.Duration(i) + 1) * 2 * time.Second)
128146
default:
129147
return res, err
130148
}
@@ -138,8 +156,8 @@ func (s *S3BucketEventualConsistency) RemoveBucket(param *RemoveBucketInput) (*R
138156
res, err := s.S3Backend.RemoveBucket(param)
139157
switch err {
140158
case syscall.ENXIO:
141-
time.Sleep((time.Duration(i) + 1) * 2 * time.Second)
142159
s3Log.Infof("waiting for bucket")
160+
time.Sleep((time.Duration(i) + 1) * 2 * time.Second)
143161
default:
144162
return res, err
145163
}

0 commit comments

Comments
 (0)