aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorViktor Kuzmin <kvaster@gmail.com>2023-11-17 16:45:39 +0200
committerChris Lu <chrislusf@users.noreply.github.com>2023-11-17 07:38:14 -0800
commit06e723f6295726de5a4fdc18929e50d1a4898029 (patch)
tree31eafbc00feaa39469f35500c60b728805506d6f
parent2b229e98cee862b66f9aa988e53da6b1ec79d716 (diff)
downloadseaweedfs-06e723f6295726de5a4fdc18929e50d1a4898029.tar.xz
seaweedfs-06e723f6295726de5a4fdc18929e50d1a4898029.zip
Waiting for writes to complete with acquired locks may lead to deadlock, fixes #4952
-rw-r--r--weed/mount/page_writer/upload_pipeline.go7
1 files changed, 5 insertions, 2 deletions
diff --git a/weed/mount/page_writer/upload_pipeline.go b/weed/mount/page_writer/upload_pipeline.go
index 267ea3a4c..bd7fc99dd 100644
--- a/weed/mount/page_writer/upload_pipeline.go
+++ b/weed/mount/page_writer/upload_pipeline.go
@@ -147,14 +147,17 @@ func (up *UploadPipeline) MaybeReadDataAt(p []byte, off int64, tsNs int64) (maxS
}
func (up *UploadPipeline) FlushAll() {
+ up.flushChunks()
+ up.waitForCurrentWritersToComplete()
+}
+
+func (up *UploadPipeline) flushChunks() {
up.chunksLock.Lock()
defer up.chunksLock.Unlock()
for logicChunkIndex, memChunk := range up.writableChunks {
up.moveToSealed(memChunk, logicChunkIndex)
}
-
- up.waitForCurrentWritersToComplete()
}
func (up *UploadPipeline) maybeMoveToSealed(memChunk PageChunk, logicChunkIndex LogicChunkIndex) {