[lxc-devel] [lxd/master] zfs: improve dummy dataset creation

brauner on Github lxc-bot at linuxcontainers.org
Mon Jun 12 17:01:37 UTC 2017


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 506 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20170612/6ddd885d/attachment.bin>
-------------- next part --------------
From 24f8f10835ac45a10878383d78dfd49b7256af6e Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brauner at ubuntu.com>
Date: Mon, 12 Jun 2017 19:00:21 +0200
Subject: [PATCH] zfs: improve dummy dataset creation

Instead of creating the dataset and then setting its mountpoint let's create
the dataset with the mountpoint right away.

Closes #3399.

Signed-off-by: Christian Brauner <christian.brauner at ubuntu.com>
---
 lxd/storage_zfs.go | 48 ++++++++++++++++++++----------------------------
 1 file changed, 20 insertions(+), 28 deletions(-)

diff --git a/lxd/storage_zfs.go b/lxd/storage_zfs.go
index dea7044f5..a64e14dc0 100644
--- a/lxd/storage_zfs.go
+++ b/lxd/storage_zfs.go
@@ -1842,75 +1842,67 @@ func (s *storageZfs) zfsPoolCreate() error {
 
 	// Create default dummy datasets to avoid zfs races during container
 	// creation.
-	err := s.zfsPoolVolumeCreate("containers")
-	if err != nil {
-		return err
-	}
-
-	err = s.zfsPoolVolumeSet("containers", "mountpoint", "none")
+	fixperms := shared.VarPath("storage-pools", s.pool.Name, "containers")
+	msg, err := zfsPoolVolumeCreate("containers", fmt.Sprintf("mountpoint=%s", fixperms))
 	if err != nil {
+		logger.Errorf("failed to create containers dataset: %s", msg);
 		return err
 	}
 
-	fixperms := shared.VarPath("storage-pools", s.pool.Name, "containers")
 	err = os.Chmod(fixperms, containersDirMode)
 	if err != nil {
 		logger.Warnf("failed to chmod \"%s\" to \"0%s\": %s", fixperms, strconv.FormatInt(int64(containersDirMode), 8), err)
 	}
 
-	err = s.zfsPoolVolumeCreate("images")
+	msg, err = zfsPoolVolumeCreate("images", "mountpoint=none")
 	if err != nil {
+		logger.Errorf("failed to create images dataset: %s", msg);
 		return err
 	}
 
-	err = s.zfsPoolVolumeSet("images", "mountpoint", "none")
-	if err != nil {
+	fixperms = shared.VarPath("storage-pools", s.pool.Name, "images")
+	err = os.MkdirAll(fixperms, imagesDirMode)
+	if err != nil && !os.IsNotExist(err) {
 		return err
 	}
-
-	fixperms = shared.VarPath("storage-pools", s.pool.Name, "images")
 	err = os.Chmod(fixperms, imagesDirMode)
 	if err != nil {
 		logger.Warnf("failed to chmod \"%s\" to \"0%s\": %s", fixperms, strconv.FormatInt(int64(imagesDirMode), 8), err)
 	}
 
-	err = s.zfsPoolVolumeCreate("custom")
+	msg, err = zfsPoolVolumeCreate("custom", "mountpoint=none")
 	if err != nil {
+		logger.Errorf("failed to create custom dataset: %s", msg);
 		return err
 	}
 
-	err = s.zfsPoolVolumeSet("custom", "mountpoint", "none")
-	if err != nil {
+	fixperms = shared.VarPath("storage-pools", s.pool.Name, "custom")
+	err = os.MkdirAll(fixperms, imagesDirMode)
+	if err != nil && !os.IsNotExist(err) {
 		return err
 	}
-
-	fixperms = shared.VarPath("storage-pools", s.pool.Name, "custom")
 	err = os.Chmod(fixperms, customDirMode)
 	if err != nil {
 		logger.Warnf("failed to chmod \"%s\" to \"0%s\": %s", fixperms, strconv.FormatInt(int64(customDirMode), 8), err)
 	}
 
-	err = s.zfsPoolVolumeCreate("deleted")
+	msg, err = zfsPoolVolumeCreate("deleted", "mountpoint=none")
 	if err != nil {
+		logger.Errorf("failed to create deleted dataset: %s", msg);
 		return err
 	}
 
-	err = s.zfsPoolVolumeSet("deleted", "mountpoint", "none")
+	msg, err = zfsPoolVolumeCreate("snapshots", "mountpoint=none")
 	if err != nil {
+		logger.Errorf("failed to create snapshots dataset: %s", msg);
 		return err
 	}
 
-	err = s.zfsPoolVolumeCreate("snapshots")
-	if err != nil {
-		return err
-	}
-
-	err = s.zfsPoolVolumeSet("snapshots", "mountpoint", "none")
-	if err != nil {
+	fixperms = shared.VarPath("storage-pools", s.pool.Name, "snapshots")
+	err = os.MkdirAll(fixperms, imagesDirMode)
+	if err != nil && !os.IsNotExist(err) {
 		return err
 	}
-
-	fixperms = shared.VarPath("storage-pools", s.pool.Name, "snapshots")
 	err = os.Chmod(fixperms, snapshotsDirMode)
 	if err != nil {
 		logger.Warnf("failed to chmod \"%s\" to \"0%s\": %s", fixperms, strconv.FormatInt(int64(snapshotsDirMode), 8), err)


More information about the lxc-devel mailing list