mirror of
https://github.com/containers/podman.git
synced 2025-06-21 17:38:12 +08:00
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:
@ -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
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
}
|
||||
|
Reference in New Issue
Block a user