From f2d77ad4871cebb18995e8dbe20b61946843fcbc Mon Sep 17 00:00:00 2001 From: Jian Qiu Date: Fri, 29 Aug 2025 23:08:07 +0800 Subject: [PATCH] fix: too many recursive locks when batch create (#23198) Co-authored-by: Qiu Jian --- pkg/cloudcommon/db/db_dispatcher.go | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/pkg/cloudcommon/db/db_dispatcher.go b/pkg/cloudcommon/db/db_dispatcher.go index 341e081b06..81f71fe571 100644 --- a/pkg/cloudcommon/db/db_dispatcher.go +++ b/pkg/cloudcommon/db/db_dispatcher.go @@ -1572,17 +1572,20 @@ func (dispatcher *DBModelDispatcher) BatchCreate(ctx context.Context, query json results := make([]printutils.SubmitResult, count) models := make([]IModel, 0) - for i, res := range createResults { + for i := range createResults { + res := createResults[i] result := printutils.SubmitResult{} if res.err != nil { jsonErr := httperrors.NewGeneralError(res.err) result.Status = jsonErr.Code result.Data = jsonutils.Marshal(jsonErr) } else { - lockman.LockObject(ctx, res.model) - defer lockman.ReleaseObject(ctx, res.model) + func() { + lockman.LockObject(ctx, res.model) + defer lockman.ReleaseObject(ctx, res.model) - res.model.PostCreate(ctx, userCred, ownerId, query, data) + res.model.PostCreate(ctx, userCred, ownerId, query, data) + }() models = append(models, res.model) body, err := getItemDetails(manager, res.model, ctx, userCred, query) @@ -1597,10 +1600,12 @@ func (dispatcher *DBModelDispatcher) BatchCreate(ctx context.Context, query json results[i] = result } if len(models) > 0 { - lockman.LockClass(ctx, manager, GetLockClassKey(manager, ownerId)) - defer lockman.ReleaseClass(ctx, manager, GetLockClassKey(manager, ownerId)) + func() { + lockman.LockClass(ctx, manager, GetLockClassKey(manager, ownerId)) + defer lockman.ReleaseClass(ctx, manager, GetLockClassKey(manager, ownerId)) - manager.OnCreateComplete(ctx, models, userCred, ownerId, query, multiData) + manager.OnCreateComplete(ctx, models, userCred, ownerId, query, multiData) + }() } return results, nil }