aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Garrett <andrewgarrett@google.com>2023-10-06 23:40:20 +1100
committerGitHub <noreply@github.com>2023-10-06 05:40:20 -0700
commit082f67bfe95b3914a12669e6f9d1e934b602deb1 (patch)
treed9c8e72d3797413dbbeb4a7a3c2f63e94de72832
parent0fd7222d65d58f81d08712702b4d5604a85ca92a (diff)
downloadseaweedfs-082f67bfe95b3914a12669e6f9d1e934b602deb1.tar.xz
seaweedfs-082f67bfe95b3914a12669e6f9d1e934b602deb1.zip
Fix filer.backup local sink to propagate file mode changes (#4896)
-rw-r--r--weed/replication/sink/localsink/local_sink.go14
1 files changed, 13 insertions, 1 deletions
diff --git a/weed/replication/sink/localsink/local_sink.go b/weed/replication/sink/localsink/local_sink.go
index 134d3985a..c6dddb80a 100644
--- a/weed/replication/sink/localsink/local_sink.go
+++ b/weed/replication/sink/localsink/local_sink.go
@@ -90,12 +90,24 @@ func (localsink *LocalSink) CreateEntry(key string, entry *filer_pb.Entry, signa
return os.Mkdir(key, os.FileMode(entry.Attributes.FileMode))
}
- dstFile, err := os.OpenFile(util.ToShortFileName(key), os.O_RDWR|os.O_CREATE|os.O_TRUNC, os.FileMode(entry.Attributes.FileMode))
+ mode := os.FileMode(entry.Attributes.FileMode)
+ dstFile, err := os.OpenFile(util.ToShortFileName(key), os.O_RDWR|os.O_CREATE|os.O_TRUNC, mode)
if err != nil {
return err
}
defer dstFile.Close()
+ fi, err := dstFile.Stat()
+ if err != nil {
+ return err
+ }
+ if fi.Mode() != mode {
+ glog.V(4).Infof("Modify file mode: %o -> %o", fi.Mode(), mode)
+ if err := dstFile.Chmod(mode); err != nil {
+ return err
+ }
+ }
+
writeFunc := func(data []byte) error {
_, writeErr := dstFile.Write(data)
return writeErr