Merge pull request #45347 from thaJeztah/align_size_virtualsize
c8d: align "Size" and "VirtualSize" for images
This commit is contained in:
commit
7103efac9d
2 changed files with 17 additions and 10 deletions
|
@ -203,11 +203,15 @@ func (i *ImageService) singlePlatformImage(ctx context.Context, contentStore con
|
|||
sizeCache[d] = usage.Size
|
||||
return usage.Size, nil
|
||||
}
|
||||
virtualSize, err := computeVirtualSize(chainIDs, snapshotSizeFn)
|
||||
snapshotSize, err := computeSnapshotSize(chainIDs, snapshotSizeFn)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
// totalSize is the size of the image's packed layers and snapshots
|
||||
// (unpacked layers) combined.
|
||||
totalSize := size + snapshotSize
|
||||
|
||||
var repoTags, repoDigests []string
|
||||
rawImg := image.Metadata()
|
||||
target := rawImg.Target.Digest
|
||||
|
@ -245,8 +249,8 @@ func (i *ImageService) singlePlatformImage(ctx context.Context, contentStore con
|
|||
Created: rawImg.CreatedAt.Unix(),
|
||||
RepoDigests: repoDigests,
|
||||
RepoTags: repoTags,
|
||||
Size: size,
|
||||
VirtualSize: virtualSize,
|
||||
Size: totalSize,
|
||||
VirtualSize: totalSize,
|
||||
// -1 indicates that the value has not been set (avoids ambiguity
|
||||
// between 0 (default) and "not set". We cannot use a pointer (nil)
|
||||
// for this, as the JSON representation uses "omitempty", which would
|
||||
|
@ -476,16 +480,18 @@ func setupLabelFilter(store content.Store, fltrs filters.Args) (func(image image
|
|||
}, nil
|
||||
}
|
||||
|
||||
func computeVirtualSize(chainIDs []digest.Digest, sizeFn func(d digest.Digest) (int64, error)) (int64, error) {
|
||||
var virtualSize int64
|
||||
// computeSnapshotSize calculates the total size consumed by the snapshots
|
||||
// for the given chainIDs.
|
||||
func computeSnapshotSize(chainIDs []digest.Digest, sizeFn func(d digest.Digest) (int64, error)) (int64, error) {
|
||||
var totalSize int64
|
||||
for _, chainID := range chainIDs {
|
||||
size, err := sizeFn(chainID)
|
||||
if err != nil {
|
||||
return virtualSize, err
|
||||
return totalSize, err
|
||||
}
|
||||
virtualSize += size
|
||||
totalSize += size
|
||||
}
|
||||
return virtualSize, nil
|
||||
return totalSize, nil
|
||||
}
|
||||
|
||||
func computeSharedSize(chainIDs []digest.Digest, layers map[digest.Digest]int, sizeFn func(d digest.Digest) (int64, error)) (int64, error) {
|
||||
|
|
|
@ -195,10 +195,11 @@ func (i *ImageService) GetContainerLayerSize(ctx context.Context, containerID st
|
|||
}
|
||||
|
||||
chainIDs := identity.ChainIDs(img.RootFS.DiffIDs)
|
||||
virtualSize, err := computeVirtualSize(chainIDs, snapshotSizeFn)
|
||||
snapShotSize, err := computeSnapshotSize(chainIDs, snapshotSizeFn)
|
||||
if err != nil {
|
||||
return 0, 0, err
|
||||
}
|
||||
|
||||
return usage.Size, usage.Size + virtualSize, nil
|
||||
// TODO(thaJeztah): include content-store size for the image (similar to "GET /images/json")
|
||||
return usage.Size, usage.Size + snapShotSize, nil
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue