MCPcopy Create free account
hub / github.com/containers/common / diskUsageForImage

Function diskUsageForImage

libimage/disk_usage.go:54–130  ·  view source on GitHub ↗

diskUsageForImage returns the disk-usage baseistics for the specified image.

(ctx context.Context, image *Image, tree *layerTree)

Source from the content-addressed store, hash-verified

52
53// diskUsageForImage returns the disk-usage baseistics for the specified image.
54func diskUsageForImage(ctx context.Context, image *Image, tree *layerTree) ([]ImageDiskUsage, error) {
55 if err := image.isCorrupted(""); err != nil {
56 return nil, err
57 }
58
59 base := ImageDiskUsage{
60 ID: image.ID(),
61 Created: image.Created(),
62 Repository: "<none>",
63 Tag: "<none>",
64 }
65
66 // Shared, unique and total size.
67 parent, err := tree.parent(ctx, image)
68 if err != nil {
69 return nil, err
70 }
71 childIDs, err := tree.children(ctx, image, false)
72 if err != nil {
73 return nil, err
74 }
75
76 // Optimistically set unique size to the full size of the image.
77 size, err := image.Size()
78 if err != nil {
79 return nil, err
80 }
81 base.UniqueSize = size
82
83 if len(childIDs) > 0 {
84 // If we have children, we share everything.
85 base.SharedSize = base.UniqueSize
86 base.UniqueSize = 0
87 } else if parent != nil {
88 // If we have no children but a parent, remove the parent
89 // (shared) size from the unique one.
90 size, err := parent.Size()
91 if err != nil {
92 return nil, err
93 }
94 base.UniqueSize -= size
95 base.SharedSize = size
96 }
97
98 base.Size = base.SharedSize + base.UniqueSize
99
100 // Number of containers using the image.
101 containers, err := image.Containers()
102 if err != nil {
103 return nil, err
104 }
105 base.Containers = len(containers)
106
107 repoTags, err := image.NamedRepoTags()
108 if err != nil {
109 return nil, err
110 }
111

Callers 1

DiskUsageMethod · 0.85

Calls 9

ToNameTagPairsFunction · 0.85
isCorruptedMethod · 0.80
CreatedMethod · 0.80
parentMethod · 0.80
childrenMethod · 0.80
SizeMethod · 0.80
ContainersMethod · 0.80
NamedRepoTagsMethod · 0.80
IDMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…