The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/3401

This e-mail was sent by the LXC bot, direct replies will not reach the author
unless they happen to be subscribed to this list.

=== Description (from pull-request) ===
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 <[email protected]>
From 24f8f10835ac45a10878383d78dfd49b7256af6e Mon Sep 17 00:00:00 2001
From: Christian Brauner <[email protected]>
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 <[email protected]>
---
 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)
_______________________________________________
lxc-devel mailing list
[email protected]
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to