Merge pull request #5276 from aaronlehmann/tracker-false-positives
remotes/docker: Only return "already exists" on push when the upload was sucessful
This commit is contained in:
commit
85041ffe58
@ -52,7 +52,7 @@ func (p dockerPusher) Push(ctx context.Context, desc ocispec.Descriptor) (conten
|
|||||||
ref := remotes.MakeRefKey(ctx, desc)
|
ref := remotes.MakeRefKey(ctx, desc)
|
||||||
status, err := p.tracker.GetStatus(ref)
|
status, err := p.tracker.GetStatus(ref)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
if status.Offset == status.Total {
|
if status.Committed && status.Offset == status.Total {
|
||||||
return nil, errors.Wrapf(errdefs.ErrAlreadyExists, "ref %v", ref)
|
return nil, errors.Wrapf(errdefs.ErrAlreadyExists, "ref %v", ref)
|
||||||
}
|
}
|
||||||
// TODO: Handle incomplete status
|
// TODO: Handle incomplete status
|
||||||
@ -341,8 +341,6 @@ func (pw *pushWriter) Commit(ctx context.Context, size int64, expected digest.Di
|
|||||||
if err := pw.pipe.Close(); err != nil {
|
if err := pw.pipe.Close(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
// TODO: Update status to determine committing
|
|
||||||
|
|
||||||
// TODO: timeout waiting for response
|
// TODO: timeout waiting for response
|
||||||
resp := <-pw.responseC
|
resp := <-pw.responseC
|
||||||
if resp.err != nil {
|
if resp.err != nil {
|
||||||
@ -379,6 +377,10 @@ func (pw *pushWriter) Commit(ctx context.Context, size int64, expected digest.Di
|
|||||||
return errors.Errorf("got digest %s, expected %s", actual, expected)
|
return errors.Errorf("got digest %s, expected %s", actual, expected)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
status.Committed = true
|
||||||
|
status.UpdatedAt = time.Now()
|
||||||
|
pw.tracker.SetStatus(pw.ref, status)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,6 +28,8 @@ import (
|
|||||||
type Status struct {
|
type Status struct {
|
||||||
content.Status
|
content.Status
|
||||||
|
|
||||||
|
Committed bool
|
||||||
|
|
||||||
// UploadUUID is used by the Docker registry to reference blob uploads
|
// UploadUUID is used by the Docker registry to reference blob uploads
|
||||||
UploadUUID string
|
UploadUUID string
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user