aboutsummaryrefslogtreecommitdiff
path: root/weed
diff options
context:
space:
mode:
authorzemul <zemul@foxmail.com>2022-11-04 15:34:40 +0800
committerGitHub <noreply@github.com>2022-11-04 00:34:40 -0700
commitcec55feeb08efe45f15f09df8089f85b6278424c (patch)
tree14427a5c8457bc11feae039fe47067846ffbe9ff /weed
parent4193dafce1282df4386b7898380af02ee7cbb657 (diff)
downloadseaweedfs-cec55feeb08efe45f15f09df8089f85b6278424c.tar.xz
seaweedfs-cec55feeb08efe45f15f09df8089f85b6278424c.zip
[filer.backup] add retention_duration (#3941)
Diffstat (limited to 'weed')
-rw-r--r--weed/command/filer_backup.go15
1 files changed, 15 insertions, 0 deletions
diff --git a/weed/command/filer_backup.go b/weed/command/filer_backup.go
index 309bd0439..6f379a6d6 100644
--- a/weed/command/filer_backup.go
+++ b/weed/command/filer_backup.go
@@ -19,6 +19,7 @@ type FilerBackupOptions struct {
debug *bool
proxyByFiler *bool
timeAgo *time.Duration
+ retentionDays *int
}
var (
@@ -33,6 +34,8 @@ func init() {
filerBackupOptions.proxyByFiler = cmdFilerBackup.Flag.Bool("filerProxy", false, "read and write file chunks by filer instead of volume servers")
filerBackupOptions.debug = cmdFilerBackup.Flag.Bool("debug", false, "debug mode to print out received files")
filerBackupOptions.timeAgo = cmdFilerBackup.Flag.Duration("timeAgo", 0, "start time before now. \"300ms\", \"1.5h\" or \"2h45m\". Valid time units are \"ns\", \"us\" (or \"µs\"), \"ms\", \"s\", \"m\", \"h\"")
+ filerBackupOptions.retentionDays = cmdFilerBackup.Flag.Int("retentionDays", 0, "incremental backup retention days")
+
}
var cmdFilerBackup = &Command{
@@ -123,6 +126,18 @@ func doFilerBackup(grpcDialOption grpc.DialOption, backupOption *FilerBackupOpti
return setOffset(grpcDialOption, sourceFiler, BackupKeyPrefix, int32(sinkId), lastTsNs)
})
+ if dataSink.IsIncremental() && *filerBackupOptions.retentionDays > 0 {
+ go func() {
+ for {
+ now := time.Now()
+ time.Sleep(time.Hour * 24)
+ key := util.Join(targetPath, now.Add(-1*time.Hour*24*time.Duration(*filerBackupOptions.retentionDays)).Format("2006-01-02"))
+ _ = dataSink.DeleteEntry(util.Join(targetPath, key), true, true, nil)
+ glog.V(0).Infof("incremental backup delete directory:%s", key)
+ }
+ }()
+ }
+
return pb.FollowMetadata(sourceFiler, grpcDialOption, "backup_"+dataSink.GetName(), clientId, clientEpoch, sourcePath, nil, startFrom.UnixNano(), 0, 0, processEventFnWithOffset, pb.TrivialOnError)
}