From bc244ccc8bae28eaca93558eb25ce68829f54650 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Sun, 5 May 2013 19:21:09 -0700 Subject: [PATCH] Populate template_zone_ref for those cross-zone templates while adding an image store. --- .../com/cloud/storage/StorageManagerImpl.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index 798ee56a84d..9f5d2fe80cf 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -25,6 +25,7 @@ import java.sql.ResultSet; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -147,6 +148,7 @@ import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VMTemplatePoolDao; import com.cloud.storage.dao.VMTemplateS3Dao; import com.cloud.storage.dao.VMTemplateSwiftDao; +import com.cloud.storage.dao.VMTemplateZoneDao; import com.cloud.storage.dao.VolumeDao; import com.cloud.storage.listener.StoragePoolMonitor; import com.cloud.storage.listener.VolumeStateListener; @@ -222,6 +224,8 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C @Inject protected VMTemplatePoolDao _vmTemplatePoolDao = null; @Inject + protected VMTemplateZoneDao _vmTemplateZoneDao; + @Inject protected VMTemplateSwiftDao _vmTemplateSwiftDao = null; @Inject protected VMTemplateS3Dao _vmTemplateS3Dao; @@ -1925,9 +1929,41 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C this._imageSrv.addSystemVMTemplatesToSecondary(store); } + // associate builtin template with zones associated with this image store + this.associateCrosszoneTemplatesToZone(dcId); + return (ImageStore) _dataStoreMgr.getDataStore(store.getId(), DataStoreRole.Image); } + private void associateCrosszoneTemplatesToZone(Long zoneId){ + VMTemplateZoneVO tmpltZone; + + List allTemplates = _vmTemplateDao.listAll(); + List dcIds = new ArrayList(); + if (zoneId != null) { + dcIds.add(zoneId); + } else { + List dcs = _dcDao.listAll(); + if (dcs != null) { + for (DataCenterVO dc : dcs) { + dcIds.add(dc.getId()); + } + } + } + + for (VMTemplateVO vt : allTemplates) { + if (vt.isCrossZones()) { + for (Long dcId : dcIds) { + tmpltZone = _vmTemplateZoneDao.findByZoneTemplate(dcId, vt.getId()); + if (tmpltZone == null) { + VMTemplateZoneVO vmTemplateZone = new VMTemplateZoneVO(dcId, vt.getId(), new Date()); + _vmTemplateZoneDao.persist(vmTemplateZone); + } + } + } + } + } + @Override public boolean deleteImageStore(DeleteImageStoreCmd cmd) { long storeId = cmd.getId();