fix: batch cache image (#22313)

Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
This commit is contained in:
Jian Qiu
2025-03-21 17:44:43 +08:00
committed by GitHub
co-authored by Qiu Jian
parent f9c2d3c187
commit 79ae3be805
2 changed files with 22 additions and 12 deletions
+6 -12
View File
@@ -582,18 +582,12 @@ func (manager *SCachedimageManager) PerformCacheImage(
if err != nil {
return nil, errors.Wrap(err, "FetchStoragecachesByFilters")
}
errs := make([]error, 0)
for i := range storageCaches {
err := storageCaches[i].StartImageCacheTask(ctx, userCred, api.CacheImageInput{
ImageId: cimg.Id,
PreCache: true,
})
if err != nil {
errs = append(errs, err)
}
}
if len(errs) > 0 {
return nil, errors.Wrap(errors.NewAggregate(errs), "StartImageCacheTask")
err = StoragecacheManager.StartImageCacheTask(ctx, userCred, storageCaches, api.CacheImageInput{
ImageId: cimg.Id,
PreCache: true,
})
if err != nil {
return nil, errors.Wrap(err, "StoragecacheManager.StartImageCacheTask")
}
}
+16
View File
@@ -393,6 +393,22 @@ func (sc *SStoragecache) getCachedImageSize() int64 {
return size
}
func (manager *SStoragecacheManager) StartImageCacheTask(ctx context.Context, userCred mcclient.TokenCredential, scs []SStoragecache, input api.CacheImageInput) error {
objs := make([]db.IStandaloneModel, len(scs))
inputs := make([]api.CacheImageInput, len(scs))
for i := range scs {
objs[i] = &scs[i]
inputs[i] = input
}
params := jsonutils.NewDict()
params.Add(jsonutils.Marshal(inputs), "params")
task, err := taskman.TaskManager.NewParallelTask(ctx, "StorageBatchCacheImageTask", objs, userCred, params, input.ParentTaskId, "", nil)
if err != nil {
return errors.Wrapf(err, "NewParallelTask")
}
return task.ScheduleRun(nil)
}
func (sc *SStoragecache) StartImageCacheTask(ctx context.Context, userCred mcclient.TokenCredential, input api.CacheImageInput) error {
StoragecachedimageManager.Register(ctx, userCred, sc.Id, input.ImageId, "")