~rogpeppe/juju-core/282-ec2-retry-put

« back to all changes in this revision

Viewing changes to environs/ec2/storage.go

  • Committer: Roger Peppe
  • Date: 2013-04-15 23:22:41 UTC
  • Revision ID: roger.peppe@canonical.com-20130415232241-m27boqmkr2q59xj3
environs/ec2: add TODOs

Show diffs side-by-side

added added

removed removed

Lines of Context:
33
33
        if s.madeBucket {
34
34
                return nil
35
35
        }
 
36
        // TODO(rog) make this simpler when goamz does retries on PutBucket,
36
37
        var err error
37
38
        for a := shortAttempt.Start(); a.Next(); {
38
 
                // PutBucket always return a 200 if we recreate an existing bucket for the
 
39
                // PutBucket always returns a 200 if we recreate an existing bucket for the
39
40
                // original s3.amazonaws.com endpoint. For all other endpoints PutBucket
40
41
                // returns 409 with a known subcode.
41
42
                err = s.bucket.PutBucket(s3.Private)
58
59
                return fmt.Errorf("cannot make S3 control bucket: %v", err)
59
60
        }
60
61
        var err error
 
62
        // TODO(rog) make this simpler when goamz does retries on PutReader,
61
63
        for a := shortAttempt.Start(); a.Next(); {
62
64
                err = s.bucket.PutReader(file, r, length, "binary/octet-stream", s3.Private)
63
65
                if !shouldRetry(err) {
92
94
// shouldRetry returns whether a error looks transient.
93
95
// It's an exact copy of the function of the same name in
94
96
// goamz/s3.
 
97
// TODO(rog) remove when goamz does retries itself.
95
98
func shouldRetry(err error) bool {
96
99
        if err == nil {
97
100
                return false
136
139
 
137
140
func (s *storage) Remove(file string) error {
138
141
        var err error
 
142
        // TODO(rog) make this simpler when goamz does retries on Del,
139
143
        for a := shortAttempt.Start(); a.Next(); {
140
144
                err = s.bucket.Del(file)
141
145
                // If we can't delete the object because the bucket doesn't