From 71dea30d447bc7d9fb0655ba1e41096122c78c80 Mon Sep 17 00:00:00 2001 From: "cai.zhang" Date: Mon, 30 Dec 2024 22:44:39 +0800 Subject: [PATCH] fix: [2.5] Release lock when return function (#38863) issue: #38851 master pr: #38856 Signed-off-by: Cai Zhang --- internal/datacoord/compaction.go | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/internal/datacoord/compaction.go b/internal/datacoord/compaction.go index c1f58b94d414d..0fe51c6496efe 100644 --- a/internal/datacoord/compaction.go +++ b/internal/datacoord/compaction.go @@ -212,12 +212,6 @@ func (c *compactionPlanHandler) schedule() []CompactionTask { slots map[int64]int64 ) - c.executingGuard.Lock() - if len(c.executingTasks) >= parallelism { - return selected - } - c.executingGuard.Unlock() - l0ChannelExcludes := typeutil.NewSet[string]() mixChannelExcludes := typeutil.NewSet[string]() clusterChannelExcludes := typeutil.NewSet[string]() @@ -225,6 +219,11 @@ func (c *compactionPlanHandler) schedule() []CompactionTask { clusterLabelExcludes := typeutil.NewSet[string]() c.executingGuard.RLock() + if len(c.executingTasks) >= parallelism { + c.executingGuard.RUnlock() + return selected + } + for _, t := range c.executingTasks { switch t.GetTaskProto().GetType() { case datapb.CompactionType_Level0DeleteCompaction: