mirror of https://github.com/apache/cloudstack.git
bug 4286: Extract functionality - code cleanup
This commit is contained in:
parent
33e683e2c7
commit
7ff551bd5c
|
|
@ -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,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}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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(){
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
@ -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);
|
||||
}*/
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue