Skip to content

Commit

Permalink
fix: clean pending usage caused by pre-validate-create-data
Browse files Browse the repository at this point in the history
  • Loading branch information
Qiu Jian committed Apr 22, 2020
1 parent 5d4f7ea commit 2297c6e
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 6 deletions.
19 changes: 19 additions & 0 deletions pkg/cloudcommon/db/db_dispatcher.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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)
}

Expand Down
6 changes: 0 additions & 6 deletions pkg/cloudcommon/db/modelbase.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand Down

0 comments on commit 2297c6e

Please sign in to comment.