bug 12322: SWIFT, update template_zone_ref after update template to swift

status 12322: resolved fixed
This commit is contained in:
anthony 2011-12-21 11:19:21 -08:00
parent 45b5a0c2c1
commit 2d2505d449
5 changed files with 70 additions and 3 deletions

View File

@ -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) {

View File

@ -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 {

View File

@ -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);
}

View File

@ -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() {

View File

@ -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);