From 3e10786e0cd691a42d50273210819af8f9a2d651 Mon Sep 17 00:00:00 2001 From: Rain Date: Fri, 3 Apr 2020 14:30:31 +0800 Subject: [PATCH] fix(esxi): Fix some question of CheckAndSetCacheImage. 1. If there is storagecachedimage in this host's storagecache, use is instead of another host's one. 2. SrcStorage should be found from srcHost instead host. --- pkg/compute/hostdrivers/esxi.go | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/pkg/compute/hostdrivers/esxi.go b/pkg/compute/hostdrivers/esxi.go index c2bc546dad..82d0e8ce05 100644 --- a/pkg/compute/hostdrivers/esxi.go +++ b/pkg/compute/hostdrivers/esxi.go @@ -62,10 +62,17 @@ func (self *SESXiHostDriver) CheckAndSetCacheImage(ctx context.Context, host *mo return err } cacheImage := obj.(*models.SCachedimage) - srcHostCacheImage, err := cacheImage.ChooseSourceStoragecacheInRange(api.HOST_TYPE_ESXI, []string{host.Id}, - []interface{}{host.GetZone(), host.GetCloudprovider()}) - if err != nil { - return err + var srcHostCacheImage *models.SStoragecachedimage + // Check if storageCache has this cacheImage. + // If no, choose source storage cache + // else, use it + hostCacheImage := models.StoragecachedimageManager.GetStoragecachedimage(storageCache.GetId(), cacheImage.GetId()) + if hostCacheImage == nil { + srcHostCacheImage, err = cacheImage.ChooseSourceStoragecacheInRange(api.HOST_TYPE_ESXI, []string{host.Id}, + []interface{}{host.GetZone(), host.GetCloudprovider()}) + if err != nil { + return err + } } type contentStruct struct { @@ -136,7 +143,7 @@ func (self *SESXiHostDriver) CheckAndSetCacheImage(ctx context.Context, host *mo if err != nil { return errors.Wrap(err, "StorageCacheImage.GetStoragecaceh") } - srcStorage := host.GetStorageByFilePath(srcStorageCache.Path) + srcStorage := srcHost.GetStorageByFilePath(srcStorageCache.Path) accessInfo, err := srcHost.GetCloudaccount().GetVCenterAccessInfo(srcStorage.ExternalId) if err != nil { return err