12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- package mount
- import (
- "context"
- "fmt"
- "github.com/hanwen/go-fuse/v2/fuse"
- "github.com/seaweedfs/seaweedfs/weed/filer"
- "github.com/seaweedfs/seaweedfs/weed/glog"
- "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
- "github.com/seaweedfs/seaweedfs/weed/util"
- "syscall"
- )
- func (wfs *WFS) saveEntry(path util.FullPath, entry *filer_pb.Entry) (code fuse.Status) {
- parentDir, _ := path.DirAndName()
- err := wfs.WithFilerClient(false, func(client filer_pb.SeaweedFilerClient) error {
- wfs.mapPbIdFromLocalToFiler(entry)
- defer wfs.mapPbIdFromFilerToLocal(entry)
- request := &filer_pb.UpdateEntryRequest{
- Directory: parentDir,
- Entry: entry,
- Signatures: []int32{wfs.signature},
- }
- glog.V(1).Infof("save entry: %v", request)
- _, err := client.UpdateEntry(context.Background(), request)
- if err != nil {
- return fmt.Errorf("UpdateEntry dir %s: %v", path, err)
- }
- if err := wfs.metaCache.UpdateEntry(context.Background(), filer.FromPbEntry(request.Directory, request.Entry)); err != nil {
- return fmt.Errorf("UpdateEntry dir %s: %v", path, err)
- }
- return nil
- })
- if err != nil {
- glog.Errorf("saveEntry %s: %v", path, err)
- return fuse.EIO
- }
- return fuse.OK
- }
- func (wfs *WFS) mapPbIdFromFilerToLocal(entry *filer_pb.Entry) {
- if entry.Attributes == nil {
- return
- }
- entry.Attributes.Uid, entry.Attributes.Gid = wfs.option.UidGidMapper.FilerToLocal(entry.Attributes.Uid, entry.Attributes.Gid)
- }
- func (wfs *WFS) mapPbIdFromLocalToFiler(entry *filer_pb.Entry) {
- if entry.Attributes == nil {
- return
- }
- entry.Attributes.Uid, entry.Attributes.Gid = wfs.option.UidGidMapper.LocalToFiler(entry.Attributes.Uid, entry.Attributes.Gid)
- }
- func checkName(name string) fuse.Status {
- if len(name) >= 4096 {
- return fuse.Status(syscall.ENAMETOOLONG)
- }
- return fuse.OK
- }
|