diff options
| author | chrislu <chris.lu@gmail.com> | 2022-01-23 23:02:05 -0800 |
|---|---|---|
| committer | chrislu <chris.lu@gmail.com> | 2022-01-23 23:02:05 -0800 |
| commit | 3bba2124ef346e90f6f2b5378ad6ce63c7f2226e (patch) | |
| tree | 6e7660d70240685f4f82149f526e0efef370011e /weed/filesys/page_writer/upload_pipeline.go | |
| parent | 520591e6ea825fcf33bb3dcfe40d0d1daf312389 (diff) | |
| download | seaweedfs-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.go | 14 |
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 } |
