Skip to content

Commit

Permalink
Merge pull request #109 from vansante/dependent-clones
Browse files Browse the repository at this point in the history
Add ErrSnapshotHasDependentClones and emit warning instead of error on prune job
  • Loading branch information
vansante authored Sep 23, 2024
2 parents 93ea9f2 + b2255bc commit 9dce9f2
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 2 deletions.
11 changes: 9 additions & 2 deletions error.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@ const (
resumableErrorMessage = "resuming stream can be generated on the sending system"
datasetBusyMessage = "pool or dataset is busy"
datasetNoLongerExistsMessage = "no longer exists"
datasetExistsMessage = "exists"
snapshotHasDependentsMessage = "snapshot has dependent clones"
datasetExistsMessage1 = "destination '"
datasetExistsMessage2 = "' exists"
)

var (
Expand All @@ -30,6 +32,9 @@ var (

// ErrPoolOrDatasetBusy is returned when an action fails because ZFS is doing another action
ErrPoolOrDatasetBusy = errors.New("pool or dataset busy")

// ErrSnapshotHasDependentClones is returned when the snapshot has dependent clones
ErrSnapshotHasDependentClones = errors.New("snapshot has dependent clones")
)

// CommandError is an error which is returned when the `zfs` or `zpool` shell
Expand Down Expand Up @@ -60,8 +65,10 @@ func createError(cmd *exec.Cmd, stderr string, err error) error {
return fmt.Errorf("%s: %w", stderr, ErrPoolOrDatasetBusy)
case strings.Contains(stderr, datasetNoLongerExistsMessage):
return fmt.Errorf("%s: %w", stderr, ErrDatasetNotFound)
case strings.Contains(stderr, datasetExistsMessage):
case strings.Contains(stderr, datasetExistsMessage1) && strings.Contains(stderr, datasetExistsMessage2):
return fmt.Errorf("%s: %w", stderr, ErrDatasetExists)
case strings.Contains(stderr, snapshotHasDependentsMessage):
return fmt.Errorf("%s: %w", stderr, ErrSnapshotHasDependentClones)
case strings.Contains(stderr, resumableErrorMessage):
return &ResumableStreamError{
CommandError: CommandError{
Expand Down
8 changes: 8 additions & 0 deletions job/snapshots_prune.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,14 @@ func (r *Runner) pruneSnapshots() error {
"full", snapshot,
)
return nil // Return no error
case errors.Is(err, zfs.ErrSnapshotHasDependentClones):
r.logger.Warn("zfs.job.Runner.pruneSnapshots: Snapshot in use",
"error", err,
"dataset", datasetName(snapshot, true),
"snapshot", snapshotName(snapshot),
"full", snapshot,
)
continue // Nothing to do here, next
case err != nil:
r.logger.Error("zfs.job.Runner.pruneSnapshots: Error pruning snapshot",
"error", err,
Expand Down

0 comments on commit 9dce9f2

Please sign in to comment.