diff --git a/pkg/cloudcommon/db/db_dispatcher.go b/pkg/cloudcommon/db/db_dispatcher.go index 99131be15a..09f1e5cc6d 100644 --- a/pkg/cloudcommon/db/db_dispatcher.go +++ b/pkg/cloudcommon/db/db_dispatcher.go @@ -1220,6 +1220,12 @@ func (dispatcher *DBModelDispatcher) Create(ctx context.Context, query jsonutils model, err := DoCreate(dispatcher.modelManager, ctx, userCred, query, data, ownerId) if err != nil { // log.Errorf("fail to doCreateItem %s", err) + if CancelPendingUsagesInContext != nil { + err := CancelPendingUsagesInContext(ctx, userCred) + if err != nil { + log.Errorf("CancelPendingUsagesInContext fail %s", err) + } + } failErr := manager.OnCreateFailed(ctx, userCred, ownerId, query, data) if failErr != nil { log.Errorf("manager.OnCreateFailed %s", failErr) @@ -1412,6 +1418,19 @@ func managerPerformCheckCreateData( return nil, httperrors.NewForbiddenError("not allow to perform %s", action) } + if InitPendingUsagesInContext != nil { + ctx = InitPendingUsagesInContext(ctx) + + defer func() { + if CancelPendingUsagesInContext != nil { + err := CancelPendingUsagesInContext(ctx, userCred) + if err != nil { + log.Errorf("CancelPendingUsagesInContext fail %s", err) + } + } + }() + } + return ValidateCreateData(manager, ctx, userCred, ownerId, query, bodyDict) } diff --git a/pkg/cloudcommon/db/modelbase.go b/pkg/cloudcommon/db/modelbase.go index 477457744c..7d5903f25c 100644 --- a/pkg/cloudcommon/db/modelbase.go +++ b/pkg/cloudcommon/db/modelbase.go @@ -417,12 +417,6 @@ func (manager *SModelBaseManager) BatchCreateValidateCreateData(ctx context.Cont } func (manager *SModelBaseManager) OnCreateFailed(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data jsonutils.JSONObject) error { - if CancelPendingUsagesInContext != nil { - err := CancelPendingUsagesInContext(ctx, userCred) - if err != nil { - return errors.Wrap(err, "CancelPendingUsagesInContext") - } - } return nil }