|
|
@ -151,7 +151,7 @@ func (file *File) Setattr(ctx context.Context, req *fuse.SetattrRequest, resp *f |
|
|
|
} |
|
|
|
entry.Chunks = chunks |
|
|
|
file.entryViewCache, _ = filer.NonOverlappingVisibleIntervals(file.wfs.LookupFn(), chunks) |
|
|
|
file.reader = nil |
|
|
|
file.setReader(nil) |
|
|
|
} |
|
|
|
entry.Attributes.FileSize = req.Size |
|
|
|
file.dirtyMetadata = true |
|
|
@ -261,6 +261,8 @@ func (file *File) Forget() { |
|
|
|
t := util.NewFullPath(file.dir.FullPath(), file.Name) |
|
|
|
glog.V(4).Infof("Forget file %s", t) |
|
|
|
file.wfs.fsNodeCache.DeleteFsNode(t) |
|
|
|
file.wfs.ReleaseHandle(t, 0) |
|
|
|
file.setReader(nil) |
|
|
|
} |
|
|
|
|
|
|
|
func (file *File) maybeLoadEntry(ctx context.Context) (entry *filer_pb.Entry, err error) { |
|
|
@ -280,9 +282,6 @@ func (file *File) maybeLoadEntry(ctx context.Context) (entry *filer_pb.Entry, er |
|
|
|
return entry, err |
|
|
|
} |
|
|
|
if entry != nil { |
|
|
|
if entry.Attributes == nil { |
|
|
|
entry.Attributes = &filer_pb.FuseAttributes{} |
|
|
|
} |
|
|
|
file.setEntry(entry) |
|
|
|
} else { |
|
|
|
glog.Warningf("maybeLoadEntry not found entry %s/%s: %v", file.dir.FullPath(), file.Name, err) |
|
|
@ -330,19 +329,29 @@ func (file *File) addChunks(chunks []*filer_pb.FileChunk) { |
|
|
|
file.entryViewCache = filer.MergeIntoVisibles(file.entryViewCache, chunk) |
|
|
|
} |
|
|
|
|
|
|
|
file.reader = nil |
|
|
|
file.setReader(nil) |
|
|
|
|
|
|
|
glog.V(4).Infof("%s existing %d chunks adds %d more", file.fullpath(), len(entry.Chunks), len(chunks)) |
|
|
|
|
|
|
|
entry.Chunks = append(entry.Chunks, newChunks...) |
|
|
|
} |
|
|
|
|
|
|
|
func (file *File) setReader(reader io.ReaderAt) { |
|
|
|
r := file.reader |
|
|
|
if r != nil { |
|
|
|
if closer, ok := r.(io.Closer); ok { |
|
|
|
closer.Close() |
|
|
|
} |
|
|
|
} |
|
|
|
file.reader = reader |
|
|
|
} |
|
|
|
|
|
|
|
func (file *File) setEntry(entry *filer_pb.Entry) { |
|
|
|
file.entryLock.Lock() |
|
|
|
defer file.entryLock.Unlock() |
|
|
|
file.entry = entry |
|
|
|
file.entryViewCache, _ = filer.NonOverlappingVisibleIntervals(file.wfs.LookupFn(), entry.Chunks) |
|
|
|
file.reader = nil |
|
|
|
file.setReader(nil) |
|
|
|
} |
|
|
|
|
|
|
|
func (file *File) clearEntry() { |
|
|
@ -350,7 +359,7 @@ func (file *File) clearEntry() { |
|
|
|
defer file.entryLock.Unlock() |
|
|
|
file.entry = nil |
|
|
|
file.entryViewCache = nil |
|
|
|
file.reader = nil |
|
|
|
file.setReader(nil) |
|
|
|
} |
|
|
|
|
|
|
|
func (file *File) saveEntry(entry *filer_pb.Entry) error { |
|
|
|