aboutsummaryrefslogtreecommitdiff
path: root/weed/filesys/file.go
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2019-01-05 22:23:44 -0800
committerChris Lu <chris.lu@gmail.com>2019-01-05 22:23:44 -0800
commitbe9a7592a1ede622659ea7405a1ec23486b577a5 (patch)
tree654c1bf29baa2fd485403902ed0575d2e5216d62 /weed/filesys/file.go
parent6b5d6bb5a6a7eabe7d467951f00bd466a6d9e456 (diff)
downloadseaweedfs-be9a7592a1ede622659ea7405a1ec23486b577a5.tar.xz
seaweedfs-be9a7592a1ede622659ea7405a1ec23486b577a5.zip
incrementally calculate visible intervals
Diffstat (limited to 'weed/filesys/file.go')
-rw-r--r--weed/filesys/file.go24
1 files changed, 17 insertions, 7 deletions
diff --git a/weed/filesys/file.go b/weed/filesys/file.go
index 6c96ba4ed..4bb169a33 100644
--- a/weed/filesys/file.go
+++ b/weed/filesys/file.go
@@ -2,14 +2,16 @@ package filesys
import (
"context"
+ "os"
+ "path/filepath"
+ "sort"
+ "time"
+
"github.com/chrislusf/seaweedfs/weed/filer2"
"github.com/chrislusf/seaweedfs/weed/glog"
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
"github.com/seaweedfs/fuse"
"github.com/seaweedfs/fuse/fs"
- "os"
- "path/filepath"
- "time"
)
const blockSize = 512
@@ -179,12 +181,20 @@ func (file *File) addChunk(chunk *filer_pb.FileChunk) {
}
func (file *File) addChunks(chunks []*filer_pb.FileChunk) {
+
+ sort.Slice(chunks, func(i, j int) bool {
+ return chunks[i].Mtime < chunks[j].Mtime
+ })
+
+ var newVisibles []filer2.VisibleInterval
for _, chunk := range chunks {
- file.entry.Chunks = append(file.entry.Chunks, chunk)
- file.entryViewCache = nil
- glog.V(4).Infof("uploaded %s/%s to %s [%d,%d)", file.dir.Path, file.Name, chunk.FileId, chunk.Offset, chunk.Offset+int64(chunk.Size))
+ newVisibles = filer2.MergeIntoVisibles(file.entryViewCache, newVisibles, chunk)
+ t := file.entryViewCache[:0]
+ file.entryViewCache = newVisibles
+ newVisibles = t
}
- file.entryViewCache = filer2.NonOverlappingVisibleIntervals(file.entry.Chunks)
+
+ file.entry.Chunks = append(file.entry.Chunks, chunks...)
}
func (file *File) setEntry(entry *filer_pb.Entry) {