fix upload

This commit is contained in:
Michael Yang 2023-11-02 13:22:42 -07:00
parent d39709260f
commit fe5a872444
2 changed files with 15 additions and 15 deletions

View File

@ -1188,15 +1188,19 @@ func makeRequestWithRetry(ctx context.Context, method string, requestURL *url.UR
regOpts.Token = token regOpts.Token = token
if body != nil { if body != nil {
if _, err := body.Seek(0, io.SeekStart); err != nil { body.Seek(0, io.SeekStart)
return nil, err
}
} }
continue continue
case resp.StatusCode == http.StatusNotFound:
return nil, os.ErrNotExist
case resp.StatusCode >= http.StatusBadRequest: case resp.StatusCode >= http.StatusBadRequest:
body, _ := io.ReadAll(resp.Body) body, err := io.ReadAll(resp.Body)
return nil, fmt.Errorf("on upload registry responded with code %d: %s", resp.StatusCode, body) if err != nil {
return nil, fmt.Errorf("%d: %s", resp.StatusCode, err)
}
return nil, fmt.Errorf("%d: %s", resp.StatusCode, body)
default: default:
return resp, nil return resp, nil
} }

View File

@ -334,15 +334,13 @@ func uploadBlob(ctx context.Context, mp ModelPath, layer *Layer, opts *RegistryO
requestURL := mp.BaseURL() requestURL := mp.BaseURL()
requestURL = requestURL.JoinPath("v2", mp.GetNamespaceRepository(), "blobs", layer.Digest) requestURL = requestURL.JoinPath("v2", mp.GetNamespaceRepository(), "blobs", layer.Digest)
resp, err := makeRequest(ctx, http.MethodHead, requestURL, nil, nil, opts) resp, err := makeRequestWithRetry(ctx, http.MethodHead, requestURL, nil, nil, opts)
if err != nil { switch {
case errors.Is(err, os.ErrNotExist):
case err != nil:
return err return err
} default:
defer resp.Body.Close() defer resp.Body.Close()
switch resp.StatusCode {
case http.StatusNotFound:
case http.StatusOK:
fn(api.ProgressResponse{ fn(api.ProgressResponse{
Status: fmt.Sprintf("uploading %s", layer.Digest), Status: fmt.Sprintf("uploading %s", layer.Digest),
Digest: layer.Digest, Digest: layer.Digest,
@ -351,8 +349,6 @@ func uploadBlob(ctx context.Context, mp ModelPath, layer *Layer, opts *RegistryO
}) })
return nil return nil
default:
return fmt.Errorf("unexpected status code %d", resp.StatusCode)
} }
data, ok := blobUploadManager.LoadOrStore(layer.Digest, &blobUpload{Layer: layer}) data, ok := blobUploadManager.LoadOrStore(layer.Digest, &blobUpload{Layer: layer})