create: do not calculate image size

calculating the image size can be an expensive operation.  Avoid doing
it when creating a new container since the size is not needed.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This commit is contained in:
Giuseppe Scrivano
2020-03-12 09:50:55 +01:00
parent 60e9e7ca9c
commit 8741eb8a92
3 changed files with 27 additions and 10 deletions

View File

@ -101,7 +101,7 @@ func CreateContainer(ctx context.Context, c *GenericCLIResults, runtime *libpod.
if err != nil {
return nil, nil, err
}
imageData, err = newImage.Inspect(ctx)
imageData, err = newImage.InspectNoSize(ctx)
if err != nil {
return nil, nil, err
}

View File

@ -916,12 +916,7 @@ func (i *Image) imageInspectInfo(ctx context.Context) (*types.ImageInspectInfo,
return i.inspectInfo, nil
}
// Inspect returns an image's inspect data
func (i *Image) Inspect(ctx context.Context) (*inspect.ImageData, error) {
span, _ := opentracing.StartSpanFromContext(ctx, "imageInspect")
span.SetTag("type", "image")
defer span.Finish()
func (i *Image) inspect(ctx context.Context, calculateSize bool) (*inspect.ImageData, error) {
ociv1Img, err := i.ociv1Image(ctx)
if err != nil {
ociv1Img = &ociv1.Image{}
@ -936,8 +931,10 @@ func (i *Image) Inspect(ctx context.Context) (*inspect.ImageData, error) {
}
size := int64(-1)
if usize, err := i.Size(ctx); err == nil {
size = int64(*usize)
if calculateSize {
if usize, err := i.Size(ctx); err == nil {
size = int64(*usize)
}
}
repoTags, err := i.RepoTags()
@ -1002,6 +999,26 @@ func (i *Image) Inspect(ctx context.Context) (*inspect.ImageData, error) {
return data, nil
}
// Inspect returns an image's inspect data
func (i *Image) Inspect(ctx context.Context) (*inspect.ImageData, error) {
span, _ := opentracing.StartSpanFromContext(ctx, "imageInspect")
span.SetTag("type", "image")
defer span.Finish()
return i.inspect(ctx, true)
}
// InspectNoSize returns an image's inspect data without calculating the size for the image
func (i *Image) InspectNoSize(ctx context.Context) (*inspect.ImageData, error) {
span, _ := opentracing.StartSpanFromContext(ctx, "imageInspectNoSize")
span.SetTag("type", "image")
defer span.Finish()
return i.inspect(ctx, false)
}
// Import imports and image into the store and returns an image
func (ir *Runtime) Import(ctx context.Context, path, reference string, writer io.Writer, signingOptions SigningOptions, imageConfig ociv1.Image) (*Image, error) {
src, err := tarball.Transport.ParseReference(path)

View File

@ -147,7 +147,7 @@ func (r *Runtime) createInfraContainer(ctx context.Context, p *Pod) (*Container,
return nil, err
}
data, err := newImage.Inspect(ctx)
data, err := newImage.InspectNoSize(ctx)
if err != nil {
return nil, err
}