bug 4286: Extract functionality - code cleanup

This commit is contained in:
nit 2010-09-21 13:36:57 +05:30
parent 33e683e2c7
commit 7ff551bd5c
12 changed files with 141 additions and 187 deletions

7
core/src/com/cloud/agent/api/storage/UploadAnswer.java Normal file → Executable file
View File

@ -38,8 +38,11 @@ public class UploadAnswer extends Answer {
protected UploadAnswer() {
}
public String getJobId() {
public void setErrorString(String errorString) {
this.errorString = errorString;
}
public String getJobId() {
return jobId;
}
public void setJobId(String jobId) {

2
core/src/com/cloud/storage/Upload.java Normal file → Executable file
View File

@ -2,6 +2,6 @@ package com.cloud.storage;
public interface Upload {
public static enum Status {UNKNOWN, ABANDONED, UPLOADED, NOT_UPLOADED, UPLOAD_ERROR, UPLOAD_IN_PROGRESS}
public static enum Status {UNKNOWN, ABANDONED, UPLOADED, NOT_UPLOADED, UPLOAD_ERROR, UPLOAD_IN_PROGRESS, NOT_COPIED, COPY_IN_PROGRESS, COPY_ERROR, COPY_COMPLETE}
public static enum Type {VOLUME, TEMPLATE, ISO}
}

2
core/src/com/cloud/storage/dao/UploadDao.java Normal file → Executable file
View File

@ -12,4 +12,6 @@ public interface UploadDao extends GenericDao<UploadVO, Long> {
List<UploadVO> listByTypeUploadStatus(long typeId, Type type,
Status uploadState);
List<UploadVO> listByHostAndUploadStatus(long sserverId, Status uploadInProgress);
}

View File

@ -1,27 +1,20 @@
package com.cloud.storage.dao;
import java.sql.PreparedStatement;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;
import javax.ejb.Local;
import javax.naming.ConfigurationException;
import org.apache.log4j.Logger;
import com.cloud.storage.UploadVO;
import com.cloud.utils.DateUtil;
import com.cloud.storage.Upload.Status;
import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.Transaction;
@Local(value={UploadDao.class})
public class UploadDaoImpl extends GenericDaoBase<UploadVO, Long> implements UploadDao {
public static final Logger s_logger = Logger.getLogger(UploadDaoImpl.class.getName());
protected final SearchBuilder<UploadVO> typeUploadStatusSearch;
protected final SearchBuilder<UploadVO> typeHostAndUploadStatusSearch;
protected static final String UPDATE_UPLOAD_INFO =
"UPDATE upload SET upload_state = ?, upload_pct= ?, last_updated = ? "
@ -39,6 +32,11 @@ public class UploadDaoImpl extends GenericDaoBase<UploadVO, Long> implements Upl
typeUploadStatusSearch.and("upload_state", typeUploadStatusSearch.entity().getUploadState(), SearchCriteria.Op.EQ);
typeUploadStatusSearch.and("type", typeUploadStatusSearch.entity().getType(), SearchCriteria.Op.EQ);
typeUploadStatusSearch.done();
typeHostAndUploadStatusSearch = createSearchBuilder();
typeHostAndUploadStatusSearch.and("host_id", typeHostAndUploadStatusSearch.entity().getHostId(), SearchCriteria.Op.EQ);
typeHostAndUploadStatusSearch.and("upload_state", typeHostAndUploadStatusSearch.entity().getUploadState(), SearchCriteria.Op.EQ);
typeHostAndUploadStatusSearch.done();
}
@Override
@ -49,26 +47,12 @@ public class UploadDaoImpl extends GenericDaoBase<UploadVO, Long> implements Upl
sc.setParameters("upload_state", uploadState.toString());
return listBy(sc);
}
/*
public void updateUploadStatus(long hostId, long typeId, int uploadPercent, UploadVO.Status uploadState,
String uploadJobId, String uploadUrl ) {
Transaction txn = Transaction.currentTxn();
PreparedStatement pstmt = null;
try {
Date now = new Date();
String sql = UPDATE_UPLOAD_INFO;
pstmt = txn.prepareAutoCloseStatement(sql);
pstmt.setString(1, uploadState.toString());
pstmt.setInt(2, uploadPercent);
pstmt.setString(3, DateUtil.getDateDisplayString(TimeZone.getTimeZone("GMT"), now));
pstmt.setString(4, uploadJobId);
pstmt.setLong(5, hostId);
pstmt.setLong(6, typeId);
pstmt.setString(7, uploadUrl);
pstmt.executeUpdate();
} catch (Exception e) {
s_logger.warn("Exception: ", e);
}
}*/
@Override
public List<UploadVO> listByHostAndUploadStatus(long sserverId, Status uploadState){
SearchCriteria<UploadVO> sc = typeHostAndUploadStatusSearch.create();
sc.setParameters("host_id", sserverId);
sc.setParameters("upload_state", uploadState.toString());
return listBy(sc);
}
}

View File

@ -41,7 +41,7 @@ public class ExtractIsoCmd extends BaseCmd {
throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Unable to find ISO with id " + templateId);
}
if (template.getName().startsWith("xs-tools") ){
throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Unable to extract the ISO " + template.getName() + " It is not supported yet");
throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Unable to extract the ISO " + template.getName() + " It is not allowed");
}
if (template.getFormat() != ImageFormat.ISO ){
throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Unsupported format, could not extract the ISO");

View File

@ -45,6 +45,9 @@ public class ExtractTemplateCmd extends BaseCmd {
if (template.getFormat() == ImageFormat.ISO ){
throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Unsupported format, could not extract the template");
}
if (template.getName().startsWith("SystemVM Template") ){
throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Unable to extract " + template.getName() + ". It is not allowed.");
}
if(url.toLowerCase().contains("file://")){
throw new ServerApiException(BaseCmd.PARAM_ERROR, "file:// type urls are currently unsupported");

View File

@ -9,10 +9,12 @@ import com.cloud.storage.upload.UploadState;
public class ExtractJobResultObject {
public ExtractJobResultObject(Long accountId, String typeName, UploadState currState, int i, Long uploadId){
public ExtractJobResultObject(Long accountId, String typeName, String currState, int i, Long uploadId){
this.accountId = accountId;
this.name = typeName;
this.state = currState.toString();
this.state = currState;
this.id = uploadId;
this.uploadPercent = i;
}
public ExtractJobResultObject(){

View File

@ -101,6 +101,7 @@ import com.cloud.async.executor.DeleteRuleParam;
import com.cloud.async.executor.DeleteTemplateParam;
import com.cloud.async.executor.DeployVMParam;
import com.cloud.async.executor.DisassociateIpAddressParam;
import com.cloud.async.executor.ExtractJobResultObject;
import com.cloud.async.executor.ExtractTemplateParam;
import com.cloud.async.executor.LoadBalancerParam;
import com.cloud.async.executor.NetworkGroupIngressParam;
@ -188,6 +189,7 @@ import com.cloud.serializer.GsonHelper;
import com.cloud.server.auth.UserAuthenticator;
import com.cloud.service.ServiceOfferingVO;
import com.cloud.service.dao.ServiceOfferingDao;
import com.cloud.storage.UploadVO;
import com.cloud.storage.DiskOfferingVO;
import com.cloud.storage.DiskTemplateVO;
import com.cloud.storage.GuestOS;
@ -223,6 +225,7 @@ import com.cloud.storage.dao.SnapshotDao;
import com.cloud.storage.dao.SnapshotPolicyDao;
import com.cloud.storage.dao.StoragePoolDao;
import com.cloud.storage.dao.StoragePoolHostDao;
import com.cloud.storage.dao.UploadDao;
import com.cloud.storage.dao.VMTemplateDao;
import com.cloud.storage.dao.VMTemplateHostDao;
import com.cloud.storage.dao.VolumeDao;
@ -361,6 +364,7 @@ public class ManagementServerImpl implements ManagementServer {
private final InstanceGroupDao _vmGroupDao;
private final InstanceGroupVMMapDao _groupVMMapDao;
private final UploadMonitor _uploadMonitor;
private final UploadDao _uploadDao;
private final ScheduledExecutorService _executor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("AccountChecker"));
private final ScheduledExecutorService _eventExecutor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("EventChecker"));
@ -439,6 +443,7 @@ public class ManagementServerImpl implements ManagementServer {
_vmDao = locator.getDao(UserVmDao.class);
_vmGroupDao = locator.getDao(InstanceGroupDao.class);
_groupVMMapDao = locator.getDao(InstanceGroupVMMapDao.class);
_uploadDao = locator.getDao(UploadDao.class);
_configs = _configDao.getConfiguration();
_userStatsDao = locator.getDao(UserStatisticsDao.class);
@ -451,7 +456,7 @@ public class ManagementServerImpl implements ManagementServer {
_snapMgr = locator.getManager(SnapshotManager.class);
_snapshotScheduler = locator.getManager(SnapshotScheduler.class);
_networkGroupMgr = locator.getManager(NetworkGroupManager.class);
_uploadMonitor = locator.getManager(UploadMonitor.class);
_uploadMonitor = locator.getManager(UploadMonitor.class);
_userAuthenticators = locator.getAdapters(UserAuthenticator.class);
if (_userAuthenticators == null || !_userAuthenticators.isSet()) {
@ -4866,16 +4871,45 @@ public class ManagementServerImpl implements ManagementServer {
String secondaryStorageURL = _storageMgr.getSecondaryStorageURL(zoneId);
StoragePoolVO srcPool = _poolDao.findById(volume.getPoolId());
Long sourceHostId = _storageMgr.findHostIdForStoragePool(srcPool);
List<HostVO> storageServers = _hostDao.listByTypeDataCenter(Host.Type.SecondaryStorage, zoneId);
HostVO sserver = storageServers.get(0);
saveStartedEvent(1L, volume.getAccountId(), EventTypes.EVENT_VOLUME_UPLOAD, "Starting upload of " +volume.getName()+ " to " +url, eventId);
UploadVO uploadJob = _uploadMonitor.createNewUploadEntry(sserver.getId(), volumeId, UploadVO.Status.COPY_IN_PROGRESS, 0, Type.VOLUME, null, null, url);
uploadJob = _uploadDao.createForUpdate(uploadJob.getId());
// Update the async Job
ExtractJobResultObject resultObj = new ExtractJobResultObject(volume.getAccountId(), volume.getName(), UploadVO.Status.COPY_IN_PROGRESS.toString(), 0, uploadJob.getId());
_asyncMgr.updateAsyncJobAttachment(asyncJobId, Type.VOLUME.toString(), volumeId);
_asyncMgr.updateAsyncJobStatus(asyncJobId, AsyncJobResult.STATUS_IN_PROGRESS, resultObj);
// Copy the volume from the source storage pool to secondary storage
CopyVolumeCommand cvCmd = new CopyVolumeCommand(volume.getId(), volume.getPath(), srcPool, secondaryStorageURL, true);
CopyVolumeAnswer cvAnswer = (CopyVolumeAnswer) _agentMgr.easySend(sourceHostId, cvCmd);
if (cvAnswer == null || !cvAnswer.getResult()) {
throw new InternalErrorException("Failed to copy the volume from the source primary storage pool to secondary storage.");
String errorString = "Failed to copy the volume from the source primary storage pool to secondary storage.";
resultObj.setResult_string(errorString);
resultObj.setUploadStatus(UploadVO.Status.COPY_ERROR.toString());
_asyncMgr.completeAsyncJob(asyncJobId, AsyncJobResult.STATUS_FAILED, 0, resultObj);
uploadJob.setUploadState(UploadVO.Status.COPY_ERROR);
uploadJob.setErrorString(errorString);
uploadJob.setLastUpdated(new Date());
_uploadDao.update(uploadJob.getId(), uploadJob);
saveEvent(1L, volume.getAccountId(), EventTypes.EVENT_VOLUME_UPLOAD, errorString);
throw new InternalErrorException(errorString);
}
_uploadMonitor.extractVolume(volume, url, zoneId, "volumes/"+volume.getId()+"/"+cvAnswer.getVolumePath()+".vhd", eventId, asyncJobId, _asyncMgr);
uploadJob.setUploadState(UploadVO.Status.COPY_COMPLETE);
uploadJob.setLastUpdated(new Date());
_uploadDao.update(uploadJob.getId(), uploadJob);
_uploadMonitor.extractVolume(uploadJob, sserver, volume, url, zoneId, "volumes/"+volume.getId()+"/"+cvAnswer.getVolumePath()+".vhd", eventId, asyncJobId, _asyncMgr);
}

View File

@ -487,6 +487,8 @@ public class DownloadMonitorImpl implements DownloadMonitor {
TemplateInfo tInfo = templateInfo.get(uniqueName);
DeleteTemplateCommand dtCommand = new DeleteTemplateCommand(tInfo.getInstallPath());
long result = send(sserverId, dtCommand, null);
String description = "Deleted template " + tInfo.getTemplateName() + " on secondary storage " + sserverId + " since it isn't in the database, result=" + result;
logEvent(1L, EventTypes.EVENT_TEMPLATE_DELETE, description, EventVO.LEVEL_INFO);
s_logger.info("Deleted template " + tInfo.getTemplateName() + " on secondary storage " + sserverId + " since it isn't in the database, result=" + result);
}

View File

@ -151,7 +151,7 @@ public class UploadListener implements Listener {
this.eventId = eventId;
this.asyncJobId = asyncJobId;
this.asyncMgr = asyncMgr;
this.resultObj = new ExtractJobResultObject(accountId, typeName, currState, 0, uploadId);
this.resultObj = new ExtractJobResultObject(accountId, typeName, Status.NOT_UPLOADED.toString(), 0, uploadId);
updateDatabase(Status.NOT_UPLOADED, cmd.getUrl(),"");
}
@ -214,21 +214,14 @@ public class UploadListener implements Listener {
if (!(cmd instanceof StartupStorageCommand)) {
return true;
}
/* if (cmd.getGuid().startsWith("iso:")) {
//FIXME: do not download template for ISO secondary
return true;
}*/
long agentId = agent.getId();
StartupStorageCommand storage = (StartupStorageCommand)cmd;
if (storage.getResourceType() == Storage.StorageResourceType.STORAGE_HOST ||
storage.getResourceType() == Storage.StorageResourceType.SECONDARY_STORAGE )
{
uploadMonitor.handleUploadTemplateSync(agentId, storage.getTemplateInfo());
} else {
//downloadMonitor.handlePoolTemplateSync(storage.getPoolInfo(), storage.getTemplateInfo());
//no need to do anything. The storagepoolmonitor will initiate template sync.
uploadMonitor.handleUploadSync(agentId);
}
return true;
}
@ -246,7 +239,7 @@ public class UploadListener implements Listener {
public void logUploadStart() {
String event = uploadMonitor.getEvent(type);
uploadMonitor.logEvent(accountId, event, "Storage server " + sserver.getName() + " started upload of " +type.toString() + " " + typeName, EventVO.LEVEL_INFO,eventId);
//uploadMonitor.logEvent(accountId, event, "Storage server " + sserver.getName() + " started upload of " +type.toString() + " " + typeName, EventVO.LEVEL_INFO, eventId);
}
public void cancelTimeoutTask() {
@ -363,15 +356,14 @@ public class UploadListener implements Listener {
}
private Long getUploadId() {
/*if (uploadId == null){
VMTemplateHostVO templHost = vmTemplateHostDao.findByHostTemplate(sserver.getId(), template.getId());
uploadId = templHost.getId();
}*/ //TO DO
return uploadId;
}
public synchronized void updateDatabase(UploadAnswer answer) {
if(answer.getErrorString().startsWith("553")){
answer.setErrorString(answer.getErrorString().concat(". Please check if the file name already exists."));
}
resultObj.setResult_string(answer.getErrorString());
resultObj.setState(answer.getUploadStatus().toString());
resultObj.setUploadPercent(answer.getUploadPct());

View File

@ -21,9 +21,12 @@ package com.cloud.storage.upload;
import java.util.Map;
import com.cloud.async.AsyncJobManager;
import com.cloud.host.HostVO;
import com.cloud.storage.UploadVO;
import com.cloud.storage.VMTemplateHostVO;
import com.cloud.storage.VMTemplateVO;
import com.cloud.storage.VolumeVO;
import com.cloud.storage.Upload.Status;
import com.cloud.storage.Upload.Type;
import com.cloud.storage.template.TemplateInfo;
import com.cloud.utils.component.Manager;
@ -40,13 +43,16 @@ public interface UploadMonitor extends Manager{
public void extractTemplate(VMTemplateVO template, String url,
VMTemplateHostVO tmpltHostRef,Long dataCenterId, long eventId, long asyncJobId, AsyncJobManager asyncMgr);
void handleUploadTemplateSync(long sserverId,
Map<String, TemplateInfo> templateInfo);
void extractVolume(VolumeVO volume, String url, Long dataCenterId,
String installPath, long eventId, long asyncJobId,
AsyncJobManager asyncMgr);
boolean isTypeUploadInProgress(Long typeId, Type type);
void handleUploadSync(long sserverId);
UploadVO createNewUploadEntry(Long hostId, Long typeId, Status uploadState,
int uploadPercent, Type type, String errorString, String jobId,
String uploadUrl);
void extractVolume(UploadVO uploadVolumeObj, HostVO sserver, VolumeVO volume, String url,
Long dataCenterId, String installPath, long eventId,
long asyncJobId, AsyncJobManager asyncMgr);
}

View File

@ -1,5 +1,6 @@
package com.cloud.storage.upload;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
@ -20,6 +21,7 @@ import com.cloud.agent.api.Command;
import com.cloud.agent.api.storage.UploadCommand;
import com.cloud.agent.api.storage.UploadProgressCommand;
import com.cloud.agent.api.storage.UploadProgressCommand.RequestType;
import com.cloud.api.commands.CreateNetworkGroupCmd;
import com.cloud.async.AsyncJobManager;
import com.cloud.configuration.dao.ConfigurationDao;
import com.cloud.dc.dao.DataCenterDao;
@ -64,10 +66,6 @@ public class UploadMonitorImpl implements UploadMonitor {
VMTemplateHostDao _vmTemplateHostDao;
@Inject
UploadDao _uploadDao;
@Inject
VMTemplatePoolDao _vmTemplatePoolDao;
@Inject
StoragePoolHostDao _poolHostDao;
@Inject
SecondaryStorageVmDao _secStorageVmDao;
@ -103,21 +101,35 @@ public class UploadMonitorImpl implements UploadMonitor {
public boolean isTypeUploadInProgress(Long typeId, Type type) {
List<UploadVO> uploadsInProgress =
_uploadDao.listByTypeUploadStatus(typeId, type, UploadVO.Status.UPLOAD_IN_PROGRESS);
return (uploadsInProgress.size() != 0);
if(uploadsInProgress.size() > 0)
return true;
else if (type == Type.VOLUME && _uploadDao.listByTypeUploadStatus(typeId, type, UploadVO.Status.COPY_IN_PROGRESS).size() > 0){
return true;
}
return false;
}
@Override
public void extractVolume(VolumeVO volume, String url, Long dataCenterId, String installPath, long eventId, long asyncJobId, AsyncJobManager asyncMgr){
List<HostVO> storageServers = _serverDao.listByTypeDataCenter(Host.Type.SecondaryStorage, dataCenterId);
HostVO sserver = storageServers.get(0);
UploadVO uploadVolumeObj = new UploadVO(sserver.getId(), volume.getId(), new Date(),
Upload.Status.NOT_UPLOADED, 0, Type.VOLUME,
null, "jobid0000", url);
_uploadDao.persist(uploadVolumeObj);
public UploadVO createNewUploadEntry(Long hostId, Long typeId, UploadVO.Status uploadState,
int uploadPercent, Type type,
String errorString, String jobId, String uploadUrl){
UploadVO uploadObj = new UploadVO(hostId, typeId, new Date(),
uploadState, 0, type, null, "jobid0000", uploadUrl);
_uploadDao.persist(uploadObj);
return uploadObj;
}
@Override
public void extractVolume(UploadVO uploadVolumeObj, HostVO sserver, VolumeVO volume, String url, Long dataCenterId, String installPath, long eventId, long asyncJobId, AsyncJobManager asyncMgr){
uploadVolumeObj.setUploadState(Upload.Status.NOT_UPLOADED);
_uploadDao.update(uploadVolumeObj.getId(), uploadVolumeObj);
start();
UploadCommand ucmd = new UploadCommand(url, volume.getId(), volume.getSize(), installPath, Type.VOLUME);
UploadListener ul = new UploadListener(sserver, _timer, _uploadDao, uploadVolumeObj.getId(), this, ucmd, volume.getAccountId(), volume.getName(), Type.VOLUME, eventId, asyncJobId, asyncMgr);
@ -189,7 +201,6 @@ public class UploadMonitorImpl implements UploadMonitor {
@Override
public String getName() {
// TODO Auto-generated method stub
return _name;
}
@ -230,65 +241,7 @@ public class UploadMonitorImpl implements UploadMonitor {
}
if (reason == Upload.Status.ABANDONED) {
logEvent(accountId, getEvent(type), typeName + " :aborted upload from storage server " + host.getName(), EventVO.LEVEL_WARN, eventId);
}
/*VMTemplateHostVO vmTemplateHost = _vmTemplateHostDao.findByHostTemplate(host.getId(), template.getId());
if (upldStatus == Status.UPLOADED) {
long size = -1;
if(vmTemplateHost!=null){
size = vmTemplateHost.getSize();
}
else{
s_logger.warn("Failed to get size for template" + template.getName());
}
String eventParams = "id=" + template.getId() + "\ndcId="+host.getDataCenterId()+"\nsize="+size;
EventVO event = new EventVO();
event.setUserId(1L);
event.setAccountId(template.getAccountId());
if((template.getFormat()).equals(ImageFormat.ISO)){
event.setType(EventTypes.EVENT_ISO_CREATE);
event.setDescription("Successfully uploaded ISO " + template.getName());
}
else{
event.setType(EventTypes.EVENT_TEMPLATE_);
event.setDescription("Successfully uploaded template " + template.getName());
}
event.setParameters(eventParams);
event.setLevel(EventVO.LEVEL_INFO);
_eventDao.persist(event);
}
if (vmTemplateHost != null) {
Long poolId = vmTemplateHost.getPoolId();
if (poolId != null) {
VMTemplateStoragePoolVO vmTemplatePool = _vmTemplatePoolDao.findByPoolTemplate(poolId, template.getId());
StoragePoolHostVO poolHost = _poolHostDao.findByPoolHost(poolId, host.getId());
if (vmTemplatePool != null && poolHost != null) {
vmTemplatePool.setDownloadPercent(vmTemplateHost.getUploadPercent());
vmTemplatePool.setDownloadState(vmTemplateHost.getUploadState());
vmTemplatePool.setErrorString(vmTemplateHost.getUpload_errorString());
String localPath = poolHost.getLocalPath();
String installPath = vmTemplateHost.getInstallPath();
if (installPath != null) {
if (!installPath.startsWith("/")) {
installPath = "/" + installPath;
}
if (!(localPath == null) && !installPath.startsWith(localPath)) {
localPath = localPath.replaceAll("/\\p{Alnum}+/*$", ""); //remove instance if necessary
}
if (!(localPath == null) && installPath.startsWith(localPath)) {
installPath = installPath.substring(localPath.length());
}
}
vmTemplatePool.setInstallPath(installPath);
vmTemplatePool.setLastUpdated(vmTemplateHost.getLastUpdated());
vmTemplatePool.setJobId(vmTemplateHost.getJobId());
vmTemplatePool.setLocalDownloadPath(vmTemplateHost.getLocalDownloadPath());
_vmTemplatePoolDao.update(vmTemplatePool.getId(),vmTemplatePool);
}
}
}*/
}
}
@ -305,55 +258,28 @@ public class UploadMonitorImpl implements UploadMonitor {
}
@Override
public void handleUploadTemplateSync(long sserverId, Map<String, TemplateInfo> templateInfo) {
/*HostVO storageHost = _serverDao.findById(sserverId);
if (storageHost == null) {
s_logger.warn("Huh? Agent id " + sserverId + " does not correspond to a row in hosts table?");
return;
}
List<VMTemplateVO> allTemplates = _templateDao.listAllInZone(storageHost.getDataCenterId());
VMTemplateVO rtngTmplt = _templateDao.findRoutingTemplate();
VMTemplateVO defaultBuiltin = _templateDao.findDefaultBuiltinTemplate();
public void handleUploadSync(long sserverId) {
HostVO storageHost = _serverDao.findById(sserverId);
if (storageHost == null) {
s_logger.warn("Huh? Agent id " + sserverId + " does not correspond to a row in hosts table?");
return;
}
s_logger.debug("Handling upload sserverId " +sserverId);
List<UploadVO> uploadsInProgress = new ArrayList<UploadVO>();
uploadsInProgress.addAll(_uploadDao.listByHostAndUploadStatus(sserverId, UploadVO.Status.UPLOAD_IN_PROGRESS));
uploadsInProgress.addAll(_uploadDao.listByHostAndUploadStatus(sserverId, UploadVO.Status.COPY_IN_PROGRESS));
if (uploadsInProgress.size() > 0){
for (UploadVO uploadJob : uploadsInProgress){
uploadJob.setUploadState(UploadVO.Status.UPLOAD_ERROR);
uploadJob.setErrorString("Could not complete the upload.");
uploadJob.setLastUpdated(new Date());
_uploadDao.update(uploadJob.getId(), uploadJob);
}
}
if (rtngTmplt != null && !allTemplates.contains(rtngTmplt))
allTemplates.add(rtngTmplt);
if (defaultBuiltin != null && !allTemplates.contains(defaultBuiltin)) {
allTemplates.add(defaultBuiltin);
}
for (VMTemplateVO tmplt: allTemplates) {
String uniqueName = tmplt.getUniqueName();
VMTemplateHostVO tmpltHost = _vmTemplateHostDao.findByHostTemplate(sserverId, tmplt.getId());
if (templateInfo.containsKey(uniqueName)) {
if (tmpltHost != null) {
s_logger.info("Template Sync found " + uniqueName + " already in the template host table");
if (tmpltHost.getUploadState() != Status.UPLOADED) {
tmpltHost.setUpload_errorString("");
}
tmpltHost.setUploadPercent(100);
tmpltHost.setUploadState(Status.UPLOADED);
tmpltHost.setLastUpdated(new Date());
_vmTemplateHostDao.update(tmpltHost.getId(), tmpltHost);
} else {
VMTemplateHostVO templtHost = new VMTemplateHostVO(sserverId, tmplt.getId(), new Date(), 100, Status.UPLOADED, null, null, null, templateInfo.get(uniqueName).getInstallPath(), tmplt.getUrl());
templtHost.setSize(templateInfo.get(uniqueName).getSize());
_vmTemplateHostDao.persist(templtHost);
}
templateInfo.remove(uniqueName);
continue;
}
if (tmpltHost != null && tmpltHost.getUploadState() != Status.UPLOADED) {
s_logger.info("Template Sync did not find " + uniqueName + " ready on server " + sserverId + ", will request upload to start/resume shortly");
} else if (tmpltHost == null) {
s_logger.info("Template Sync did not find " + uniqueName + " on the server " + sserverId + ", will request upload shortly");
VMTemplateHostVO templtHost = new VMTemplateHostVO(sserverId, tmplt.getId(), new Date(), 0, Status.NOT_UPLOADED, null, null, null, null, tmplt.getUrl());
_vmTemplateHostDao.persist(templtHost);
}*/
}
}
}