mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-01-19 02:48:24 +00:00
mount: faster add chunks
This commit is contained in:
parent
49b84d5866
commit
296fdc296c
|
@ -32,10 +32,17 @@ func (section *FileChunkSection) addChunk(chunk *filer_pb.FileChunk) error {
|
||||||
|
|
||||||
if section.visibleIntervals != nil {
|
if section.visibleIntervals != nil {
|
||||||
MergeIntoVisibles(section.visibleIntervals, start, stop, chunk)
|
MergeIntoVisibles(section.visibleIntervals, start, stop, chunk)
|
||||||
}
|
garbageFileIds := FindGarbageChunks(section.visibleIntervals, start, stop)
|
||||||
|
for _, garbageFileId := range garbageFileIds {
|
||||||
if section.visibleIntervals != nil {
|
length := len(section.chunks)
|
||||||
section.chunks, _ = SeparateGarbageChunks(section.visibleIntervals, section.chunks)
|
for i, t := range section.chunks {
|
||||||
|
if t.FileId == garbageFileId {
|
||||||
|
section.chunks[i] = section.chunks[length-1]
|
||||||
|
section.chunks = section.chunks[:length-1]
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if section.chunkViews != nil {
|
if section.chunkViews != nil {
|
||||||
|
|
|
@ -86,6 +86,17 @@ func SeparateGarbageChunks(visibles *IntervalList[*VisibleInterval], chunks []*f
|
||||||
return compacted, garbage
|
return compacted, garbage
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func FindGarbageChunks(visibles *IntervalList[*VisibleInterval], start int64, stop int64) (garbageFileId []string) {
|
||||||
|
for x := visibles.Front(); x != nil; x = x.Next {
|
||||||
|
interval := x.Value
|
||||||
|
offset := interval.start - interval.offsetInChunk
|
||||||
|
if start <= offset && offset+int64(interval.chunkSize) <= stop {
|
||||||
|
garbageFileId = append(garbageFileId, interval.fileId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func MinusChunks(lookupFileIdFn wdclient.LookupFileIdFunctionType, as, bs []*filer_pb.FileChunk) (delta []*filer_pb.FileChunk, err error) {
|
func MinusChunks(lookupFileIdFn wdclient.LookupFileIdFunctionType, as, bs []*filer_pb.FileChunk) (delta []*filer_pb.FileChunk, err error) {
|
||||||
|
|
||||||
aData, aMeta, aErr := ResolveChunkManifest(lookupFileIdFn, as, 0, math.MaxInt64)
|
aData, aMeta, aErr := ResolveChunkManifest(lookupFileIdFn, as, 0, math.MaxInt64)
|
||||||
|
|
Loading…
Reference in a new issue