mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-01-19 02:48:24 +00:00
incrementally calculate visible intervals
This commit is contained in:
parent
6b5d6bb5a6
commit
be9a7592a1
|
@ -118,7 +118,7 @@ var bufPool = sync.Pool{
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func mergeIntoVisibles(visibles, newVisibles []VisibleInterval, chunk *filer_pb.FileChunk) []VisibleInterval {
|
func MergeIntoVisibles(visibles, newVisibles []VisibleInterval, chunk *filer_pb.FileChunk) []VisibleInterval {
|
||||||
|
|
||||||
newV := newVisibleInterval(
|
newV := newVisibleInterval(
|
||||||
chunk.Offset,
|
chunk.Offset,
|
||||||
|
@ -185,12 +185,12 @@ func NonOverlappingVisibleIntervals(chunks []*filer_pb.FileChunk) (visibles []Vi
|
||||||
return chunks[i].Mtime < chunks[j].Mtime
|
return chunks[i].Mtime < chunks[j].Mtime
|
||||||
})
|
})
|
||||||
|
|
||||||
var newVislbles []VisibleInterval
|
var newVisibles []VisibleInterval
|
||||||
for _, chunk := range chunks {
|
for _, chunk := range chunks {
|
||||||
newVislbles = mergeIntoVisibles(visibles, newVislbles, chunk)
|
newVisibles = MergeIntoVisibles(visibles, newVisibles, chunk)
|
||||||
t := visibles[:0]
|
t := visibles[:0]
|
||||||
visibles = newVislbles
|
visibles = newVisibles
|
||||||
newVislbles = t
|
newVisibles = t
|
||||||
|
|
||||||
logPrintf("add", visibles)
|
logPrintf("add", visibles)
|
||||||
|
|
||||||
|
|
|
@ -2,14 +2,16 @@ package filesys
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"sort"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/chrislusf/seaweedfs/weed/filer2"
|
"github.com/chrislusf/seaweedfs/weed/filer2"
|
||||||
"github.com/chrislusf/seaweedfs/weed/glog"
|
"github.com/chrislusf/seaweedfs/weed/glog"
|
||||||
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
|
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
|
||||||
"github.com/seaweedfs/fuse"
|
"github.com/seaweedfs/fuse"
|
||||||
"github.com/seaweedfs/fuse/fs"
|
"github.com/seaweedfs/fuse/fs"
|
||||||
"os"
|
|
||||||
"path/filepath"
|
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const blockSize = 512
|
const blockSize = 512
|
||||||
|
@ -179,12 +181,20 @@ func (file *File) addChunk(chunk *filer_pb.FileChunk) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (file *File) addChunks(chunks []*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 {
|
for _, chunk := range chunks {
|
||||||
file.entry.Chunks = append(file.entry.Chunks, chunk)
|
newVisibles = filer2.MergeIntoVisibles(file.entryViewCache, newVisibles, chunk)
|
||||||
file.entryViewCache = nil
|
t := file.entryViewCache[:0]
|
||||||
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))
|
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) {
|
func (file *File) setEntry(entry *filer_pb.Entry) {
|
||||||
|
|
Loading…
Reference in a new issue