Skip to content

Commit 98402e5

Browse files
committed
fix: add retry and force flags to test framework DeleteDataset
The test framework's DeleteDataset was calling pool.dataset.delete with bare params and no retry, causing EBUSY failures during NFS test cleanup when TrueNAS hasn't released the dataset mount yet. Now matches the driver's approach: recursive=true, force=true, with 12x5s retry on busy.
1 parent 70a2bd4 commit 98402e5

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

tests/e2e/framework/truenas.go

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"fmt"
88
"time"
99

10+
"github.com/fenio/tns-csi/pkg/retry"
1011
"github.com/fenio/tns-csi/pkg/tnsapi"
1112
"k8s.io/klog/v2"
1213
)
@@ -107,14 +108,18 @@ func (v *TrueNASVerifier) NVMeOFSubsystemExists(ctx context.Context, nqn string)
107108
return len(subsystems) > 0, nil
108109
}
109110

110-
// DeleteDataset deletes a dataset from TrueNAS.
111-
// This is used for cleaning up retained datasets after tests.
111+
// DeleteDataset deletes a dataset from TrueNAS with recursive+force flags and retry logic.
112+
// This matches the driver's DeleteDataset approach: passes recursive=true, force=true,
113+
// and retries on EBUSY errors (12 attempts × 5s interval = ~60s total).
112114
func (v *TrueNASVerifier) DeleteDataset(ctx context.Context, datasetPath string) error {
113-
var result any
114-
if err := v.client.Call(ctx, "pool.dataset.delete", []any{datasetPath}, &result); err != nil {
115-
return fmt.Errorf("failed to delete dataset %s: %w", datasetPath, err)
116-
}
117-
return nil
115+
return retry.WithRetryNoResult(ctx, retry.DeletionConfig("DeleteDataset("+datasetPath+")"), func() error {
116+
var result any
117+
params := []any{datasetPath, map[string]any{"recursive": true, "force": true}}
118+
if err := v.client.Call(ctx, "pool.dataset.delete", params, &result); err != nil {
119+
return fmt.Errorf("failed to delete dataset %s: %w", datasetPath, err)
120+
}
121+
return nil
122+
})
118123
}
119124

120125
// deleteResourceByFilter is a helper that queries for a resource by filter, gets its ID, and deletes it.

0 commit comments

Comments
 (0)