diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index 57a253ebc84..4365f9f192c 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -102,7 +102,6 @@ import com.cloud.exception.PermissionDeniedException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; -import com.cloud.host.dao.HostDetailsDao; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.network.Network; import com.cloud.network.Network.Capability; @@ -136,6 +135,7 @@ import com.cloud.storage.SwiftVO; import com.cloud.storage.dao.DiskOfferingDao; import com.cloud.storage.dao.SwiftDao; import com.cloud.storage.secondary.SecondaryStorageVmManager; +import com.cloud.storage.swift.SwiftManager; import com.cloud.test.IPRangeConfig; import com.cloud.user.Account; import com.cloud.user.AccountManager; @@ -233,6 +233,8 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura NetworkOfferingServiceMapDao _ntwkOffServiceMapDao; @Inject PhysicalNetworkDao _physicalNetworkDao; + @Inject + SwiftManager _swiftMgr; // FIXME - why don't we have interface for DataCenterLinkLocalIpAddressDao? protected static final DataCenterLinkLocalIpAddressDaoImpl _LinkLocalIpAllocDao = ComponentLocator.inject(DataCenterLinkLocalIpAddressDaoImpl.class); @@ -1467,6 +1469,8 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura // Create deafult networks createDefaultNetworks(zone.getId(), isSecurityGroupEnabled, physicalNetworkId); + + _swiftMgr.propagateSwiftTmplteOnZone(zone.getId()); txn.commit(); return zone; } catch (Exception ex) { diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageListener.java b/server/src/com/cloud/storage/secondary/SecondaryStorageListener.java index dfd6b46403d..260de86dd39 100755 --- a/server/src/com/cloud/storage/secondary/SecondaryStorageListener.java +++ b/server/src/com/cloud/storage/secondary/SecondaryStorageListener.java @@ -28,10 +28,8 @@ import com.cloud.agent.api.Command; import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StartupSecondaryStorageCommand; import com.cloud.agent.api.StartupStorageCommand; -import com.cloud.cluster.ManagementServerNode; import com.cloud.host.HostVO; import com.cloud.host.Status; -import com.cloud.host.Status.Event; import com.cloud.storage.Storage; public class SecondaryStorageListener implements Listener { diff --git a/server/src/com/cloud/storage/swift/SwiftManager.java b/server/src/com/cloud/storage/swift/SwiftManager.java index 02e5fe18323..6262219021d 100644 --- a/server/src/com/cloud/storage/swift/SwiftManager.java +++ b/server/src/com/cloud/storage/swift/SwiftManager.java @@ -46,4 +46,8 @@ public interface SwiftManager extends Manager { void deleteIso(DeleteIsoCmd cmd); void deleteTemplate(DeleteTemplateCmd cmd); + + void propagateTemplateOnAllZones(Long tmpltId); + + void propagateSwiftTmplteOnZone(Long zoneId); } \ No newline at end of file diff --git a/server/src/com/cloud/storage/swift/SwiftManagerImpl.java b/server/src/com/cloud/storage/swift/SwiftManagerImpl.java index 5fd4d4835b4..49924537b14 100644 --- a/server/src/com/cloud/storage/swift/SwiftManagerImpl.java +++ b/server/src/com/cloud/storage/swift/SwiftManagerImpl.java @@ -24,6 +24,9 @@ package com.cloud.storage.swift; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; import java.util.Map; import javax.ejb.Local; @@ -40,11 +43,15 @@ import com.cloud.api.commands.DeleteIsoCmd; import com.cloud.api.commands.DeleteTemplateCmd; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; +import com.cloud.dc.DataCenterVO; +import com.cloud.dc.dao.DataCenterDao; import com.cloud.exception.DiscoveryException; import com.cloud.storage.SwiftVO; import com.cloud.storage.VMTemplateSwiftVO; +import com.cloud.storage.VMTemplateZoneVO; import com.cloud.storage.dao.SwiftDao; import com.cloud.storage.dao.VMTemplateSwiftDao; +import com.cloud.storage.dao.VMTemplateZoneDao; import com.cloud.utils.component.Inject; import com.cloud.utils.db.SearchCriteria.Op; import com.cloud.utils.db.SearchCriteria2; @@ -68,6 +75,10 @@ public class SwiftManagerImpl implements SwiftManager { private ConfigurationDao _configDao; @Inject private AgentManager _agentMgr; + @Inject + DataCenterDao _dcDao; + @Inject + VMTemplateZoneDao _vmTmpltZoneDao; @Override public SwiftTO getSwiftTO(Long swiftId) { @@ -172,6 +183,55 @@ public class SwiftManagerImpl implements SwiftManager { } } + @Override + public void propagateTemplateOnAllZones(Long tmpltId) { + String msg; + SwiftTO swift = getSwiftTO(); + if (swift == null) { + msg = "There is no Swift in this setup"; + s_logger.trace(msg); + return; + } + VMTemplateSwiftVO tmpltSwiftRef = _vmTmpltSwiftlDao.findOneByTemplateId(tmpltId); + if (tmpltSwiftRef != null) { + List dcs = _dcDao.listAll(); + for (DataCenterVO dc : dcs) { + VMTemplateZoneVO tmpltZoneVO = new VMTemplateZoneVO(dc.getId(), tmpltId, new Date()); + try { + _vmTmpltZoneDao.persist(tmpltZoneVO); + } catch (Exception e) { + } + } + } + } + + @Override + public void propagateSwiftTmplteOnZone(Long zoneId) { + String msg; + SwiftTO swift = getSwiftTO(); + if (swift == null) { + msg = "There is no Swift in this setup"; + s_logger.trace(msg); + return; + } + List tmpltIds = new ArrayList(); + List tmpltSwiftRefs = _vmTmpltSwiftlDao.listAll(); + if (tmpltSwiftRefs == null) { + return; + } + for (VMTemplateSwiftVO tmpltSwiftRef : tmpltSwiftRefs) { + Long tmpltId = tmpltSwiftRef.getTemplateId(); + if (!tmpltIds.contains(tmpltId)) { + tmpltIds.add(tmpltId); + VMTemplateZoneVO tmpltZoneVO = new VMTemplateZoneVO(zoneId, tmpltId, new Date()); + try { + _vmTmpltZoneDao.persist(tmpltZoneVO); + } catch (Exception e) { + } + } + } + } + @Override public boolean stop() { diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java b/server/src/com/cloud/template/TemplateManagerImpl.java index 7ae41eecbd2..aeb60de2007 100755 --- a/server/src/com/cloud/template/TemplateManagerImpl.java +++ b/server/src/com/cloud/template/TemplateManagerImpl.java @@ -549,6 +549,7 @@ public class TemplateManagerImpl implements TemplateManager, Manager, TemplateSe } VMTemplateSwiftVO tmpltSwift = new VMTemplateSwiftVO(swift.getId(), templateHostRef.getTemplateId(), new Date(), templateHostRef.getSize(), templateHostRef.getPhysicalSize()); _tmpltSwiftDao.persist(tmpltSwift); + _swiftMgr.propagateTemplateOnAllZones(templateHostRef.getTemplateId()); } catch (Exception e) { String errMsg = "Failed to upload template " + templateId + " to Swift from secondary storage due to " + e.toString(); s_logger.warn(errMsg);