aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2020-01-20 00:00:08 -0800
committerChris Lu <chris.lu@gmail.com>2020-01-20 00:00:08 -0800
commit630f72f8c577fba9ca11fee7694e0748af03fadf (patch)
treebac6441caaafed985e282afd0bbe6cb061e74bce
parent1b0bfbaf59ba613ebae6b90021b2270b3ac34bc5 (diff)
downloadseaweedfs-630f72f8c577fba9ca11fee7694e0748af03fadf.tar.xz
seaweedfs-630f72f8c577fba9ca11fee7694e0748af03fadf.zip
mount: able to trim a file
-rw-r--r--weed/filesys/file.go13
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