Merge pull request #1321 from aibaars/gcs-fix-retry

GCS storage driver: fix retry function
pull/1350/head
Richard Scothern 2016-01-06 12:00:12 -08:00
commit 9f83bfc071
2 changed files with 43 additions and 3 deletions

View File

@ -318,13 +318,13 @@ func retry(maxTries int, req request) error {
backoff := time.Second
var err error
for i := 0; i < maxTries; i++ {
err := req()
err = req()
if err == nil {
return nil
}
status := err.(*googleapi.Error)
if status == nil || (status.Code != 429 && status.Code < http.StatusInternalServerError) {
status, ok := err.(*googleapi.Error)
if !ok || (status.Code != 429 && status.Code < http.StatusInternalServerError) {
return err
}

View File

@ -3,10 +3,13 @@
package gcs
import (
"fmt"
"io/ioutil"
"os"
"testing"
"google.golang.org/api/googleapi"
ctx "github.com/docker/distribution/context"
storagedriver "github.com/docker/distribution/registry/storage/driver"
"github.com/docker/distribution/registry/storage/driver/testsuites"
@ -55,6 +58,43 @@ func init() {
}, skipGCS)
}
func TestRetry(t *testing.T) {
if skipGCS() != "" {
t.Skip(skipGCS())
}
assertError := func(expected string, observed error) {
observedMsg := "<nil>"
if observed != nil {
observedMsg = observed.Error()
}
if observedMsg != expected {
t.Fatalf("expected %v, observed %v\n", expected, observedMsg)
}
}
err := retry(2, func() error {
return &googleapi.Error{
Code: 503,
Message: "google api error",
}
})
assertError("googleapi: Error 503: google api error", err)
err = retry(2, func() error {
return &googleapi.Error{
Code: 404,
Message: "google api error",
}
})
assertError("googleapi: Error 404: google api error", err)
err = retry(2, func() error {
return fmt.Errorf("error")
})
assertError("error", err)
}
func TestEmptyRootList(t *testing.T) {
if skipGCS() != "" {
t.Skip(skipGCS())