Kaynağa Gözat

Merge pull request #46769 from vvoland/c8d-shared-mounter-impl

daemon/snapshotter: Align mounter implementations
Paweł Gronowski 1 yıl önce
ebeveyn
işleme
3cb8e9526e
1 değiştirilmiş dosya ile 27 ekleme ve 32 silme
  1. 27 32
      daemon/snapshotter/mount.go

+ 27 - 32
daemon/snapshotter/mount.go

@@ -12,8 +12,6 @@ import (
 	"github.com/moby/locker"
 )
 
-const mountsDir = "rootfs"
-
 // List of known filesystems that can't be re-mounted or have shared layers
 var refCountedFileSystems = []string{"fuse-overlayfs", "overlayfs", "stargz", "zfs"}
 
@@ -39,33 +37,31 @@ func inSlice(slice []string, s string) bool {
 
 // NewMounter creates a new mounter for the provided snapshotter
 func NewMounter(home string, snapshotter string, idMap idtools.IdentityMapping) Mounter {
+	mnter := mounter{
+		home:        home,
+		snapshotter: snapshotter,
+		idMap:       idMap,
+	}
+
 	if inSlice(refCountedFileSystems, snapshotter) {
 		return &refCountMounter{
-			home:        home,
-			snapshotter: snapshotter,
-			rc:          graphdriver.NewRefCounter(checker()),
-			locker:      locker.New(),
-			idMap:       idMap,
+			base:   mnter,
+			rc:     graphdriver.NewRefCounter(checker()),
+			locker: locker.New(),
 		}
 	}
 
-	return mounter{
-		home:        home,
-		snapshotter: snapshotter,
-		idMap:       idMap,
-	}
+	return &mnter
 }
 
 type refCountMounter struct {
-	home        string
-	snapshotter string
-	rc          *graphdriver.RefCounter
-	locker      *locker.Locker
-	idMap       idtools.IdentityMapping
+	rc     *graphdriver.RefCounter
+	locker *locker.Locker
+	base   mounter
 }
 
 func (m *refCountMounter) Mount(mounts []mount.Mount, containerID string) (target string, retErr error) {
-	target = filepath.Join(m.home, mountsDir, m.snapshotter, containerID)
+	target = m.base.target(containerID)
 
 	_, err := os.Stat(target)
 	if err != nil && !os.IsNotExist(err) {
@@ -92,18 +88,7 @@ func (m *refCountMounter) Mount(mounts []mount.Mount, containerID string) (targe
 		}
 	}()
 
-	root := m.idMap.RootPair()
-	if err := idtools.MkdirAllAndChown(filepath.Dir(target), 0o710, idtools.Identity{
-		UID: idtools.CurrentIdentity().UID,
-		GID: root.GID,
-	}); err != nil {
-		return "", err
-	}
-	if err := idtools.MkdirAllAndChown(target, 0o710, root); err != nil {
-		return "", err
-	}
-
-	return target, mount.All(mounts, target)
+	return m.base.Mount(mounts, containerID)
 }
 
 func (m *refCountMounter) Unmount(target string) error {
@@ -132,10 +117,16 @@ type mounter struct {
 }
 
 func (m mounter) Mount(mounts []mount.Mount, containerID string) (string, error) {
-	target := filepath.Join(m.home, mountsDir, m.snapshotter, containerID)
+	target := m.target(containerID)
 
 	root := m.idMap.RootPair()
-	if err := idtools.MkdirAndChown(target, 0o700, root); err != nil {
+	if err := idtools.MkdirAllAndChown(filepath.Dir(target), 0o710, idtools.Identity{
+		UID: idtools.CurrentIdentity().UID,
+		GID: root.GID,
+	}); err != nil {
+		return "", err
+	}
+	if err := idtools.MkdirAllAndChown(target, 0o710, root); err != nil {
 		return "", err
 	}
 
@@ -145,3 +136,7 @@ func (m mounter) Mount(mounts []mount.Mount, containerID string) (string, error)
 func (m mounter) Unmount(target string) error {
 	return unmount(target)
 }
+
+func (m mounter) target(containerID string) string {
+	return filepath.Join(m.home, "rootfs", m.snapshotter, containerID)
+}