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

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) ===
Applies the skipactivation=y flag to LXD managed LVM volumes.

This brings existing volumes into line with new volume behaviour introduced in https://github.com/lxc/lxd/pull/7303.
From d23c3ada138c2129368c0b70031d184c5aab98e7 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Wed, 20 May 2020 14:26:49 +0100
Subject: [PATCH 1/2] lxd/storage/drivers/driver/common: Logging quoting
 consistency

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxd/storage/drivers/driver_common.go | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lxd/storage/drivers/driver_common.go 
b/lxd/storage/drivers/driver_common.go
index 7f4b9daa4e..7f0c7dbf78 100644
--- a/lxd/storage/drivers/driver_common.go
+++ b/lxd/storage/drivers/driver_common.go
@@ -166,13 +166,13 @@ func (d *common) Config() map[string]string {
 // ApplyPatch looks for a suitable patch and runs it.
 func (d *common) ApplyPatch(name string) error {
        if d.patches == nil {
-               return fmt.Errorf("The patch mechanism isn't implemented on 
pool '%s'", d.name)
+               return fmt.Errorf("The patch mechanism isn't implemented on 
pool %q", d.name)
        }
 
        // Locate the patch.
        patch, ok := d.patches[name]
        if !ok {
-               return fmt.Errorf("Patch '%s' isn't implemented on pool '%s'", 
name, d.name)
+               return fmt.Errorf("Patch %q isn't implemented on pool %q", 
name, d.name)
        }
 
        // Handle cases where a patch isn't needed.

From 8a09d17774103bcaa621274225bf8ff531c03f60 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Wed, 20 May 2020 14:27:13 +0100
Subject: [PATCH 2/2] lxd/storage/drivers: Adds storage_lvm_skipactivation
 patch

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxd/patches.go                            |  1 +
 lxd/storage/drivers/driver_btrfs.go       |  1 +
 lxd/storage/drivers/driver_ceph.go        |  1 +
 lxd/storage/drivers/driver_cephfs.go      |  1 +
 lxd/storage/drivers/driver_dir.go         |  1 +
 lxd/storage/drivers/driver_lvm.go         |  1 +
 lxd/storage/drivers/driver_lvm_patches.go | 50 +++++++++++++++++++++++
 lxd/storage/drivers/driver_zfs.go         |  1 +
 8 files changed, 57 insertions(+)
 create mode 100644 lxd/storage/drivers/driver_lvm_patches.go

diff --git a/lxd/patches.go b/lxd/patches.go
index 165fca549f..d2321d9df0 100644
--- a/lxd/patches.go
+++ b/lxd/patches.go
@@ -97,6 +97,7 @@ var patches = []patch{
        {name: "storage_create_vm_again", stage: patchPostDaemonStorage, run: 
patchGenericStorage},
        {name: "storage_zfs_volmode", stage: patchPostDaemonStorage, run: 
patchGenericStorage},
        {name: "storage_rename_custom_volume_add_project", stage: 
patchPreDaemonStorage, run: patchGenericStorage},
+       {name: "storage_lvm_skipactivation", stage: patchPostDaemonStorage, 
run: patchGenericStorage},
 }
 
 type patch struct {
diff --git a/lxd/storage/drivers/driver_btrfs.go 
b/lxd/storage/drivers/driver_btrfs.go
index 2ec544339f..1247df9f06 100644
--- a/lxd/storage/drivers/driver_btrfs.go
+++ b/lxd/storage/drivers/driver_btrfs.go
@@ -34,6 +34,7 @@ func (d *btrfs) load() error {
                "storage_create_vm_again":                  nil,
                "storage_zfs_volmode":                      nil,
                "storage_rename_custom_volume_add_project": nil,
+               "storage_lvm_skipactivation":               nil,
        }
 
        // Done if previously loaded.
diff --git a/lxd/storage/drivers/driver_ceph.go 
b/lxd/storage/drivers/driver_ceph.go
index 59798e2e5e..0b0e2ac10b 100644
--- a/lxd/storage/drivers/driver_ceph.go
+++ b/lxd/storage/drivers/driver_ceph.go
@@ -33,6 +33,7 @@ func (d *ceph) load() error {
                "storage_create_vm_again":                  nil,
                "storage_zfs_volmode":                      nil,
                "storage_rename_custom_volume_add_project": nil,
+               "storage_lvm_skipactivation":               nil,
        }
 
        // Done if previously loaded.
diff --git a/lxd/storage/drivers/driver_cephfs.go 
b/lxd/storage/drivers/driver_cephfs.go
index 11092f4be0..4fb7788d7b 100644
--- a/lxd/storage/drivers/driver_cephfs.go
+++ b/lxd/storage/drivers/driver_cephfs.go
@@ -32,6 +32,7 @@ func (d *cephfs) load() error {
                "storage_create_vm_again":                  nil,
                "storage_zfs_volmode":                      nil,
                "storage_rename_custom_volume_add_project": nil,
+               "storage_lvm_skipactivation":               nil,
        }
 
        // Done if previously loaded.
diff --git a/lxd/storage/drivers/driver_dir.go 
b/lxd/storage/drivers/driver_dir.go
index e093cc4037..a9ea65e131 100644
--- a/lxd/storage/drivers/driver_dir.go
+++ b/lxd/storage/drivers/driver_dir.go
@@ -25,6 +25,7 @@ func (d *dir) load() error {
                "storage_create_vm_again":                  nil,
                "storage_zfs_volmode":                      nil,
                "storage_rename_custom_volume_add_project": nil,
+               "storage_lvm_skipactivation":               nil,
        }
 
        return nil
diff --git a/lxd/storage/drivers/driver_lvm.go 
b/lxd/storage/drivers/driver_lvm.go
index dbf3c6b5f4..1357ae58b6 100644
--- a/lxd/storage/drivers/driver_lvm.go
+++ b/lxd/storage/drivers/driver_lvm.go
@@ -37,6 +37,7 @@ func (d *lvm) load() error {
                "storage_create_vm_again":                  nil,
                "storage_zfs_volmode":                      nil,
                "storage_rename_custom_volume_add_project": nil,
+               "storage_lvm_skipactivation":               
d.patchStorageSkipActivation,
        }
 
        // Done if previously loaded.
diff --git a/lxd/storage/drivers/driver_lvm_patches.go 
b/lxd/storage/drivers/driver_lvm_patches.go
new file mode 100644
index 0000000000..559a1bd385
--- /dev/null
+++ b/lxd/storage/drivers/driver_lvm_patches.go
@@ -0,0 +1,50 @@
+package drivers
+
+import (
+       "fmt"
+       "strings"
+
+       "github.com/pkg/errors"
+
+       "github.com/lxc/lxd/shared"
+       "github.com/lxc/lxd/shared/logger"
+)
+
+// patchStorageSkipActivation set skipactivation=y on all LXD LVM logical 
volumes (excluding thin pool volumes).
+func (d *lvm) patchStorageSkipActivation() error {
+       out, err := shared.RunCommand("lvs", "--noheadings", "-o", 
"lv_name,lv_attr", d.name)
+       if err != nil {
+               return errors.Wrapf(err, "Error getting LVM logical volume list 
for storage pool %q", d.name)
+       }
+
+       for _, line := range strings.Split(out, "\n") {
+               fields := strings.Fields(strings.TrimSpace(line))
+               if len(fields) != 2 {
+                       continue
+               }
+
+               volName := fields[0]
+               volAttr := fields[1]
+
+               // Ignore non-LXD prefixes, and thinpool volumes (these should 
remain auto activated).
+               if !strings.HasPrefix(volName, "images_") && 
!strings.HasPrefix(volName, "containers_") && !strings.HasPrefix(volName, 
"virtual-machines_") && !strings.HasPrefix(volName, "custom_") {
+                       continue
+               }
+
+               // Skip volumes that already have k flag set, meaning 
setactivationskip=y.
+               if strings.HasSuffix(volAttr, "k") {
+                       logger.Infof("Skipping volume %q that already has 
skipactivation=y set in pool %q", volName, d.name)
+                       continue
+               }
+
+               // Set the --setactivationskip flag enabled on the volume.
+               _, err = shared.RunCommand("lvchange", "--setactivationskip", 
"y", fmt.Sprintf("%s/%s", d.name, volName))
+               if err != nil {
+                       return errors.Wrapf(err, "Error setting 
setactivationskip=y on LVM logical volume %q for storage pool %q", volName, 
d.name)
+               }
+
+               logger.Infof("Set setactivationskip=y on volume %q in pool %q", 
volName, d.name)
+       }
+
+       return nil
+}
diff --git a/lxd/storage/drivers/driver_zfs.go 
b/lxd/storage/drivers/driver_zfs.go
index 4cb9c824d0..d5b87ad9f9 100644
--- a/lxd/storage/drivers/driver_zfs.go
+++ b/lxd/storage/drivers/driver_zfs.go
@@ -45,6 +45,7 @@ func (d *zfs) load() error {
                "storage_create_vm_again":                  nil,
                "storage_zfs_volmode":                      
d.patchStorageZFSVolMode,
                "storage_rename_custom_volume_add_project": nil,
+               "storage_lvm_skipactivation":               nil,
        }
 
        // Done if previously loaded.
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to