aboutsummaryrefslogtreecommitdiff
path: root/weed/filesys/page_writer/upload_pipeline.go
diff options
context:
space:
mode:
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
}