diff options
| author | Chris Lu <chris.lu@gmail.com> | 2020-01-20 00:00:08 -0800 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2020-01-20 00:00:08 -0800 |
| commit | 630f72f8c577fba9ca11fee7694e0748af03fadf (patch) | |
| tree | bac6441caaafed985e282afd0bbe6cb061e74bce | |
| parent | 1b0bfbaf59ba613ebae6b90021b2270b3ac34bc5 (diff) | |
| download | seaweedfs-630f72f8c577fba9ca11fee7694e0748af03fadf.tar.xz seaweedfs-630f72f8c577fba9ca11fee7694e0748af03fadf.zip | |
mount: able to trim a file
| -rw-r--r-- | weed/filesys/file.go | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/weed/filesys/file.go b/weed/filesys/file.go index 7e562eabc..622ba6f57 100644 --- a/weed/filesys/file.go +++ b/weed/filesys/file.go @@ -102,9 +102,18 @@ func (file *File) Setattr(ctx context.Context, req *fuse.SetattrRequest, resp *f if req.Valid.Size() { glog.V(3).Infof("%v file setattr set size=%v", file.fullpath(), req.Size) - if req.Size == 0 { + if req.Size < filer2.TotalSize(file.entry.Chunks) { // fmt.Printf("truncate %v \n", fullPath) - file.entry.Chunks = nil + var chunks []*filer_pb.FileChunk + for _, chunk := range file.entry.Chunks { + if uint64(chunk.Offset)+chunk.Size > req.Size { + chunk.Size = req.Size - uint64(chunk.Offset) + } + if chunk.Size > 0 { + chunks = append(chunks, chunk) + } + } + file.entry.Chunks = chunks file.entryViewCache = nil } file.entry.Attributes.FileSize = req.Size |
