You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							67 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							67 lines
						
					
					
						
							1.8 KiB
						
					
					
				| package mount | |
| 
 | |
| import ( | |
| 	"context" | |
| 	"fmt" | |
| 	"github.com/chrislusf/seaweedfs/weed/filer" | |
| 	"github.com/chrislusf/seaweedfs/weed/glog" | |
| 	"github.com/chrislusf/seaweedfs/weed/pb/filer_pb" | |
| 	"github.com/chrislusf/seaweedfs/weed/util" | |
| 	"github.com/hanwen/go-fuse/v2/fuse" | |
| 	"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) >= 256 { | |
| 		return fuse.Status(syscall.ENAMETOOLONG) | |
| 	} | |
| 	return fuse.OK | |
| }
 |