} func (r *MarkRecorder) Mark() { r.count.Inc() } func (r *MarkRecorder) Recorded() bool { return r.count.Count() > 0 } // Flushes notes whether a FUSE Flush call has been seen. type Flushes struct { rec MarkRecorder } var _ = fs.HandleFlusher(&Flushes{}) func (r *Flushes) Flush(req *fuse.FlushRequest, intr fs.Intr) fuse.Error { r.rec.Mark() return nil } func (r *Flushes) RecordedFlush() bool { return r.rec.Recorded() } type Recorder struct { mu sync.Mutex val interface{} }
name string blob *blobs.Blob dirty dirtiness handles uint32 // when was this entry last changed // TODO: written time.Time } var _ = node(&file{}) var _ = fs.Node(&file{}) var _ = fs.NodeForgetter(&file{}) var _ = fs.NodeOpener(&file{}) var _ = fs.NodeSetattrer(&file{}) var _ = fs.NodeFsyncer(&file{}) var _ = fs.HandleFlusher(&file{}) var _ = fs.HandleReader(&file{}) var _ = fs.HandleWriter(&file{}) var _ = fs.HandleReleaser(&file{}) func (f *file) setName(name string) { f.mu.Lock() defer f.mu.Unlock() f.name = name } func (f *file) marshalInternal() (*wire.Dirent, error) { de := &wire.Dirent{ Inode: f.inode, } manifest, err := f.blob.Save()
//TODO: Allow to write description return nil } return fuse.EIO } glog.Infof("Writing file: %s.\n", fh.r.Name()) if _, err := fh.r.Seek(req.Offset, 0); err != nil { return err } n, err := fh.r.Write(req.Data) resp.Size = n return err } var _ = fs.HandleFlusher(&FileHandle{}) func (fh *FileHandle) Flush(ctx context.Context, req *fuse.FlushRequest) error { if fh.f != nil { glog.Infof("Entered Flush with Song: %s, Artist: %s and Album: %s\n", fh.f.name, fh.f.artist, fh.f.album) } if fh.r == nil { glog.Infof("There is no file handler.\n") return fuse.EIO } glog.Infof("Entered Flush with path: %s\n", fh.r.Name()) fh.r.Sync() return nil