mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-11-04 00:02:37 +01:00 
			
		
		
		
	bug 12322: SWIFT, update template_zone_ref after update template to swift
status 12322: resolved fixed
This commit is contained in:
		
							parent
							
								
									45b5a0c2c1
								
							
						
					
					
						commit
						2d2505d449
					
				@ -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) {
 | 
			
		||||
 | 
			
		||||
@ -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 {
 | 
			
		||||
 | 
			
		||||
@ -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);
 | 
			
		||||
}
 | 
			
		||||
@ -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<DataCenterVO> 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<Long> tmpltIds = new ArrayList<Long>();
 | 
			
		||||
        List<VMTemplateSwiftVO> 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() {
 | 
			
		||||
 | 
			
		||||
@ -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);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user