X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/97ece5619eb80acce46ec5c7b521c08ecaaf0e86..1e74db260a84317d58969b9b530d0d87a325da9c:/services/keepstore/azure_blob_volume.go diff --git a/services/keepstore/azure_blob_volume.go b/services/keepstore/azure_blob_volume.go index 95315643f3..657c3151ca 100644 --- a/services/keepstore/azure_blob_volume.go +++ b/services/keepstore/azure_blob_volume.go @@ -155,23 +155,13 @@ func (v *AzureBlobVolume) Get(loc string) ([]byte, error) { func (v *AzureBlobVolume) get(loc string) ([]byte, error) { rdr, err := v.bsClient.GetBlob(v.containerName, loc) if err != nil { - if strings.Contains(err.Error(), "404 Not Found") { - // "storage: service returned without a response body (404 Not Found)" - return nil, os.ErrNotExist - } - return nil, err - } - switch err := err.(type) { - case nil: - default: - log.Printf("ERROR IN Get(): %T %#v", err, err) - return nil, err + return nil, v.translateError(err) } defer rdr.Close() buf := bufs.Get(BlockSize) n, err := io.ReadFull(rdr, buf) switch err { - case io.EOF, io.ErrUnexpectedEOF: + case nil, io.EOF, io.ErrUnexpectedEOF: return buf[:n], nil default: bufs.Put(buf) @@ -182,7 +172,7 @@ func (v *AzureBlobVolume) get(loc string) ([]byte, error) { func (v *AzureBlobVolume) Compare(loc string, expect []byte) error { rdr, err := v.bsClient.GetBlob(v.containerName, loc) if err != nil { - return err + return v.translateError(err) } defer rdr.Close() return compareReaderWithBuf(rdr, expect, loc[:32]) @@ -285,3 +275,17 @@ func (v *AzureBlobVolume) Writable() bool { func (v *AzureBlobVolume) Replication() int { return v.replication } + +// If possible, translate an Azure SDK error to a recognizable error +// like os.ErrNotExist. +func (v *AzureBlobVolume) translateError(err error) error { + switch { + case err == nil: + return err + case strings.Contains(err.Error(), "404 Not Found"): + // "storage: service returned without a response body (404 Not Found)" + return os.ErrNotExist + default: + return err + } +}