Skip to content

Commit

Permalink
make image parent check more robust
Browse files Browse the repository at this point in the history
Follow up on issue #7444 and make the parent checks more robust.
We can end up with an incoherent storage when, for instance, a
build has been killed.

Backport of commit a6f8586 and commit 238abf6.  Squashed for easier
tracking and referencing.

Fixes: #7444
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1876576

Signed-off-by: Brent Baude <[email protected]>
Signed-off-by: Valentin Rothberg <[email protected]>
  • Loading branch information
baude authored and vrothberg committed Sep 8, 2020
1 parent 5b72534 commit 8f99530
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 1 deletion.
8 changes: 8 additions & 0 deletions libpod/image/image.go
Original file line number Diff line number Diff line change
Expand Up @@ -1242,6 +1242,14 @@ func areParentAndChild(parent, child *imgspecv1.Image) bool {
// the child and candidate parent should share all of the
// candidate parent's diff IDs, which together would have
// controlled which layers were used

// Both, child and parent, may be nil when the storage is left in an
// incoherent state. Issue #7444 describes such a case when a build
// has been killed.
if child == nil || parent == nil {
return false
}

if len(parent.RootFS.DiffIDs) > len(child.RootFS.DiffIDs) {
return false
}
Expand Down
4 changes: 3 additions & 1 deletion libpod/image/layer_tree.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,9 @@ func (t *layerTree) toOCI(ctx context.Context, i *Image) (*ociv1.Image, error) {
oci, exists := t.ociCache[i.ID()]
if !exists {
oci, err = i.ociv1Image(ctx)
t.ociCache[i.ID()] = oci
if err == nil {
t.ociCache[i.ID()] = oci
}
}
return oci, err
}
Expand Down

0 comments on commit 8f99530

Please sign in to comment.