From 79ae3be8051c19c64733c6e7083c38254f188af6 Mon Sep 17 00:00:00 2001 From: Jian Qiu Date: Fri, 21 Mar 2025 17:44:43 +0800 Subject: [PATCH] fix: batch cache image (#22313) Co-authored-by: Qiu Jian --- pkg/compute/models/cachedimages.go | 18 ++++++------------ pkg/compute/models/storagecaches.go | 16 ++++++++++++++++ 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/pkg/compute/models/cachedimages.go b/pkg/compute/models/cachedimages.go index d9d9197656..42ecf65b7c 100644 --- a/pkg/compute/models/cachedimages.go +++ b/pkg/compute/models/cachedimages.go @@ -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") } } diff --git a/pkg/compute/models/storagecaches.go b/pkg/compute/models/storagecaches.go index 31b8ae49f3..273f63e845 100644 --- a/pkg/compute/models/storagecaches.go +++ b/pkg/compute/models/storagecaches.go @@ -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, "")