Skip to content

Commit ab85d3d

Browse files
committed
Check connection only when image isn't fully cached
Taken from stargz: https://github.com/containerd/stargz-snapshotter/pull/1584/files Signed-off-by: David Son <[email protected]>
1 parent d0e7844 commit ab85d3d

File tree

2 files changed

+20
-11
lines changed

2 files changed

+20
-11
lines changed

fs/fs.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -641,10 +641,13 @@ func (fs *filesystem) Check(ctx context.Context, mountpoint string, labels map[s
641641
return fmt.Errorf("layer not registered")
642642
}
643643

644-
// Check the blob connectivity and try to refresh the connection on failure
645-
if err := fs.check(ctx, l, labels); err != nil {
646-
log.G(ctx).WithError(err).Warn("check failed")
647-
return err
644+
if l.Info().FetchedSize < l.Info().Size {
645+
// Image contents hasn't fully cached yet.
646+
// Check the blob connectivity and try to refresh the connection on failure
647+
if err := fs.check(ctx, l, labels); err != nil {
648+
log.G(ctx).WithError(err).Warn("check failed")
649+
return err
650+
}
648651
}
649652

650653
return nil

fs/fs_test.go

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -78,13 +78,19 @@ type breakableLayer struct {
7878
success bool
7979
}
8080

81-
func (l *breakableLayer) Info() layer.Info { return layer.Info{} }
82-
func (l *breakableLayer) DisableXAttrs() bool { return false }
83-
func (l *breakableLayer) RootNode(uint32) (fusefs.InodeEmbedder, error) { return nil, nil }
84-
func (l *breakableLayer) Verify(tocDigest digest.Digest) error { return nil }
85-
func (l *breakableLayer) SkipVerify() {}
86-
func (l *breakableLayer) ReadAt([]byte, int64, ...remote.Option) (int, error) { return 0, nil }
87-
func (l *breakableLayer) BackgroundFetch() error { return fmt.Errorf("fail") }
81+
func (l *breakableLayer) Info() layer.Info {
82+
return layer.Info{
83+
Size: 1,
84+
}
85+
}
86+
func (l *breakableLayer) DisableXAttrs() bool { return false }
87+
func (l *breakableLayer) RootNode(uint32) (fusefs.InodeEmbedder, error) { return nil, nil }
88+
func (l *breakableLayer) Verify(tocDigest digest.Digest) error { return nil }
89+
func (l *breakableLayer) SkipVerify() {}
90+
func (l *breakableLayer) ReadAt([]byte, int64, ...remote.Option) (int, error) {
91+
return 0, fmt.Errorf("fail")
92+
}
93+
func (l *breakableLayer) BackgroundFetch() error { return fmt.Errorf("fail") }
8894
func (l *breakableLayer) Check() error {
8995
if !l.success {
9096
return fmt.Errorf("failed")

0 commit comments

Comments
 (0)