gcsstore: Do not ignore errors when writing an object
Previously, any error returned from w.Close() would be ignored. This is a problem since this function is responsible for returning any error that occurred during the actual GCS transaction. This fix also uncovered an issue in the corresponding test routine. Furthermore, a "404 Not Found" error when writing an object is now interpreted as if the bucket does not exist to ease debugging (see https://github.com/tus/tusd/issues/241). /cc @tab1293
This commit is contained in:
parent
5e06fc54b0
commit
c0651e77fc
|
@ -10,6 +10,7 @@ import (
|
|||
|
||||
"cloud.google.com/go/storage"
|
||||
"golang.org/x/net/context"
|
||||
"google.golang.org/api/googleapi"
|
||||
"google.golang.org/api/iterator"
|
||||
"google.golang.org/api/option"
|
||||
|
||||
|
@ -290,13 +291,19 @@ func (service *GCSService) WriteObject(ctx context.Context, params GCSObjectPara
|
|||
|
||||
w := obj.NewWriter(ctx)
|
||||
|
||||
defer w.Close()
|
||||
|
||||
n, err := io.Copy(w, r)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
err = w.Close()
|
||||
if err != nil {
|
||||
if gErr, ok := err.(*googleapi.Error); ok && gErr.Code == 404 {
|
||||
return 0, fmt.Errorf("gcsstore: the bucket %s could not be found while trying to write an object", params.Bucket)
|
||||
}
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return n, err
|
||||
}
|
||||
|
||||
|
|
|
@ -360,6 +360,13 @@ func TestWriteObject(t *testing.T) {
|
|||
"expiry_date": "1425333671141",
|
||||
})
|
||||
|
||||
gock.New("https://googleapis.com").
|
||||
Post("/upload/storage/v1/b/test-bucket/o").
|
||||
MatchParam("alt", "json").
|
||||
MatchParam("key", "foo").
|
||||
Reply(200).
|
||||
JSON(map[string]string{})
|
||||
|
||||
ctx := context.Background()
|
||||
client, err := storage.NewClient(ctx, option.WithAPIKey("foo"))
|
||||
if err != nil {
|
||||
|
@ -379,7 +386,7 @@ func TestWriteObject(t *testing.T) {
|
|||
}, reader)
|
||||
|
||||
if err != nil {
|
||||
t.Errorf("Error deleting object: %+v", err)
|
||||
t.Errorf("Error writing object: %+v", err)
|
||||
}
|
||||
|
||||
if size != 1 {
|
||||
|
|
Loading…
Reference in New Issue