[lxc-devel] [lxd/master] storage: return correct error
brauner on Github
lxc-bot at linuxcontainers.org
Mon Feb 27 00:25:26 UTC 2017
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 1351 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20170227/a17c821f/attachment.bin>
-------------- next part --------------
From 859ca21a2b6abcf182868796b57d93628e191ade Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brauner at ubuntu.com>
Date: Mon, 27 Feb 2017 01:20:46 +0100
Subject: [PATCH] storage: return correct error
This is more visual cruft but ensures that a non-confusing error is returned.
For example, in a lvm test-run on another branch Jenkins returned:
INFO[02-27|00:03:30] Creating container ephemeral=false name=nonlive
INFO[02-27|00:03:31] Deleting container created=2017-02-27T00:03:30+0000 ephemeral=false name=nonlive used=1970-01-01T00:00:00+0000
INFO[02-27|00:03:31] Deleted container created=2017-02-27T00:03:30+0000 ephemeral=false name=nonlive used=1970-01-01T00:00:00+0000
EROR[02-27|00:03:31] Failed to initialize container storage ephemeral=false name=nonlive
error: Invalid storage type.
As container creation is API internal it is actually not possible that a
non-valid storage driver was passed. So this error stems from a call to
<storage-type>.StoragePoolInit() which was hidden because on any error
return nil, fmt.Errorf("Invalid storage type.")
was returned. Don't do that!
Signed-off-by: Christian Brauner <christian.brauner at ubuntu.com>
---
lxd/storage.go | 50 ++++++++++++++++++++++++++++++--------------------
1 file changed, 30 insertions(+), 20 deletions(-)
diff --git a/lxd/storage.go b/lxd/storage.go
index e11328f..c85b5b6 100644
--- a/lxd/storage.go
+++ b/lxd/storage.go
@@ -285,33 +285,38 @@ func storageCoreInit(driver string) (storage, error) {
case storageTypeBtrfs:
btrfs := storageBtrfs{}
err = btrfs.StorageCoreInit()
- if err == nil {
- return &btrfs, nil
+ if err != nil {
+ return nil, err
}
+ return &btrfs, nil
case storageTypeDir:
dir := storageDir{}
err = dir.StorageCoreInit()
- if err == nil {
- return &dir, nil
+ if err != nil {
+ return nil, err
}
+ return &dir, nil
case storageTypeLvm:
lvm := storageLvm{}
err = lvm.StorageCoreInit()
- if err == nil {
- return &lvm, nil
+ if err != nil {
+ return nil, err
}
+ return &lvm, nil
case storageTypeMock:
mock := storageMock{}
err = mock.StorageCoreInit()
- if err == nil {
- return &mock, nil
+ if err != nil {
+ return nil, err
}
+ return &mock, nil
case storageTypeZfs:
zfs := storageZfs{}
err = zfs.StorageCoreInit()
- if err == nil {
- return &zfs, nil
+ if err != nil {
+ return nil, err
}
+ return &zfs, nil
}
return nil, fmt.Errorf("Invalid storage type.")
@@ -353,9 +358,10 @@ func storageInit(d *Daemon, poolName string, volumeName string, volumeType int)
btrfs.volume = volume
btrfs.d = d
err = btrfs.StoragePoolInit()
- if err == nil {
- return &btrfs, nil
+ if err != nil {
+ return nil, err
}
+ return &btrfs, nil
case storageTypeDir:
dir := storageDir{}
dir.poolID = poolID
@@ -363,9 +369,10 @@ func storageInit(d *Daemon, poolName string, volumeName string, volumeType int)
dir.volume = volume
dir.d = d
err = dir.StoragePoolInit()
- if err == nil {
- return &dir, nil
+ if err != nil {
+ return nil, err
}
+ return &dir, nil
case storageTypeLvm:
lvm := storageLvm{}
lvm.poolID = poolID
@@ -373,9 +380,10 @@ func storageInit(d *Daemon, poolName string, volumeName string, volumeType int)
lvm.volume = volume
lvm.d = d
err = lvm.StoragePoolInit()
- if err == nil {
- return &lvm, nil
+ if err != nil {
+ return nil, err
}
+ return &lvm, nil
case storageTypeMock:
mock := storageMock{}
mock.poolID = poolID
@@ -383,9 +391,10 @@ func storageInit(d *Daemon, poolName string, volumeName string, volumeType int)
mock.volume = volume
mock.d = d
err = mock.StoragePoolInit()
- if err == nil {
- return &mock, nil
+ if err != nil {
+ return nil, err
}
+ return &mock, nil
case storageTypeZfs:
zfs := storageZfs{}
zfs.poolID = poolID
@@ -393,9 +402,10 @@ func storageInit(d *Daemon, poolName string, volumeName string, volumeType int)
zfs.volume = volume
zfs.d = d
err = zfs.StoragePoolInit()
- if err == nil {
- return &zfs, nil
+ if err != nil {
+ return nil, err
}
+ return &zfs, nil
}
return nil, fmt.Errorf("Invalid storage type.")
More information about the lxc-devel
mailing list