aboutsummaryrefslogtreecommitdiff
path: root/weed/filesys/page_writer/upload_pipeline.go
diff options
context:
space:
mode:
authorchrislu <chris.lu@gmail.com>2022-01-23 23:02:05 -0800
committerchrislu <chris.lu@gmail.com>2022-01-23 23:02:05 -0800
commit3bba2124ef346e90f6f2b5378ad6ce63c7f2226e (patch)
tree6e7660d70240685f4f82149f526e0efef370011e /weed/filesys/page_writer/upload_pipeline.go
parent520591e6ea825fcf33bb3dcfe40d0d1daf312389 (diff)
downloadseaweedfs-3bba2124ef346e90f6f2b5378ad6ce63c7f2226e.tar.xz
seaweedfs-3bba2124ef346e90f6f2b5378ad6ce63c7f2226e.zip
use a sliding window of in-memory writable chunks
Diffstat (limited to 'weed/filesys/page_writer/upload_pipeline.go')
-rw-r--r--weed/filesys/page_writer/upload_pipeline.go14
1 files changed, 11 insertions, 3 deletions
diff --git a/weed/filesys/page_writer/upload_pipeline.go b/weed/filesys/page_writer/upload_pipeline.go
index 47693c235..65b41e9fa 100644
--- a/weed/filesys/page_writer/upload_pipeline.go
+++ b/weed/filesys/page_writer/upload_pipeline.go
@@ -65,10 +65,18 @@ func (up *UploadPipeline) SaveDataAt(p []byte, off int64) (n int) {
if len(up.writableChunks) < 16 {
memChunk = NewMemChunk(logicChunkIndex, up.ChunkSize)
} else {
- memChunk = up.swapFile.NewTempFileChunk(logicChunkIndex)
- if memChunk == nil {
- memChunk = NewMemChunk(logicChunkIndex, up.ChunkSize)
+ fullestChunkIndex, fullness := LogicChunkIndex(-1), int64(0)
+ for lci, mc := range up.writableChunks {
+ chunkFullness := mc.WrittenSize()
+ if fullness < chunkFullness {
+ fullestChunkIndex = lci
+ fullness = chunkFullness
+ }
}
+ up.moveToSealed(up.writableChunks[fullestChunkIndex], fullestChunkIndex)
+ delete(up.writableChunks, fullestChunkIndex)
+ fmt.Printf("flush chunk %d with %d bytes written", logicChunkIndex, fullness)
+ memChunk = NewMemChunk(logicChunkIndex, up.ChunkSize)
}
up.writableChunks[logicChunkIndex] = memChunk
}