diff --git a/pkg/cloudcommon/db/db_dispatcher.go b/pkg/cloudcommon/db/db_dispatcher.go index 9d50b19e01..a1c877f019 100644 --- a/pkg/cloudcommon/db/db_dispatcher.go +++ b/pkg/cloudcommon/db/db_dispatcher.go @@ -1155,6 +1155,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) @@ -1347,6 +1353,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 104228725f..f41549d80e 100644 --- a/pkg/cloudcommon/db/modelbase.go +++ b/pkg/cloudcommon/db/modelbase.go @@ -391,12 +391,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 }