[lxc-devel] [lxd/master] Assorted bugfixes

stgraber on Github lxc-bot at linuxcontainers.org
Fri Aug 21 20:55:57 UTC 2020


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 301 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20200821/39102119/attachment.bin>
-------------- next part --------------
From 64609830dd75ae776e0e01603692ed27591c19d1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Fri, 21 Aug 2020 14:30:23 -0400
Subject: [PATCH 1/4] lxc/export: Use HostPathFollow
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This should better handle paths with intermediate symlinks.

Closes #7792

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 lxc/export.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lxc/export.go b/lxc/export.go
index 0eddf0d4ed..33d71f7d84 100644
--- a/lxc/export.go
+++ b/lxc/export.go
@@ -125,7 +125,7 @@ func (c *cmdExport) Run(cmd *cobra.Command, args []string) error {
 		targetName = "backup.tar.gz"
 	}
 
-	target, err := os.Create(shared.HostPath(targetName))
+	target, err := os.Create(shared.HostPathFollow(targetName))
 	if err != nil {
 		return err
 	}

From 04a913a0f89692f501d944525bb7157a9f9485e9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Fri, 21 Aug 2020 14:49:12 -0400
Subject: [PATCH 2/4] lxd/cluster: Re-try listening for a minute
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #7782

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 lxd/endpoints/endpoints.go | 31 ++++++++++++++++++++++++++-----
 1 file changed, 26 insertions(+), 5 deletions(-)

diff --git a/lxd/endpoints/endpoints.go b/lxd/endpoints/endpoints.go
index feba2c178d..717649e0e6 100644
--- a/lxd/endpoints/endpoints.go
+++ b/lxd/endpoints/endpoints.go
@@ -5,6 +5,7 @@ import (
 	"net"
 	"net/http"
 	"sync"
+	"time"
 
 	"github.com/lxc/lxd/lxd/util"
 	"github.com/lxc/lxd/shared"
@@ -194,23 +195,43 @@ func (e *Endpoints) up(config *Config) error {
 			e.inherited[network] = false
 		}
 
-		// Errors here are not fatal and are just logged (unless we're
-		// clustered, see below).
+		// Errors here are not fatal and are just logged (unless we're clustered, see below).
 		var networkAddressErr error
+		attempts := 0
+	againHttps:
 		e.listeners[network], networkAddressErr = networkCreateListener(config.NetworkAddress, e.cert)
 
 		isCovered := util.IsAddressCovered(config.ClusterAddress, config.NetworkAddress)
 		if config.ClusterAddress != "" {
 			if isCovered {
-				// In case of clustering we fail if we coun't
-				// bind the network address.
+				// In case of clustering we fail if we can't bind the network address.
 				if networkAddressErr != nil {
+					if attempts == 0 {
+						logger.Infof("Unable to bind https address %q, re-trying for a minute", config.NetworkAddress)
+					}
+
+					attempts++
+					if attempts < 60 {
+						time.Sleep(1 * time.Second)
+						goto againHttps
+					}
+
 					return networkAddressErr
 				}
-
 			} else {
+			againCluster:
 				e.listeners[cluster], err = networkCreateListener(config.ClusterAddress, e.cert)
 				if err != nil {
+					if attempts == 0 {
+						logger.Infof("Unable to bind cluster address %q, re-trying for a minute", config.ClusterAddress)
+					}
+
+					attempts++
+					if attempts < 60 {
+						time.Sleep(1 * time.Second)
+						goto againCluster
+					}
+
 					return err
 				}
 			}

From 6f3bd86122b84ef64b5cc2c4c6662a8afe942aee Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Fri, 21 Aug 2020 15:03:08 -0400
Subject: [PATCH 3/4] lxd/init: Don't fail on existing address
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 lxd/main_init_interactive.go | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/lxd/main_init_interactive.go b/lxd/main_init_interactive.go
index 493a3b62d9..ad3b42133f 100644
--- a/lxd/main_init_interactive.go
+++ b/lxd/main_init_interactive.go
@@ -119,14 +119,25 @@ func (c *cmdInit) askClustering(config *cmdInitData, d lxd.InstanceServer) error
 		address := util.NetworkInterfaceAddress()
 		validateServerAddress := func(value string) error {
 			address := util.CanonicalNetworkAddress(value)
+
 			host, _, _ := net.SplitHostPort(address)
 			if shared.StringInSlice(host, []string{"", "[::]", "0.0.0.0"}) {
 				return fmt.Errorf("Invalid IP address or DNS name")
 			}
+
+			s, _, err := d.GetServer()
+			if err == nil {
+				if s.Config["cluster.https_address"] == value || s.Config["core.https_address"] == value {
+					// We already own the address, just move on.
+					return nil
+				}
+			}
+
 			listener, err := net.Listen("tcp", address)
 			if err != nil {
 				return fmt.Errorf("Can't bind address %q: %v", address, err)
 			}
+
 			listener.Close()
 			return nil
 		}
@@ -665,10 +676,20 @@ they otherwise would.
 
 		netPort := cli.AskInt("Port to bind LXD to [default=8443]: ", 1, 65535, "8443", func(netPort int64) error {
 			address := fmt.Sprintf("%s:%d", netAddr, netPort)
+
+			s, _, err := d.GetServer()
+			if err == nil {
+				if s.Config["cluster.https_address"] == address || s.Config["core.https_address"] == address {
+					// We already own the address, just move on.
+					return nil
+				}
+			}
+
 			listener, err := net.Listen("tcp", address)
 			if err != nil {
 				return fmt.Errorf("Can't bind address %q: %v", address, err)
 			}
+
 			listener.Close()
 			return nil
 		})

From 92418b41fbef118bc05db413c2a985f7c5d3974b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Fri, 21 Aug 2020 16:40:15 -0400
Subject: [PATCH 4/4] lxd/storage/zfs: Fix bad transfer logic on block
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #7745

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 lxd/storage/drivers/driver_zfs_volumes.go | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/lxd/storage/drivers/driver_zfs_volumes.go b/lxd/storage/drivers/driver_zfs_volumes.go
index 082ae886d2..3edbc96456 100644
--- a/lxd/storage/drivers/driver_zfs_volumes.go
+++ b/lxd/storage/drivers/driver_zfs_volumes.go
@@ -1264,11 +1264,17 @@ func (d *zfs) MigrateVolume(vol Volume, conn io.ReadWriteCloser, volSrcArgs *mig
 
 		if volSrcArgs.MultiSync {
 			if volSrcArgs.FinalSync {
-				finalParent = volSrcArgs.Data.(string)
+				if volSrcArgs.Data != nil {
+					finalParent = volSrcArgs.Data.(map[ContentType]string)[vol.ContentType()]
+				}
+
 				defer shared.RunCommand("zfs", "destroy", finalParent)
 				defer shared.RunCommand("zfs", "destroy", srcSnapshot)
 			} else {
-				volSrcArgs.Data = srcSnapshot // Persist parent state for final sync.
+				if volSrcArgs.Data == nil {
+					volSrcArgs.Data = map[ContentType]string{}
+				}
+				volSrcArgs.Data.(map[ContentType]string)[vol.ContentType()] = srcSnapshot // Persist parent state for final sync.
 			}
 		} else {
 			defer shared.RunCommand("zfs", "destroy", srcSnapshot)


More information about the lxc-devel mailing list