File 0001-incusd-storage-zfs-Fix-deletion-of-unavailable-pools.patch of Package incus.18685
From 7404e5abf36daf768745bc932d5f4fd0150ec4b1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber@stgraber.org>
Date: Fri, 22 Nov 2024 06:50:05 +0000
Subject: [PATCH 1/2] incusd/storage/zfs: Fix deletion of unavailable pools
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
---
internal/server/storage/drivers/driver_zfs.go | 57 +++++++++----------
1 file changed, 28 insertions(+), 29 deletions(-)
diff --git a/internal/server/storage/drivers/driver_zfs.go b/internal/server/storage/drivers/driver_zfs.go
index da10c39cad7d..54cceb6aa27b 100644
--- a/internal/server/storage/drivers/driver_zfs.go
+++ b/internal/server/storage/drivers/driver_zfs.go
@@ -407,41 +407,40 @@ func (d *zfs) Delete(op *operations.Operation) error {
return err
}
- if !exists {
- return nil
- }
-
- // Confirm that nothing's been left behind
- datasets, err := d.getDatasets(d.config["zfs.pool_name"], "all")
- if err != nil {
- return err
- }
+ if exists {
+ // Confirm that nothing's been left behind
+ datasets, err := d.getDatasets(d.config["zfs.pool_name"], "all")
+ if err != nil {
+ return err
+ }
- initialDatasets := d.initialDatasets()
- for _, dataset := range datasets {
- dataset = strings.TrimPrefix(dataset, "/")
+ initialDatasets := d.initialDatasets()
+ for _, dataset := range datasets {
+ dataset = strings.TrimPrefix(dataset, "/")
- if slices.Contains(initialDatasets, dataset) {
- continue
- }
+ if slices.Contains(initialDatasets, dataset) {
+ continue
+ }
- fields := strings.Split(dataset, "/")
- if len(fields) > 1 {
- return fmt.Errorf("ZFS pool has leftover datasets: %s", dataset)
+ fields := strings.Split(dataset, "/")
+ if len(fields) > 1 {
+ return fmt.Errorf("ZFS pool has leftover datasets: %s", dataset)
+ }
}
- }
- if strings.Contains(d.config["zfs.pool_name"], "/") {
- // Delete the dataset.
- _, err := subprocess.RunCommand("zfs", "destroy", "-r", d.config["zfs.pool_name"])
- if err != nil {
- return err
- }
- } else {
// Delete the pool.
- _, err := subprocess.RunCommand("zpool", "destroy", d.config["zfs.pool_name"])
- if err != nil {
- return err
+ if strings.Contains(d.config["zfs.pool_name"], "/") {
+ // Delete the dataset.
+ _, err := subprocess.RunCommand("zfs", "destroy", "-r", d.config["zfs.pool_name"])
+ if err != nil {
+ return err
+ }
+ } else {
+ // Delete the pool.
+ _, err := subprocess.RunCommand("zpool", "destroy", d.config["zfs.pool_name"])
+ if err != nil {
+ return err
+ }
}
}
--
2.47.0