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 }