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

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) ===

From 2e2414d83eb3af2e555362d9c48a5431739bb0f6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <[email protected]>
Date: Thu, 23 Aug 2018 17:06:51 -0400
Subject: [PATCH 1/2] lxd/containers: Also use apply_quota for CEPH
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #4960

Signed-off-by: Stéphane Graber <[email protected]>
---
 lxd/container_lxc.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lxd/container_lxc.go b/lxd/container_lxc.go
index 0beed0e234..9280c3cec2 100644
--- a/lxd/container_lxc.go
+++ b/lxd/container_lxc.go
@@ -4088,7 +4088,7 @@ func (c *containerLXC) Update(args db.ContainerArgs, 
userRequested bool) error {
        if newRootDiskDeviceSize != oldRootDiskDeviceSize {
                storageTypeName := c.storage.GetStorageTypeName()
                storageIsReady := c.storage.ContainerStorageReady(c.Name())
-               if storageTypeName == "lvm" && isRunning || !storageIsReady {
+               if (storageTypeName == "lvm" || storageTypeName == "ceph") && 
isRunning || !storageIsReady {
                        c.localConfig["volatile.apply_quota"] = 
newRootDiskDeviceSize
                } else {
                        size, err := 
shared.ParseByteSizeString(newRootDiskDeviceSize)

From a2d0e291076c39cba55a40e2318cb6bf614bbec9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <[email protected]>
Date: Thu, 23 Aug 2018 17:22:55 -0400
Subject: [PATCH 2/2] lxd/containers: Simplify and fix pool update logic
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #4960

Signed-off-by: Stéphane Graber <[email protected]>
---
 lxd/container_lxc.go | 69 ++++++++++++--------------------------------
 1 file changed, 18 insertions(+), 51 deletions(-)

diff --git a/lxd/container_lxc.go b/lxd/container_lxc.go
index 9280c3cec2..02deecd97c 100644
--- a/lxd/container_lxc.go
+++ b/lxd/container_lxc.go
@@ -4021,65 +4021,32 @@ func (c *containerLXC) Update(args db.ContainerArgs, 
userRequested bool) error {
                c.idmapset = nil
        }
 
-       // Retrieve old root disk devices.
-       oldLocalRootDiskDeviceKey, oldLocalRootDiskDevice, _ := 
shared.GetRootDiskDevice(oldLocalDevices)
-       var oldProfileRootDiskDevices []string
-       for k, v := range oldExpandedDevices {
-               if shared.IsRootDiskDevice(v) && k != oldLocalRootDiskDeviceKey 
&& !shared.StringInSlice(k, oldProfileRootDiskDevices) {
-                       oldProfileRootDiskDevices = 
append(oldProfileRootDiskDevices, k)
-               }
-       }
-
-       // Retrieve new root disk devices.
-       newLocalRootDiskDeviceKey, newLocalRootDiskDevice, _ := 
shared.GetRootDiskDevice(c.localDevices)
-       var newProfileRootDiskDevices []string
+       // Make sure we have a valid root disk device (and only one)
+       newRootDiskDeviceKey := ""
        for k, v := range c.expandedDevices {
-               if shared.IsRootDiskDevice(v) && k != newLocalRootDiskDeviceKey 
&& !shared.StringInSlice(k, newProfileRootDiskDevices) {
-                       newProfileRootDiskDevices = 
append(newProfileRootDiskDevices, k)
+               if v["type"] == "disk" && v["path"] == "/" && v["pool"] != "" {
+                       if newRootDiskDeviceKey != "" {
+                               return fmt.Errorf("Containers may only have one 
root disk device")
+                       }
+
+                       newRootDiskDeviceKey = k
                }
        }
 
-       // Verify root disk devices. (Be specific with error messages.)
-       var oldRootDiskDeviceKey string
-       var newRootDiskDeviceKey string
-       if oldLocalRootDiskDevice["pool"] != "" {
-               oldRootDiskDeviceKey = oldLocalRootDiskDeviceKey
-               newRootDiskDeviceKey = newLocalRootDiskDeviceKey
-
-               if newLocalRootDiskDevice["pool"] == "" {
-                       if len(newProfileRootDiskDevices) == 0 {
-                               return fmt.Errorf("Update will cause the 
container to rely on a profile's root disk device but none was found")
-                       } else if len(newProfileRootDiskDevices) > 1 {
-                               return fmt.Errorf("Update will cause the 
container to rely on a profile's root disk device but conflicting devices were 
found")
-                       } else if 
c.expandedDevices[newProfileRootDiskDevices[0]]["pool"] != 
oldLocalRootDiskDevice["pool"] {
-                               newRootDiskDeviceKey = 
newProfileRootDiskDevices[0]
-                               return fmt.Errorf("Using the profile's root 
disk device would change the storage pool of the container")
-                       }
-               }
-       } else {
-               // This branch should allow us to cover cases where a container
-               // didn't have root disk device before for whatever reason. As
-               // long as there is a root disk device in one of the local or
-               // profile devices we're good.
-               if newLocalRootDiskDevice["pool"] != "" {
-                       newRootDiskDeviceKey = newLocalRootDiskDeviceKey
+       if newRootDiskDeviceKey == "" {
+               return fmt.Errorf("Containers must have a root disk device 
(directly or inherited)")
+       }
 
-                       if len(oldProfileRootDiskDevices) > 0 {
-                               oldRootDiskDeviceKey = 
oldProfileRootDiskDevices[0]
-                               if 
oldExpandedDevices[oldRootDiskDeviceKey]["pool"] != 
newLocalRootDiskDevice["pool"] {
-                                       return fmt.Errorf("The new local root 
disk device would change the storage pool of the container")
-                               }
-                       }
-               } else {
-                       if len(newProfileRootDiskDevices) == 0 {
-                               return fmt.Errorf("Update will cause the 
container to rely on a profile's root disk device but none was found")
-                       } else if len(newProfileRootDiskDevices) > 1 {
-                               return fmt.Errorf("Using the profile's root 
disk device would change the storage pool of the container")
-                       }
-                       newRootDiskDeviceKey = newProfileRootDiskDevices[0]
+       // Retrieve the old root disk device
+       oldRootDiskDeviceKey := ""
+       for k, v := range c.expandedDevices {
+               if v["type"] == "disk" && v["path"] == "/" && v["pool"] != "" {
+                       oldRootDiskDeviceKey = k
+                       break
                }
        }
 
+       // Deal with quota changes
        oldRootDiskDeviceSize := 
oldExpandedDevices[oldRootDiskDeviceKey]["size"]
        newRootDiskDeviceSize := c.expandedDevices[newRootDiskDeviceKey]["size"]
 
_______________________________________________
lxc-devel mailing list
[email protected]
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to