From 1a70cb9b631b95be1c0b07cb0e93e9e68be6ac23 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Wed, 26 May 2021 14:42:18 -0700 Subject: [PATCH] local sink: write and update files fix issues with https://github.com/chrislusf/seaweedfs/issues/2084 --- weed/replication/sink/localsink/local_sink.go | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/weed/replication/sink/localsink/local_sink.go b/weed/replication/sink/localsink/local_sink.go index e40ad8bb6..f3d3862ee 100644 --- a/weed/replication/sink/localsink/local_sink.go +++ b/weed/replication/sink/localsink/local_sink.go @@ -8,7 +8,6 @@ import ( "github.com/chrislusf/seaweedfs/weed/replication/sink" "github.com/chrislusf/seaweedfs/weed/replication/source" "github.com/chrislusf/seaweedfs/weed/util" - "io/ioutil" "os" "path/filepath" "strings" @@ -86,8 +85,18 @@ func (localsink *LocalSink) CreateEntry(key string, entry *filer_pb.Entry, signa } } + if entry.IsDirectory { + return os.Mkdir(key, os.FileMode(entry.Attributes.FileMode)) + } + + dstFile, err := os.OpenFile(key, os.O_RDWR|os.O_CREATE|os.O_TRUNC, os.FileMode(entry.Attributes.FileMode)) + if err != nil { + return err + } + defer dstFile.Close() + writeFunc := func(data []byte) error { - writeErr := ioutil.WriteFile(key, data, 0755) + _, writeErr := dstFile.Write(data) return writeErr } @@ -104,5 +113,7 @@ func (localsink *LocalSink) UpdateEntry(key string, oldEntry *filer_pb.Entry, ne } glog.V(4).Infof("Update Entry key: %s", key) // do delete and create - return false, nil + foundExistingEntry = util.FileExists(key) + err = localsink.CreateEntry(key, newEntry, signatures) + return }