Add missing unpacker.Wait for image import

- For remote snapshotters, the unpack phase serves as an important step for
  preparing the remote snapshot. With the missing unpacker.Wait, the
  snapshotter `Prepare` context is always canceled.
- This patch allows remote snapshotter based archives to be imported via
  the transfer service or `ctr image import`

Signed-off-by: Edgar Lee <edgarhinshunlee@gmail.com>
This commit is contained in:
Edgar Lee 2023-08-29 15:34:19 -07:00
parent b0a7f08aa7
commit 779875a057

View File

@ -113,10 +113,20 @@ func (ts *localTransferService) importStream(ctx context.Context, i transfer.Ima
} }
if err := images.WalkNotEmpty(ctx, handler, index); err != nil { if err := images.WalkNotEmpty(ctx, handler, index); err != nil {
if unpacker != nil {
// wait for unpacker to cleanup
unpacker.Wait()
}
// TODO: Handle Not Empty as a special case on the input // TODO: Handle Not Empty as a special case on the input
return err return err
} }
if unpacker != nil {
if _, err = unpacker.Wait(); err != nil {
return err
}
}
for _, desc := range descriptors { for _, desc := range descriptors {
imgs, err := is.Store(ctx, desc, ts.images) imgs, err := is.Store(ctx, desc, ts.images)
if err != nil { if err != nil {