[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