blob: 1273e21e6608aa62e5f96dea15501b56833f2170 [file] [log] [blame]
From 595c704bab036cfb74a350103e48e233315ba402 Mon Sep 17 00:00:00 2001
From: Fergus Dall <sidereal@google.com>
Date: Thu, 1 Apr 2021 15:57:51 +1100
Subject: [PATCH] Fix lxd import error
Currently if the snapshots directory doesn't exist, and backup.yaml
had snapshots listed, this is a hard error, whereas other conflicts
can be bypassed by adding --force. This happens because if there are
no snapshots, the directory containing them doesn't exist
either. Change the handling to treat a non-existent directory as "no
snapshots" rather then as an error.
---
lxd/api_internal.go | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/lxd/api_internal.go b/lxd/api_internal.go
index 758f17b40..6b4d6e7dd 100644
--- a/lxd/api_internal.go
+++ b/lxd/api_internal.go
@@ -547,15 +547,16 @@ func internalImport(d *Daemon, r *http.Request) Response {
case "btrfs":
snapshotsDirPath := driver.GetSnapshotMountPoint(projectName, poolName, req.Name)
snapshotsDir, err := os.Open(snapshotsDirPath)
- if err != nil {
+ if err != nil && !os.IsNotExist(err) {
return InternalError(err)
- }
- onDiskSnapshots, err = snapshotsDir.Readdirnames(-1)
- if err != nil {
+ } else if err == nil {
+ onDiskSnapshots, err = snapshotsDir.Readdirnames(-1)
+ if err != nil {
+ snapshotsDir.Close()
+ return InternalError(err)
+ }
snapshotsDir.Close()
- return InternalError(err)
}
- snapshotsDir.Close()
case "dir":
snapshotsDirPath := driver.GetSnapshotMountPoint(projectName, poolName, req.Name)
snapshotsDir, err := os.Open(snapshotsDirPath)
--
2.31.0.291.g576ba9dcdaf-goog