diff --git a/weed/filesys/dir.go b/weed/filesys/dir.go index 4383fe62d..732912a99 100644 --- a/weed/filesys/dir.go +++ b/weed/filesys/dir.go @@ -21,6 +21,9 @@ type Dir struct { wfs *WFS } +var _ = fs.Node(&Dir{}) +var _ = fs.HandleReadDirAller(&Dir{}) + func (dir *Dir) Attr(context context.Context, attr *fuse.Attr) error { attr.Mode = os.ModeDir | 0777 return nil diff --git a/weed/filesys/file.go b/weed/filesys/file.go index 18fd05e1d..230ff272f 100644 --- a/weed/filesys/file.go +++ b/weed/filesys/file.go @@ -23,6 +23,7 @@ var _ = fs.HandleReadAller(&File{}) // var _ = fs.HandleReader(&File{}) var _ = fs.HandleFlusher(&File{}) var _ = fs.HandleWriter(&File{}) +var _ = fs.HandleReleaser(&File{}) type File struct { Chunks []*filer_pb.FileChunk @@ -49,6 +50,7 @@ func (file *File) Attr(context context.Context, attr *fuse.Attr) error { glog.V(1).Infof("read file size: %v", request) resp, err := client.GetFileAttributes(context, request) if err != nil { + glog.V(0).Infof("read file attributes %v: %v", request, err) return err } @@ -67,13 +69,17 @@ func (file *File) Attr(context context.Context, attr *fuse.Attr) error { attr.Mtime = time.Unix(attributes.Mtime, 0) attr.Gid = attributes.Gid attr.Uid = attributes.Uid + return nil } func (file *File) ReadAll(ctx context.Context) (content []byte, err error) { + // fmt.Printf("read all file %+v/%v\n", file.dir.Path, file.Name) + if len(file.Chunks) == 0 { + glog.V(0).Infof("empty file %v/%v", file.dir.Path, file.Name) return } @@ -109,7 +115,12 @@ func (file *File) Fsync(ctx context.Context, req *fuse.FsyncRequest) error { func (file *File) Flush(ctx context.Context, req *fuse.FlushRequest) error { // fflush works at file level // send the data to the OS - fmt.Printf("flush file %+v\n", req) + glog.V(3).Infof("file flush %v", req) + + if len(file.Chunks) == 0 { + glog.V(2).Infof("file flush skipping empty %v", req) + return nil + } err := file.wfs.withFilerClient(func(client filer_pb.SeaweedFilerClient) error { @@ -134,7 +145,7 @@ func (file *File) Flush(ctx context.Context, req *fuse.FlushRequest) error { func (file *File) Write(ctx context.Context, req *fuse.WriteRequest, resp *fuse.WriteResponse) error { // write the request to volume servers - fmt.Printf("write file %+v\n", req) + // fmt.Printf("write file %+v\n", req) var fileId, host string @@ -178,5 +189,14 @@ func (file *File) Write(ctx context.Context, req *fuse.WriteRequest, resp *fuse. Mtime: time.Now().UnixNano(), }) + resp.Size = int(uploadResult.Size) + + return nil +} + +func (file *File) Release(ctx context.Context, req *fuse.ReleaseRequest) error { + + // fmt.Printf("release file %+v\n", req) + return nil }