-
Notifications
You must be signed in to change notification settings - Fork 3.8k
Closed
Labels
Description
Description
Since containerd 1.5 (#5379 looks to be the regression point) push code checks if Pusher implements Ingester
containerd/remotes/handlers.go
Lines 172 to 173 in 5b09dc5
| if cs, ok := pusher.(content.Ingester); ok { | |
| cw, err = content.OpenWriter(ctx, cs, content.WithRef(MakeRefKey(ctx, desc)), content.WithDescriptor(desc)) |
OpenWriter will block indefinitely with pusher returning unavailable containerd/remotes/docker/pusher.go
Lines 81 to 86 in 5b09dc5
| if unavailableOnFail { | |
| // Another push of this ref is happening elsewhere. The rest of function | |
| // will continue only when `errdefs.IsNotFound(err) == true` (i.e. there | |
| // is no actively-tracked ref already). | |
| return nil, errors.Wrap(errdefs.ErrUnavailable, "push is on-going") | |
| } |
Steps to reproduce the issue
- Push one time
- Get error
- Push again
As I think ctr always fails the whole command and destroys resolver after push error it probably doesn't reproduce there.
Describe the results you received and expected
No deadlock would be nice
What version of containerd are you using?
1.5
Any other relevant information
This seems to be the cause for docker/buildx#834
Show configuration if it is related to CRI plugin.
No response
Reactions are currently unavailable