[lxc-devel] [lxd/master] Cleanup Info/Version in storage

stgraber on Github lxc-bot at linuxcontainers.org
Thu Nov 7 21:39:03 UTC 2019


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/20191107/a8ac3dc3/attachment-0001.bin>
-------------- next part --------------
From 84742591f0e2e4901d3133f611f74ecf0ea5181a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Thu, 7 Nov 2019 15:58:30 -0500
Subject: [PATCH 1/4] lxd/storage/cephfs: Store version globally
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/storage/drivers/driver_cephfs.go | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/lxd/storage/drivers/driver_cephfs.go b/lxd/storage/drivers/driver_cephfs.go
index cebc07efe9..ec6c10b029 100644
--- a/lxd/storage/drivers/driver_cephfs.go
+++ b/lxd/storage/drivers/driver_cephfs.go
@@ -19,26 +19,26 @@ import (
 	"github.com/lxc/lxd/shared/units"
 )
 
+var cephfsVersion string
+
 type cephfs struct {
 	common
-
-	version string
 }
 
 func (d *cephfs) Info() Info {
 	// Detect and record the version.
-	if d.version == "" {
+	if cephfsVersion == "" {
 		msg, err := shared.RunCommand("rbd", "--version")
 		if err != nil {
-			d.version = "unknown"
+			cephfsVersion = "unknown"
 		} else {
-			d.version = strings.TrimSpace(msg)
+			cephfsVersion = strings.TrimSpace(msg)
 		}
 	}
 
 	return Info{
 		Name:               "cephfs",
-		Version:            d.version,
+		Version:            cephfsVersion,
 		Usable:             true,
 		Remote:             true,
 		OptimizedImages:    false,

From 6f21bb5c4f766d9eb059bc9fd337ae4128af8323 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Thu, 7 Nov 2019 16:22:25 -0500
Subject: [PATCH 2/4] lxd/storage/drivers: Drop Usable field
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/storage/drivers/driver_cephfs.go | 1 -
 lxd/storage/drivers/driver_dir.go    | 1 -
 lxd/storage/drivers/load.go          | 1 -
 3 files changed, 3 deletions(-)

diff --git a/lxd/storage/drivers/driver_cephfs.go b/lxd/storage/drivers/driver_cephfs.go
index ec6c10b029..6c2985bcba 100644
--- a/lxd/storage/drivers/driver_cephfs.go
+++ b/lxd/storage/drivers/driver_cephfs.go
@@ -39,7 +39,6 @@ func (d *cephfs) Info() Info {
 	return Info{
 		Name:               "cephfs",
 		Version:            cephfsVersion,
-		Usable:             true,
 		Remote:             true,
 		OptimizedImages:    false,
 		PreservesInodes:    false,
diff --git a/lxd/storage/drivers/driver_dir.go b/lxd/storage/drivers/driver_dir.go
index d9395933bc..beee02806a 100644
--- a/lxd/storage/drivers/driver_dir.go
+++ b/lxd/storage/drivers/driver_dir.go
@@ -32,7 +32,6 @@ func (d *dir) Info() Info {
 		Version:            "1",
 		OptimizedImages:    false,
 		PreservesInodes:    false,
-		Usable:             true,
 		Remote:             false,
 		VolumeTypes:        []VolumeType{VolumeTypeCustom, VolumeTypeImage, VolumeTypeContainer},
 		BlockBacking:       false,
diff --git a/lxd/storage/drivers/load.go b/lxd/storage/drivers/load.go
index 5d42eeb5eb..8191664658 100644
--- a/lxd/storage/drivers/load.go
+++ b/lxd/storage/drivers/load.go
@@ -28,7 +28,6 @@ func Load(state *state.State, driverName string, name string, config map[string]
 type Info struct {
 	Name               string
 	Version            string
-	Usable             bool
 	Remote             bool
 	OptimizedImages    bool
 	PreservesInodes    bool

From de19b81a3a53379e5d2bcb4a255c1bbd2e8506cc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Thu, 7 Nov 2019 16:26:16 -0500
Subject: [PATCH 3/4] lxd/storage/drivers: Implement load function
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/storage/drivers/driver_common.go | 8 +++++++-
 lxd/storage/drivers/interface.go     | 3 ++-
 lxd/storage/drivers/load.go          | 5 ++++-
 3 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/lxd/storage/drivers/driver_common.go b/lxd/storage/drivers/driver_common.go
index 6712aec86e..c83225cefb 100644
--- a/lxd/storage/drivers/driver_common.go
+++ b/lxd/storage/drivers/driver_common.go
@@ -18,13 +18,19 @@ type common struct {
 	logger         logger.Logger
 }
 
-func (d *common) init(state *state.State, name string, config map[string]string, logger logger.Logger, volIDFunc func(volType VolumeType, volName string) (int64, error), commonRulesFunc func() map[string]func(string) error) {
+func (d *common) init(state *state.State, name string, config map[string]string, logger logger.Logger, volIDFunc func(volType VolumeType, volName string) (int64, error), commonRulesFunc func() map[string]func(string) error) error {
 	d.name = name
 	d.config = config
 	d.getVolID = volIDFunc
 	d.getCommonRules = commonRulesFunc
 	d.state = state
 	d.logger = logger
+
+	return d.load()
+}
+
+func (d *common) load() error {
+	return nil
 }
 
 // validateVolume validates a volume config against common rules and optional driver specific rules.
diff --git a/lxd/storage/drivers/interface.go b/lxd/storage/drivers/interface.go
index ed5a066a74..b0903f5ab5 100644
--- a/lxd/storage/drivers/interface.go
+++ b/lxd/storage/drivers/interface.go
@@ -14,7 +14,8 @@ import (
 type driver interface {
 	Driver
 
-	init(state *state.State, name string, config map[string]string, logger logger.Logger, volIDFunc func(volType VolumeType, volName string) (int64, error), commonRulesFunc func() map[string]func(string) error)
+	init(state *state.State, name string, config map[string]string, logger logger.Logger, volIDFunc func(volType VolumeType, volName string) (int64, error), commonRulesFunc func() map[string]func(string) error) error
+	load() error
 }
 
 // Driver represents a low-level storage driver.
diff --git a/lxd/storage/drivers/load.go b/lxd/storage/drivers/load.go
index 8191664658..bced6925e7 100644
--- a/lxd/storage/drivers/load.go
+++ b/lxd/storage/drivers/load.go
@@ -19,7 +19,10 @@ func Load(state *state.State, driverName string, name string, config map[string]
 	}
 
 	d := driverFunc()
-	d.init(state, name, config, logger, volIDFunc, commonRulesFunc)
+	err := d.init(state, name, config, logger, volIDFunc, commonRulesFunc)
+	if err != nil {
+		return nil, err
+	}
 
 	return d, nil
 }

From ba43166f03c7bcd74a5340397b88e387977b5279 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Thu, 7 Nov 2019 16:29:27 -0500
Subject: [PATCH 4/4] lxd/storage/cephfs: Implement load
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/storage/drivers/driver_cephfs.go | 27 +++++++++++++++++++++++----
 1 file changed, 23 insertions(+), 4 deletions(-)

diff --git a/lxd/storage/drivers/driver_cephfs.go b/lxd/storage/drivers/driver_cephfs.go
index 6c2985bcba..dfbbf98e1c 100644
--- a/lxd/storage/drivers/driver_cephfs.go
+++ b/lxd/storage/drivers/driver_cephfs.go
@@ -6,6 +6,7 @@ import (
 	"io"
 	"io/ioutil"
 	"os"
+	"os/exec"
 	"path/filepath"
 	"strconv"
 	"strings"
@@ -20,22 +21,40 @@ import (
 )
 
 var cephfsVersion string
+var cephfsLoaded bool
 
 type cephfs struct {
 	common
 }
 
-func (d *cephfs) Info() Info {
+func (d *cephfs) load() error {
+	if cephfsLoaded {
+		return nil
+	}
+
+	// Validate the required binaries.
+	for _, tool := range []string{"ceph", "rdb"} {
+		_, err := exec.LookPath(tool)
+		if err != nil {
+			return fmt.Errorf("Required tool '%s' is missing", tool)
+		}
+	}
+
 	// Detect and record the version.
 	if cephfsVersion == "" {
-		msg, err := shared.RunCommand("rbd", "--version")
+		out, err := shared.RunCommand("rbd", "--version")
 		if err != nil {
-			cephfsVersion = "unknown"
+			return err
 		} else {
-			cephfsVersion = strings.TrimSpace(msg)
+			cephfsVersion = strings.TrimSpace(out)
 		}
 	}
 
+	cephfsLoaded = true
+	return nil
+}
+
+func (d *cephfs) Info() Info {
 	return Info{
 		Name:               "cephfs",
 		Version:            cephfsVersion,


More information about the lxc-devel mailing list