|
7 | 7 | "fmt" |
8 | 8 | "time" |
9 | 9 |
|
| 10 | + "github.com/fenio/tns-csi/pkg/retry" |
10 | 11 | "github.com/fenio/tns-csi/pkg/tnsapi" |
11 | 12 | "k8s.io/klog/v2" |
12 | 13 | ) |
@@ -107,14 +108,18 @@ func (v *TrueNASVerifier) NVMeOFSubsystemExists(ctx context.Context, nqn string) |
107 | 108 | return len(subsystems) > 0, nil |
108 | 109 | } |
109 | 110 |
|
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). |
112 | 114 | 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 | + }) |
118 | 123 | } |
119 | 124 |
|
120 | 125 | // deleteResourceByFilter is a helper that queries for a resource by filter, gets its ID, and deletes it. |
|
0 commit comments