From 6e259b2cb13797f9cd2c3eab87bdce9852fa42bf Mon Sep 17 00:00:00 2001 From: anthony Date: Fri, 23 Dec 2011 15:45:03 -0800 Subject: [PATCH] SWIFT : check swift in storage allocator --- .../allocator/AbstractStoragePoolAllocator.java | 14 +++++++++++++- .../src/com/cloud/storage/swift/SwiftManager.java | 3 +++ .../com/cloud/storage/swift/SwiftManagerImpl.java | 4 ++++ .../com/cloud/template/TemplateManagerImpl.java | 2 +- 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/server/src/com/cloud/storage/allocator/AbstractStoragePoolAllocator.java b/server/src/com/cloud/storage/allocator/AbstractStoragePoolAllocator.java index 88bc676cafd..770d14674fb 100755 --- a/server/src/com/cloud/storage/allocator/AbstractStoragePoolAllocator.java +++ b/server/src/com/cloud/storage/allocator/AbstractStoragePoolAllocator.java @@ -46,6 +46,7 @@ import com.cloud.storage.VMTemplateHostVO; import com.cloud.storage.VMTemplateStoragePoolVO; import com.cloud.storage.VMTemplateStorageResourceAssoc; import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; +import com.cloud.storage.VMTemplateSwiftVO; import com.cloud.storage.VMTemplateVO; import com.cloud.storage.Volume.Type; import com.cloud.storage.dao.StoragePoolDao; @@ -54,6 +55,7 @@ import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VMTemplateHostDao; import com.cloud.storage.dao.VMTemplatePoolDao; import com.cloud.storage.dao.VolumeDao; +import com.cloud.storage.swift.SwiftManager; import com.cloud.template.TemplateManager; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; @@ -75,6 +77,8 @@ public abstract class AbstractStoragePoolAllocator extends AdapterBase implement @Inject StoragePoolHostDao _poolHostDao; @Inject ConfigurationDao _configDao; @Inject ClusterDao _clusterDao; + @Inject + SwiftManager _swiftMgr; float _storageOverprovisioningFactor; long _extraBytesPerVolume = 0; Random _rand; @@ -238,7 +242,15 @@ public abstract class AbstractStoragePoolAllocator extends AdapterBase implement VMTemplateHostVO templateHostVO = _storageMgr.findVmTemplateHost(template.getId(), pool); if (templateHostVO == null) { - s_logger.info("Did not find template downloaded on secondary hosts in zone " + plan.getDataCenterId()); + VMTemplateSwiftVO templateSwiftVO = _swiftMgr.findByTmpltId(template.getId()); + if (templateSwiftVO == null) { + s_logger.info("Did not find template downloaded on secondary hosts in zone " + plan.getDataCenterId()); + } + long templateSize = templateSwiftVO.getPhysicalSize(); + if (templateSize == 0) { + templateSize = templateSwiftVO.getSize(); + } + totalAllocatedSize += (templateSize + _extraBytesPerVolume); return false; } else { long templateSize = templateHostVO.getPhysicalSize(); diff --git a/server/src/com/cloud/storage/swift/SwiftManager.java b/server/src/com/cloud/storage/swift/SwiftManager.java index de7797c59f8..61f23096386 100644 --- a/server/src/com/cloud/storage/swift/SwiftManager.java +++ b/server/src/com/cloud/storage/swift/SwiftManager.java @@ -34,6 +34,7 @@ import com.cloud.api.commands.ListSwiftsCmd; import com.cloud.exception.DiscoveryException; import com.cloud.storage.Swift; import com.cloud.storage.SwiftVO; +import com.cloud.storage.VMTemplateSwiftVO; import com.cloud.utils.component.Manager; public interface SwiftManager extends Manager { @@ -58,4 +59,6 @@ public interface SwiftManager extends Manager { Long chooseZoneForTmpltExtract(Long tmpltId); List listSwifts(ListSwiftsCmd cmd); + + VMTemplateSwiftVO findByTmpltId(Long tmpltId); } diff --git a/server/src/com/cloud/storage/swift/SwiftManagerImpl.java b/server/src/com/cloud/storage/swift/SwiftManagerImpl.java index 415dfb11e88..75daa6e3d9f 100644 --- a/server/src/com/cloud/storage/swift/SwiftManagerImpl.java +++ b/server/src/com/cloud/storage/swift/SwiftManagerImpl.java @@ -278,6 +278,10 @@ public class SwiftManagerImpl implements SwiftManager { } + @Override + public VMTemplateSwiftVO findByTmpltId(Long tmpltId) { + return _vmTmpltSwiftlDao.findOneByTemplateId(tmpltId); + } @Override public boolean stop() { diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java b/server/src/com/cloud/template/TemplateManagerImpl.java index bea8cc0c321..fe0297f7aa7 100755 --- a/server/src/com/cloud/template/TemplateManagerImpl.java +++ b/server/src/com/cloud/template/TemplateManagerImpl.java @@ -475,7 +475,7 @@ public class TemplateManagerImpl implements TemplateManager, Manager, TemplateSe s_logger.warn(errMsg); return errMsg; } - VMTemplateSwiftVO tmpltSwift = _tmpltSwiftDao.findOneByTemplateId(templateId); + VMTemplateSwiftVO tmpltSwift = _swiftMgr.findByTmpltId(templateId); if ( tmpltSwift == null ) { String errMsg = " Template " + templateId + " doesn't exist in swift"; s_logger.warn(errMsg);