local sink: write and update files

fix issues with https://github.com/chrislusf/seaweedfs/issues/2084
This commit is contained in:
Chris Lu 2021-05-26 14:42:18 -07:00
parent e699d16c85
commit 1a70cb9b63

View file

@ -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
}