fix(region): avoid duplicate cachedimage insert (#19255)

This commit is contained in:
屈轩
2024-01-15 18:30:44 +08:00
committed by GitHub
parent 3c6da1faac
commit cef7656187
+8 -4
View File
@@ -1262,10 +1262,14 @@ func (self *SCloudregion) GetStoragecaches() ([]SStoragecache, error) {
}
func (self *SCloudregion) newCloudimage(ctx context.Context, userCred mcclient.TokenCredential, iImage SCachedimage) error {
_, err := db.FetchByExternalId(CachedimageManager, iImage.GetGlobalId())
externalId := iImage.GetGlobalId()
lockman.LockRawObject(ctx, CachedimageManager.Keyword(), externalId)
defer lockman.ReleaseRawObject(ctx, CachedimageManager.Keyword(), externalId)
_, err := db.FetchByExternalId(CachedimageManager, externalId)
if err != nil {
if errors.Cause(err) != sql.ErrNoRows {
return errors.Wrapf(err, "db.FetchModelObjects(%s)", iImage.GetGlobalId())
return errors.Wrapf(err, "db.FetchModelObjects(%s)", externalId)
}
image := &iImage
image.SetModelManager(CachedimageManager, image)
@@ -1274,7 +1278,7 @@ func (self *SCloudregion) newCloudimage(ctx context.Context, userCred mcclient.T
return err
}
skuUrl := self.getMetaUrl(meta.ImageBase, iImage.GetGlobalId())
skuUrl := self.getMetaUrl(meta.ImageBase, externalId)
err = meta.Get(skuUrl, image)
if err != nil {
return errors.Wrapf(err, "Get")
@@ -1291,7 +1295,7 @@ func (self *SCloudregion) newCloudimage(ctx context.Context, userCred mcclient.T
cloudimage.SetModelManager(CloudimageManager, cloudimage)
cloudimage.Name = iImage.Name
cloudimage.CloudregionId = self.Id
cloudimage.ExternalId = iImage.GetGlobalId()
cloudimage.ExternalId = externalId
err = CloudimageManager.TableSpec().Insert(ctx, cloudimage)
if err != nil {
return errors.Wrapf(err, "Insert cloudimage")