Skip to content

Commit

Permalink
Merge pull request #96 from vansante/do-not-send-before-delete
Browse files Browse the repository at this point in the history
When a dataset (filesystem, not snapshot) is to be deleted within a day, stop sending
  • Loading branch information
vansante authored Jun 27, 2024
2 parents 7f693d8 + fea87ac commit a8cff45
Showing 1 changed file with 13 additions and 1 deletion.
14 changes: 13 additions & 1 deletion job/snapshots_send.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import (
zfshttp "github.com/vansante/go-zfsutils/http"
)

const stopSendingBeforeDeleteDuration = 24 * time.Hour

var ErrNoCommonSnapshots = errors.New("local and remote datasets have no common snapshot")

func (r *Runner) sendSnapshots(routineID int) error {
Expand Down Expand Up @@ -48,8 +50,9 @@ func (r *Runner) sendSnapshots(routineID int) error {
func (r *Runner) sendDatasetSnapshotsByName(routineID int, dataset string) error {
sendToProp := r.config.Properties.snapshotSendTo()
sendingProp := r.config.Properties.snapshotSending()
deleteProp := r.config.Properties.deleteAt()

ds, err := zfs.GetDataset(r.ctx, dataset, sendToProp, sendingProp)
ds, err := zfs.GetDataset(r.ctx, dataset, sendToProp, sendingProp, deleteProp)
if err != nil {
return fmt.Errorf("error retrieving snapshottable dataset %s: %w", dataset, err)
}
Expand All @@ -63,6 +66,15 @@ func (r *Runner) sendDatasetSnapshotsByName(routineID int, dataset string) error
return nil // Dont know where to send this one ¯\_(ツ)_/¯
}

deleteAtStopSend := time.Now().Add(stopSendingBeforeDeleteDuration)
if propertyIsSet(ds.ExtraProps[deleteProp]) && propertyIsBefore(ds.ExtraProps[deleteProp], deleteAtStopSend) {
r.logger.Debug("zfs.job.Runner.sendDatasetSnapshotsByName: Dataset will be deleted, skipping",
"routineID", routineID,
"dataset", dataset,
)
return nil
}

err = r.sendDatasetSnapshots(ds)
switch {
case isContextError(err):
Expand Down

0 comments on commit a8cff45

Please sign in to comment.