From 2d7b4e5bb6dd62e14978ad38d882ad78320b1b4a Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sat, 29 May 2021 06:45:23 -0700 Subject: [PATCH] filer.backup: escape colon from path on windows fix https://github.com/chrislusf/seaweedfs/issues/2084 --- weed/command/filer_sync.go | 23 +++++++++++++---------- weed/command/filer_sync_std.go | 7 +++++++ weed/command/filer_sync_windows.go | 12 ++++++++++++ 3 files changed, 32 insertions(+), 10 deletions(-) create mode 100644 weed/command/filer_sync_std.go create mode 100644 weed/command/filer_sync_windows.go diff --git a/weed/command/filer_sync.go b/weed/command/filer_sync.go index 0f34e5701..52fc0b477 100644 --- a/weed/command/filer_sync.go +++ b/weed/command/filer_sync.go @@ -359,16 +359,19 @@ func genProcessFunction(sourcePath string, targetPath string, dataSink sink.Repl return processEventFn } -func buildKey(dataSink sink.ReplicationSink, message *filer_pb.EventNotification, targetPath string, sourceKey util.FullPath, sourcePath string) string { +func buildKey(dataSink sink.ReplicationSink, message *filer_pb.EventNotification, targetPath string, sourceKey util.FullPath, sourcePath string) (key string) { if !dataSink.IsIncremental() { - return util.Join(targetPath, string(sourceKey)[len(sourcePath):]) - } - var mTime int64 - if message.NewEntry != nil { - mTime = message.NewEntry.Attributes.Mtime - } else if message.OldEntry != nil { - mTime = message.OldEntry.Attributes.Mtime + key = util.Join(targetPath, string(sourceKey)[len(sourcePath):]) + } else { + var mTime int64 + if message.NewEntry != nil { + mTime = message.NewEntry.Attributes.Mtime + } else if message.OldEntry != nil { + mTime = message.OldEntry.Attributes.Mtime + } + dateKey := time.Unix(mTime, 0).Format("2006-01-02") + key = util.Join(targetPath, dateKey, string(sourceKey)[len(sourcePath):]) } - dateKey := time.Unix(mTime, 0).Format("2006-01-02") - return util.Join(targetPath, dateKey, string(sourceKey)[len(sourcePath):]) + + return escapeKey(key) } diff --git a/weed/command/filer_sync_std.go b/weed/command/filer_sync_std.go new file mode 100644 index 000000000..63851eaf8 --- /dev/null +++ b/weed/command/filer_sync_std.go @@ -0,0 +1,7 @@ +// +build !windows + +package command + +func escapeKey(key string) string { + return key +} diff --git a/weed/command/filer_sync_windows.go b/weed/command/filer_sync_windows.go new file mode 100644 index 000000000..3d0c9146e --- /dev/null +++ b/weed/command/filer_sync_windows.go @@ -0,0 +1,12 @@ +package command + +import ( + "strings" +) + +func escapeKey(key string) string { + if strings.Contains(key, ":") { + return strings.ReplaceAll(key, ":", "") + } + return key +}