mirror of
https://github.com/GoogleContainerTools/kaniko
synced 2026-10-17 14:41:58 +02:00
fix: Refactor LayersMap to correct old strange code behavior (#2066)
* fix: Correct flatten function in layers - Added a test. - Cache current image, track deletes in `whiteouts` as well as normal adds in `layers`. - Fix ugly delete behavior of `layerHashCache`. Delete it when crerating a new snapshot. - Slight cleanup in `snapshot.go`. - Format ugly `WalkFS` function. * fix: Add symbolic link changes to Hasher and CacheHasher * fix: Better log messages * fix(ci): Integration tests * fix(ci): Add `--no-cache` to docker builds * fix(ci): Pass credentials for error integration test * np: Missing .gitignore in `hack` * np: Capitalize every log message - Correct some linting. * fix: Key function - Merge only last layer onto `currentImage`. * fix: Remove old obsolete `cacheHasher`
This commit is contained in:
+1
-1
@@ -132,7 +132,7 @@ func removeDockerfile(c modifiableContext, filesToRemove ...string) error {
|
||||
for _, fileToRemove := range filesToRemove {
|
||||
if rm, _ := fileutils.Matches(fileToRemove, excludes); rm {
|
||||
if err := c.Remove(fileToRemove); err != nil {
|
||||
logrus.Errorf("failed to remove %s: %v", fileToRemove, err)
|
||||
logrus.Errorf("Failed to remove %s: %v", fileToRemove, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -681,7 +681,7 @@ func (container *Container) InitializeStdio(iop *cio.DirectIO) (cio.IO, error) {
|
||||
if container.StreamConfig.Stdin() == nil && !container.Config.Tty {
|
||||
if iop.Stdin != nil {
|
||||
if err := iop.Stdin.Close(); err != nil {
|
||||
logrus.Warnf("error closing stdin: %+v", err)
|
||||
logrus.Warnf("Error closing stdin: %+v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -1,3 +1,4 @@
|
||||
//go:build !windows
|
||||
// +build !windows
|
||||
|
||||
package container // import "github.com/docker/docker/container"
|
||||
@@ -144,7 +145,7 @@ func (container *Container) CopyImagePathContent(v volume.Volume, destination st
|
||||
|
||||
defer func() {
|
||||
if err := v.Unmount(id); err != nil {
|
||||
logrus.Warnf("error while unmounting volume %s: %v", v.Name(), err)
|
||||
logrus.Warnf("Error while unmounting volume %s: %v", v.Name(), err)
|
||||
}
|
||||
}()
|
||||
if err := label.Relabel(path, container.MountLabel, true); err != nil && !errors.Is(err, syscall.ENOTSUP) {
|
||||
|
||||
+5
-5
@@ -63,8 +63,8 @@ func (c *Config) CopyStreams(ctx context.Context, cfg *AttachConfig) <-chan erro
|
||||
// Connect stdin of container to the attach stdin stream.
|
||||
if cfg.Stdin != nil {
|
||||
group.Go(func() error {
|
||||
logrus.Debug("attach: stdin: begin")
|
||||
defer logrus.Debug("attach: stdin: end")
|
||||
logrus.Debug("Attach: stdin: begin")
|
||||
defer logrus.Debug("Attach: stdin: end")
|
||||
|
||||
defer func() {
|
||||
if cfg.CloseStdin && !cfg.TTY {
|
||||
@@ -98,8 +98,8 @@ func (c *Config) CopyStreams(ctx context.Context, cfg *AttachConfig) <-chan erro
|
||||
}
|
||||
|
||||
attachStream := func(name string, stream io.Writer, streamPipe io.ReadCloser) error {
|
||||
logrus.Debugf("attach: %s: begin", name)
|
||||
defer logrus.Debugf("attach: %s: end", name)
|
||||
logrus.Debugf("Attach: %s: begin", name)
|
||||
defer logrus.Debugf("Attach: %s: end", name)
|
||||
defer func() {
|
||||
// Make sure stdin gets closed
|
||||
if cfg.Stdin != nil {
|
||||
@@ -132,7 +132,7 @@ func (c *Config) CopyStreams(ctx context.Context, cfg *AttachConfig) <-chan erro
|
||||
|
||||
errs := make(chan error, 1)
|
||||
go func() {
|
||||
defer logrus.Debug("attach done")
|
||||
defer logrus.Debug("Attach done")
|
||||
groupErr := make(chan error, 1)
|
||||
go func() {
|
||||
groupErr <- group.Wait()
|
||||
|
||||
+2
-2
@@ -122,7 +122,7 @@ func (c *Config) CopyToPipe(iop *cio.DirectIO) {
|
||||
c.wg.Add(1)
|
||||
go func() {
|
||||
if _, err := pools.Copy(w, r); err != nil {
|
||||
logrus.Errorf("stream copy error: %v", err)
|
||||
logrus.Errorf("Stream copy error: %v", err)
|
||||
}
|
||||
r.Close()
|
||||
c.wg.Done()
|
||||
@@ -141,7 +141,7 @@ func (c *Config) CopyToPipe(iop *cio.DirectIO) {
|
||||
go func() {
|
||||
pools.Copy(iop.Stdin, stdin)
|
||||
if err := iop.Stdin.Close(); err != nil {
|
||||
logrus.Warnf("failed to close stdin: %v", err)
|
||||
logrus.Warnf("Failed to close stdin: %v", err)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
+2
-2
@@ -382,7 +382,7 @@ func (v *memdbView) transform(container *Container) *Snapshot {
|
||||
for port, bindings := range container.NetworkSettings.Ports {
|
||||
p, err := nat.ParsePort(port.Port())
|
||||
if err != nil {
|
||||
logrus.Warnf("invalid port map %+v", err)
|
||||
logrus.Warnf("Invalid port map %+v", err)
|
||||
continue
|
||||
}
|
||||
if len(bindings) == 0 {
|
||||
@@ -395,7 +395,7 @@ func (v *memdbView) transform(container *Container) *Snapshot {
|
||||
for _, binding := range bindings {
|
||||
h, err := nat.ParsePort(binding.HostPort)
|
||||
if err != nil {
|
||||
logrus.Warnf("invalid host port map %+v", err)
|
||||
logrus.Warnf("Invalid host port map %+v", err)
|
||||
continue
|
||||
}
|
||||
snapshot.Ports = append(snapshot.Ports, types.Port{
|
||||
|
||||
+1
-1
@@ -71,7 +71,7 @@ func (c *Config) InitializeStdio(iop *cio.DirectIO) (cio.IO, error) {
|
||||
if c.StreamConfig.Stdin() == nil && !c.Tty && runtime.GOOS == "windows" {
|
||||
if iop.Stdin != nil {
|
||||
if err := iop.Stdin.Close(); err != nil {
|
||||
logrus.Errorf("error closing exec stdin: %+v", err)
|
||||
logrus.Errorf("Error closing exec stdin: %+v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -293,7 +293,7 @@ func IsInitialized(driverHome string) bool {
|
||||
return false
|
||||
}
|
||||
if err != nil {
|
||||
logrus.Warnf("graphdriver.IsInitialized: stat failed: %v", err)
|
||||
logrus.Warnf("Graphdriver.IsInitialized: stat failed: %v", err)
|
||||
}
|
||||
return !isEmptyDir(driverHome)
|
||||
}
|
||||
|
||||
+1
-1
@@ -85,7 +85,7 @@ func (fl *follow) waitRead() error {
|
||||
}
|
||||
return errRetry
|
||||
case err := <-fl.fileWatcher.Errors():
|
||||
logrus.Debugf("logger got error watching file: %v", err)
|
||||
logrus.Debugf("Logger got error watching file: %v", err)
|
||||
// Something happened, let's try and stay alive and create a new watcher
|
||||
if fl.retries <= 5 {
|
||||
fl.fileWatcher.Close()
|
||||
|
||||
+1
-1
@@ -76,7 +76,7 @@ func (s *fs) Walk(f DigestWalkFunc) error {
|
||||
for _, v := range dir {
|
||||
dgst := digest.NewDigestFromHex(string(digest.Canonical), v.Name())
|
||||
if err := dgst.Validate(); err != nil {
|
||||
logrus.Debugf("skipping invalid digest %s: %s", dgst, err)
|
||||
logrus.Debugf("Skipping invalid digest %s: %s", dgst, err)
|
||||
continue
|
||||
}
|
||||
if err := f(dgst); err != nil {
|
||||
|
||||
+5
-5
@@ -69,19 +69,19 @@ func (is *store) restore() error {
|
||||
err := is.fs.Walk(func(dgst digest.Digest) error {
|
||||
img, err := is.Get(IDFromDigest(dgst))
|
||||
if err != nil {
|
||||
logrus.Errorf("invalid image %v, %v", dgst, err)
|
||||
logrus.Errorf("Invalid image %v, %v", dgst, err)
|
||||
return nil
|
||||
}
|
||||
var l layer.Layer
|
||||
if chainID := img.RootFS.ChainID(); chainID != "" {
|
||||
if !system.IsOSSupported(img.OperatingSystem()) {
|
||||
logrus.Errorf("not restoring image with unsupported operating system %v, %v, %s", dgst, chainID, img.OperatingSystem())
|
||||
logrus.Errorf("Not restoring image with unsupported operating system %v, %v, %s", dgst, chainID, img.OperatingSystem())
|
||||
return nil
|
||||
}
|
||||
l, err = is.lss[img.OperatingSystem()].Get(chainID)
|
||||
if err != nil {
|
||||
if err == layer.ErrLayerDoesNotExist {
|
||||
logrus.Errorf("layer does not exist, not restoring image %v, %v, %s", dgst, chainID, img.OperatingSystem())
|
||||
logrus.Errorf("Layer does not exist, not restoring image %v, %v, %s", dgst, chainID, img.OperatingSystem())
|
||||
return nil
|
||||
}
|
||||
return err
|
||||
@@ -244,7 +244,7 @@ func (is *store) Delete(id ID) ([]layer.Metadata, error) {
|
||||
}
|
||||
|
||||
if err := is.digestSet.Remove(id.Digest()); err != nil {
|
||||
logrus.Errorf("error removing %s from digest set: %q", id, err)
|
||||
logrus.Errorf("Error removing %s from digest set: %q", id, err)
|
||||
}
|
||||
delete(is.images, id)
|
||||
is.fs.Delete(id.Digest())
|
||||
@@ -330,7 +330,7 @@ func (is *store) imagesMap(all bool) map[ID]*Image {
|
||||
}
|
||||
img, err := is.Get(id)
|
||||
if err != nil {
|
||||
logrus.Errorf("invalid image access: %q, error: %q", id, err)
|
||||
logrus.Errorf("Invalid image access: %q, error: %q", id, err)
|
||||
continue
|
||||
}
|
||||
images[id] = img
|
||||
|
||||
+1
-1
@@ -339,7 +339,7 @@ func (fms *fileMetadataStore) getOrphan() ([]roLayer, error) {
|
||||
}
|
||||
cacheID := strings.TrimSpace(string(contentBytes))
|
||||
if cacheID == "" {
|
||||
logrus.Error("invalid cache ID")
|
||||
logrus.Error("Invalid cache ID")
|
||||
continue
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -764,9 +764,9 @@ func (ls *layerStore) Cleanup() error {
|
||||
if err != nil {
|
||||
logrus.Errorf("Cannot get orphan layers: %v", err)
|
||||
}
|
||||
logrus.Debugf("found %v orphan layers", len(orphanLayers))
|
||||
logrus.Debugf("Found %v orphan layers", len(orphanLayers))
|
||||
for _, orphan := range orphanLayers {
|
||||
logrus.Debugf("removing orphan layer, chain ID: %v , cache ID: %v", orphan.chainID, orphan.cacheID)
|
||||
logrus.Debugf("Removing orphan layer, chain ID: %v , cache ID: %v", orphan.chainID, orphan.cacheID)
|
||||
err = ls.driver.Remove(orphan.cacheID)
|
||||
if err != nil && !os.IsNotExist(err) {
|
||||
logrus.WithError(err).WithField("cache-id", orphan.cacheID).Error("cannot remove orphan layer")
|
||||
|
||||
+1
-1
@@ -165,7 +165,7 @@ func gzDecompress(ctx context.Context, buf io.Reader) (io.ReadCloser, error) {
|
||||
|
||||
unpigzPath, err := exec.LookPath("unpigz")
|
||||
if err != nil {
|
||||
logrus.Debugf("unpigz binary not found, falling back to go gzip library")
|
||||
logrus.Debugf("Unpigz binary not found, falling back to go gzip library")
|
||||
return gzip.NewReader(buf)
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -438,7 +438,7 @@ func ExportChanges(dir string, changes []Change, uidMaps, gidMaps []idtools.IDMa
|
||||
logrus.Debugf("Can't close layer: %s", err)
|
||||
}
|
||||
if err := writer.Close(); err != nil {
|
||||
logrus.Debugf("failed close Changes writer: %s", err)
|
||||
logrus.Debugf("Failed close Changes writer: %s", err)
|
||||
}
|
||||
}()
|
||||
return reader, nil
|
||||
|
||||
+1
-1
@@ -108,7 +108,7 @@ func TarResourceRebase(sourcePath, rebaseName string) (content io.ReadCloser, er
|
||||
sourceDir, sourceBase := SplitPathDirEntry(sourcePath)
|
||||
opts := TarResourceRebaseOpts(sourceBase, rebaseName)
|
||||
|
||||
logrus.Debugf("copying %q from %q", sourceBase, sourceDir)
|
||||
logrus.Debugf("Copying %q from %q", sourceBase, sourceDir)
|
||||
return TarWithOptions(sourceDir, opts)
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -159,7 +159,7 @@ func (w *filePoller) watch(f *os.File, lastFi os.FileInfo, chClose chan struct{}
|
||||
select {
|
||||
case <-timer.C:
|
||||
case <-chClose:
|
||||
logrus.Debugf("watch for %s closed", f.Name())
|
||||
logrus.Debugf("Watch for %s closed", f.Name())
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -1,3 +1,4 @@
|
||||
//go:build linux || freebsd || openbsd
|
||||
// +build linux freebsd openbsd
|
||||
|
||||
// Package kernel provides helper function to get, parse and compare kernel
|
||||
@@ -25,7 +26,7 @@ func GetKernelVersion() (*VersionInfo, error) {
|
||||
// the given version.
|
||||
func CheckKernelVersion(k, major, minor int) bool {
|
||||
if v, err := GetKernelVersion(); err != nil {
|
||||
logrus.Warnf("error getting kernel version: %s", err)
|
||||
logrus.Warnf("Error getting kernel version: %s", err)
|
||||
} else {
|
||||
if CompareKernelVersion(*v, VersionInfo{Kernel: k, Major: major, Minor: minor}) < 0 {
|
||||
return false
|
||||
|
||||
Reference in New Issue
Block a user