mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
fix: 优化同步,避免长时间加锁
This commit is contained in:
@@ -1204,8 +1204,11 @@ func _doCreateItem(
|
||||
generateName, _ = dataDict.GetString("generate_name")
|
||||
if len(generateName) > 0 {
|
||||
if manager.EnableGenerateName() {
|
||||
lockman.LockRawObject(ctx, manager.Keyword(), "name")
|
||||
defer lockman.ReleaseRawObject(ctx, manager.Keyword(), "name")
|
||||
|
||||
// if enable generateName, alway generate name
|
||||
newName, err := GenerateName2(manager, ownerId, generateName, nil, baseIndex)
|
||||
newName, err := GenerateName2(ctx, manager, ownerId, generateName, nil, baseIndex)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "GenerateName2")
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"regexp"
|
||||
|
||||
@@ -111,18 +112,18 @@ func alterNameValidator(model IModel, name string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func GenerateName(manager IModelManager, ownerId mcclient.IIdentityProvider, hint string) (string, error) {
|
||||
return GenerateName2(manager, ownerId, hint, nil, 1)
|
||||
func GenerateName(ctx context.Context, manager IModelManager, ownerId mcclient.IIdentityProvider, hint string) (string, error) {
|
||||
return GenerateName2(ctx, manager, ownerId, hint, nil, 1)
|
||||
}
|
||||
|
||||
func GenerateAlterName(model IModel, hint string) (string, error) {
|
||||
if hint == model.GetName() {
|
||||
return hint, nil
|
||||
}
|
||||
return GenerateName2(nil, nil, hint, model, 1)
|
||||
return GenerateName2(nil, nil, nil, hint, model, 1)
|
||||
}
|
||||
|
||||
func GenerateName2(manager IModelManager, ownerId mcclient.IIdentityProvider, hint string, model IModel, baseIndex int) (string, error) {
|
||||
func GenerateName2(ctx context.Context, manager IModelManager, ownerId mcclient.IIdentityProvider, hint string, model IModel, baseIndex int) (string, error) {
|
||||
_, pattern, patternLen, offset := stringutils2.ParseNamePattern2(hint)
|
||||
var name string
|
||||
if patternLen == 0 {
|
||||
|
||||
@@ -492,12 +492,12 @@ func (model *SVirtualResourceBase) MarkCancelPendingDelete(ctx context.Context,
|
||||
manager := model.GetModelManager()
|
||||
ownerId := model.GetOwnerId()
|
||||
|
||||
lockman.LockClass(ctx, manager, GetLockClassKey(manager, ownerId))
|
||||
defer lockman.ReleaseClass(ctx, manager, GetLockClassKey(manager, ownerId))
|
||||
lockman.LockRawObject(ctx, manager.Keyword(), "name")
|
||||
defer lockman.ReleaseRawObject(ctx, manager.Keyword(), "name")
|
||||
|
||||
newName, err := GenerateName(manager, ownerId, model.Name)
|
||||
newName, err := GenerateName(ctx, manager, ownerId, model.Name)
|
||||
if err != nil {
|
||||
return err
|
||||
return errors.Wrapf(err, "GenerateNam")
|
||||
}
|
||||
diff, err := Update(model, func() error {
|
||||
model.Name = newName
|
||||
@@ -506,8 +506,7 @@ func (model *SVirtualResourceBase) MarkCancelPendingDelete(ctx context.Context,
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
log.Errorf("MarkCancelPendingDelete fail %s", err)
|
||||
return err
|
||||
return errors.Wrapf(err, "MarkCancelPendingDelete.Update")
|
||||
}
|
||||
OpsLog.LogEvent(model, ACT_CANCEL_DELETE, diff, userCred)
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user