From ac5d363e67e01c769b4d9e20ed76a278434ee4de Mon Sep 17 00:00:00 2001 From: Derek McGowan Date: Tue, 19 Jun 2018 15:56:41 -0700 Subject: [PATCH] Update overlay2 to use naive diff for changes The archive changes function is not implemented correctly to handle opaque directories. Signed-off-by: Derek McGowan --- daemon/graphdriver/overlay2/overlay.go | 13 +--------- daemon/graphdriver/overlay2/overlay_test.go | 2 +- pkg/archive/changes_linux.go | 27 --------------------- 3 files changed, 2 insertions(+), 40 deletions(-) diff --git a/daemon/graphdriver/overlay2/overlay.go b/daemon/graphdriver/overlay2/overlay.go index 5108a2c055..49b055cc03 100644 --- a/daemon/graphdriver/overlay2/overlay.go +++ b/daemon/graphdriver/overlay2/overlay.go @@ -754,16 +754,5 @@ func (d *Driver) Diff(id, parent string) (io.ReadCloser, error) { // Changes produces a list of changes between the specified layer and its // parent layer. If parent is "", then all changes will be ADD changes. func (d *Driver) Changes(id, parent string) ([]archive.Change, error) { - if useNaiveDiff(d.home) || !d.isParent(id, parent) { - return d.naiveDiff.Changes(id, parent) - } - // Overlay doesn't have snapshots, so we need to get changes from all parent - // layers. - diffPath := d.getDiffPath(id) - layers, err := d.getLowerDirs(id) - if err != nil { - return nil, err - } - - return archive.OverlayChanges(layers, diffPath) + return d.naiveDiff.Changes(id, parent) } diff --git a/daemon/graphdriver/overlay2/overlay_test.go b/daemon/graphdriver/overlay2/overlay_test.go index 4a07137ed8..6befa7db57 100644 --- a/daemon/graphdriver/overlay2/overlay_test.go +++ b/daemon/graphdriver/overlay2/overlay_test.go @@ -62,7 +62,7 @@ func TestOverlayDiffApply10Files(t *testing.T) { } func TestOverlayChanges(t *testing.T) { - skipIfNaive(t) + t.Skipf("Cannot run test with naive change algorithm") graphtest.DriverTestChanges(t, driverName) } diff --git a/pkg/archive/changes_linux.go b/pkg/archive/changes_linux.go index 78a5393c8e..f8792b3d4e 100644 --- a/pkg/archive/changes_linux.go +++ b/pkg/archive/changes_linux.go @@ -284,30 +284,3 @@ func clen(n []byte) int { } return len(n) } - -// OverlayChanges walks the path rw and determines changes for the files in the path, -// with respect to the parent layers -func OverlayChanges(layers []string, rw string) ([]Change, error) { - return changes(layers, rw, overlayDeletedFile, nil) -} - -func overlayDeletedFile(root, path string, fi os.FileInfo) (string, error) { - if fi.Mode()&os.ModeCharDevice != 0 { - s := fi.Sys().(*syscall.Stat_t) - if unix.Major(uint64(s.Rdev)) == 0 && unix.Minor(uint64(s.Rdev)) == 0 { // nolint: unconvert - return path, nil - } - } - if fi.Mode()&os.ModeDir != 0 { - opaque, err := system.Lgetxattr(filepath.Join(root, path), "trusted.overlay.opaque") - if err != nil { - return "", err - } - if len(opaque) == 1 && opaque[0] == 'y' { - return path, nil - } - } - - return "", nil - -}