Remove VolumeHostDao references from codebase.

This commit is contained in:
Min Chen 2013-04-24 11:11:58 -07:00
parent 0cfef3aa4e
commit 792fc471a2
9 changed files with 114 additions and 182 deletions

View File

@ -41,6 +41,8 @@ import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao; import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO; import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreVO;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -55,13 +57,8 @@ import com.cloud.agent.api.CreateVolumeFromSnapshotCommand;
import com.cloud.agent.api.UpgradeSnapshotCommand; import com.cloud.agent.api.UpgradeSnapshotCommand;
import com.cloud.agent.api.storage.CopyVolumeAnswer; import com.cloud.agent.api.storage.CopyVolumeAnswer;
import com.cloud.agent.api.storage.CopyVolumeCommand; import com.cloud.agent.api.storage.CopyVolumeCommand;
import com.cloud.agent.api.storage.CreateAnswer;
import com.cloud.agent.api.storage.CreateCommand;
import com.cloud.agent.api.storage.CreatePrivateTemplateAnswer; import com.cloud.agent.api.storage.CreatePrivateTemplateAnswer;
import com.cloud.agent.api.storage.PrimaryStorageDownloadAnswer;
import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand;
import com.cloud.agent.api.to.S3TO; import com.cloud.agent.api.to.S3TO;
import com.cloud.agent.api.to.StorageFilerTO;
import com.cloud.agent.api.to.SwiftTO; import com.cloud.agent.api.to.SwiftTO;
import com.cloud.configuration.Config; import com.cloud.configuration.Config;
import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.configuration.dao.ConfigurationDao;
@ -69,25 +66,19 @@ import com.cloud.exception.StorageUnavailableException;
import com.cloud.host.HostVO; import com.cloud.host.HostVO;
import com.cloud.host.dao.HostDao; import com.cloud.host.dao.HostDao;
import com.cloud.storage.DataStoreRole; import com.cloud.storage.DataStoreRole;
import com.cloud.storage.DiskOfferingVO;
import com.cloud.storage.SnapshotVO; import com.cloud.storage.SnapshotVO;
import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Storage.ImageFormat;
import com.cloud.storage.StorageManager; import com.cloud.storage.StorageManager;
import com.cloud.storage.StoragePool; import com.cloud.storage.StoragePool;
import com.cloud.storage.VMTemplateHostVO;
import com.cloud.storage.VMTemplateStoragePoolVO;
import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
import com.cloud.storage.VMTemplateVO; import com.cloud.storage.VMTemplateVO;
import com.cloud.storage.VolumeHostVO;
import com.cloud.storage.VolumeManager; import com.cloud.storage.VolumeManager;
import com.cloud.storage.VolumeVO; import com.cloud.storage.VolumeVO;
import com.cloud.storage.dao.DiskOfferingDao; import com.cloud.storage.dao.DiskOfferingDao;
import com.cloud.storage.dao.SnapshotDao; import com.cloud.storage.dao.SnapshotDao;
import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VMTemplateDao;
import com.cloud.storage.dao.VMTemplateHostDao;
import com.cloud.storage.dao.VMTemplatePoolDao; import com.cloud.storage.dao.VMTemplatePoolDao;
import com.cloud.storage.dao.VolumeDao; import com.cloud.storage.dao.VolumeDao;
import com.cloud.storage.dao.VolumeHostDao;
import com.cloud.storage.s3.S3Manager; import com.cloud.storage.s3.S3Manager;
import com.cloud.storage.snapshot.SnapshotManager; import com.cloud.storage.snapshot.SnapshotManager;
import com.cloud.storage.swift.SwiftManager; import com.cloud.storage.swift.SwiftManager;
@ -96,7 +87,6 @@ import com.cloud.utils.NumbersUtil;
import com.cloud.utils.db.DB; import com.cloud.utils.db.DB;
import com.cloud.utils.db.Transaction; import com.cloud.utils.db.Transaction;
import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.vm.DiskProfile;
@Component @Component
public class AncientDataMotionStrategy implements DataMotionStrategy { public class AncientDataMotionStrategy implements DataMotionStrategy {
@ -107,7 +97,7 @@ public class AncientDataMotionStrategy implements DataMotionStrategy {
@Inject @Inject
TemplateManager templateMgr; TemplateManager templateMgr;
@Inject @Inject
VolumeHostDao volumeHostDao; VolumeDataStoreDao volumeStoreDao;
@Inject @Inject
HostDao hostDao; HostDao hostDao;
@Inject @Inject
@ -151,15 +141,14 @@ public class AncientDataMotionStrategy implements DataMotionStrategy {
int _copyvolumewait = NumbersUtil.parseInt(value, int _copyvolumewait = NumbersUtil.parseInt(value,
Integer.parseInt(Config.CopyVolumeWait.getDefaultValue())); Integer.parseInt(Config.CopyVolumeWait.getDefaultValue()));
VolumeHostVO volumeHostVO = volumeHostDao.findByVolumeId(srcData VolumeDataStoreVO volumeStoreVO = volumeStoreDao.findByVolume(srcData
.getId()); .getId());
HostVO secStorage = hostDao.findById(volumeHostVO.getHostId()); DataStore srcStore = srcData.getDataStore();
String secondaryStorageURL = secStorage.getStorageUrl(); String[] volumePath = volumeStoreVO.getInstallPath().split("/");
String[] volumePath = volumeHostVO.getInstallPath().split("/");
String volumeUUID = volumePath[volumePath.length - 1].split("\\.")[0]; String volumeUUID = volumePath[volumePath.length - 1].split("\\.")[0];
StoragePool destPool = (StoragePool) destData.getDataStore(); StoragePool destPool = (StoragePool) destData.getDataStore();
CopyVolumeCommand cvCmd = new CopyVolumeCommand(srcData.getId(), CopyVolumeCommand cvCmd = new CopyVolumeCommand(srcData.getId(),
volumeUUID, destPool, secondaryStorageURL, false, volumeUUID, destPool, srcStore.getUri(), false,
_copyvolumewait); _copyvolumewait);
CopyVolumeAnswer cvAnswer = null; CopyVolumeAnswer cvAnswer = null;
String errMsg = null; String errMsg = null;
@ -186,7 +175,7 @@ public class AncientDataMotionStrategy implements DataMotionStrategy {
vol.setPodId(destPool.getPodId()); vol.setPodId(destPool.getPodId());
this.volDao.update(vol.getId(), vol); this.volDao.update(vol.getId(), vol);
volumeHostDao.remove(volumeHostVO.getId()); volumeStoreDao.remove(volumeStoreVO.getId());
txn.commit(); txn.commit();
return cvAnswer; return cvAnswer;
} }

View File

@ -30,6 +30,7 @@ import org.apache.cloudstack.engine.subsystem.api.storage.CreateCmdResult;
import org.apache.cloudstack.engine.subsystem.api.storage.DataObject; import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectType; import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectType;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
import org.apache.cloudstack.engine.subsystem.api.storage.DataTO; import org.apache.cloudstack.engine.subsystem.api.storage.DataTO;
import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint; import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector; import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector;
@ -38,6 +39,8 @@ import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
import org.apache.cloudstack.framework.async.AsyncRpcConext; import org.apache.cloudstack.framework.async.AsyncRpcConext;
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao; import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO; import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreVO;
import org.apache.cloudstack.storage.image.ImageStoreDriver; import org.apache.cloudstack.storage.image.ImageStoreDriver;
import org.apache.cloudstack.storage.image.store.ImageStoreImpl; import org.apache.cloudstack.storage.image.store.ImageStoreImpl;
import org.apache.cloudstack.storage.image.store.TemplateObject; import org.apache.cloudstack.storage.image.store.TemplateObject;
@ -56,7 +59,6 @@ import com.cloud.agent.api.to.S3TO;
import com.cloud.agent.api.to.SwiftTO; import com.cloud.agent.api.to.SwiftTO;
import com.cloud.event.EventTypes; import com.cloud.event.EventTypes;
import com.cloud.event.UsageEventUtils; import com.cloud.event.UsageEventUtils;
import com.cloud.host.HostVO;
import com.cloud.host.dao.HostDao; import com.cloud.host.dao.HostDao;
import com.cloud.storage.DataStoreRole; import com.cloud.storage.DataStoreRole;
import com.cloud.storage.RegisterVolumePayload; import com.cloud.storage.RegisterVolumePayload;
@ -65,13 +67,11 @@ import com.cloud.storage.SnapshotVO;
import com.cloud.storage.VMTemplateStorageResourceAssoc; import com.cloud.storage.VMTemplateStorageResourceAssoc;
import com.cloud.storage.VMTemplateVO; import com.cloud.storage.VMTemplateVO;
import com.cloud.storage.VMTemplateZoneVO; import com.cloud.storage.VMTemplateZoneVO;
import com.cloud.storage.VolumeHostVO;
import com.cloud.storage.VolumeVO; import com.cloud.storage.VolumeVO;
import com.cloud.storage.dao.SnapshotDao; import com.cloud.storage.dao.SnapshotDao;
import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VMTemplateDao;
import com.cloud.storage.dao.VMTemplateZoneDao; import com.cloud.storage.dao.VMTemplateZoneDao;
import com.cloud.storage.dao.VolumeDao; import com.cloud.storage.dao.VolumeDao;
import com.cloud.storage.dao.VolumeHostDao;
import com.cloud.storage.download.DownloadMonitor; import com.cloud.storage.download.DownloadMonitor;
import com.cloud.storage.s3.S3Manager; import com.cloud.storage.s3.S3Manager;
import com.cloud.storage.secondary.SecondaryStorageVmManager; import com.cloud.storage.secondary.SecondaryStorageVmManager;
@ -92,7 +92,7 @@ public class CloudStackImageStoreDriverImpl implements ImageStoreDriver {
VMTemplateDao templateDao; VMTemplateDao templateDao;
@Inject DownloadMonitor _downloadMonitor; @Inject DownloadMonitor _downloadMonitor;
@Inject VolumeDao volumeDao; @Inject VolumeDao volumeDao;
@Inject VolumeHostDao volumeHostDao; @Inject VolumeDataStoreDao _volumeStoreDao;
@Inject HostDao hostDao; @Inject HostDao hostDao;
@Inject SnapshotDao snapshotDao; @Inject SnapshotDao snapshotDao;
@Inject AgentManager agentMgr; @Inject AgentManager agentMgr;
@ -109,6 +109,7 @@ public class CloudStackImageStoreDriverImpl implements ImageStoreDriver {
private AgentManager _agentMgr; private AgentManager _agentMgr;
@Inject TemplateDataStoreDao _templateStoreDao; @Inject TemplateDataStoreDao _templateStoreDao;
@Inject EndPointSelector _epSelector; @Inject EndPointSelector _epSelector;
@Inject DataStoreManager _dataStoreMgr;
@Override @Override
@ -223,35 +224,35 @@ public class CloudStackImageStoreDriverImpl implements ImageStoreDriver {
} }
private void deleteVolume(DataObject data, AsyncCompletionCallback<CommandResult> callback) { private void deleteVolume(DataObject data, AsyncCompletionCallback<CommandResult> callback) {
// TODO Auto-generated method stub
VolumeVO vol = volumeDao.findById(data.getId()); VolumeVO vol = volumeDao.findById(data.getId());
if (s_logger.isDebugEnabled()) { if (s_logger.isDebugEnabled()) {
s_logger.debug("Expunging " + vol); s_logger.debug("Expunging " + vol);
} }
// Find out if the volume is present on secondary storage // Find out if the volume is present on secondary storage
VolumeHostVO volumeHost = volumeHostDao.findByVolumeId(vol.getId()); VolumeDataStoreVO volumeStore = _volumeStoreDao.findByVolume(vol.getId());
if (volumeHost != null) { if (volumeStore != null) {
if (volumeHost.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOADED) { if (volumeStore.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOADED) {
HostVO ssHost = hostDao.findById(volumeHost.getHostId()); DataStore store = this._dataStoreMgr.getDataStore(volumeStore.getDataStoreId(), DataStoreRole.Image);
EndPoint ep = _epSelector.select(store);
DeleteVolumeCommand dtCommand = new DeleteVolumeCommand( DeleteVolumeCommand dtCommand = new DeleteVolumeCommand(
ssHost.getStorageUrl(), volumeHost.getInstallPath()); store.getUri(), volumeStore.getInstallPath());
Answer answer = agentMgr.sendToSecStorage(ssHost, dtCommand); Answer answer = ep.sendMessage(dtCommand);
if (answer == null || !answer.getResult()) { if (answer == null || !answer.getResult()) {
s_logger.debug("Failed to delete " s_logger.debug("Failed to delete "
+ volumeHost + volumeStore
+ " due to " + " due to "
+ ((answer == null) ? "answer is null" : answer + ((answer == null) ? "answer is null" : answer
.getDetails())); .getDetails()));
return; return;
} }
} else if (volumeHost.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOAD_IN_PROGRESS) { } else if (volumeStore.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOAD_IN_PROGRESS) {
s_logger.debug("Volume: " + vol.getName() s_logger.debug("Volume: " + vol.getName()
+ " is currently being uploaded; cant' delete it."); + " is currently being uploaded; cant' delete it.");
throw new CloudRuntimeException( throw new CloudRuntimeException(
"Please specify a volume that is not currently being uploaded."); "Please specify a volume that is not currently being uploaded.");
} }
volumeHostDao.remove(volumeHost.getId()); _volumeStoreDao.remove(volumeStore.getId());
volumeDao.remove(vol.getId()); volumeDao.remove(vol.getId());
CommandResult result = new CommandResult(); CommandResult result = new CommandResult();
callback.complete(result); callback.complete(result);

View File

@ -31,6 +31,7 @@ import org.apache.cloudstack.engine.subsystem.api.storage.CreateCmdResult;
import org.apache.cloudstack.engine.subsystem.api.storage.DataObject; import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectType; import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectType;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
import org.apache.cloudstack.engine.subsystem.api.storage.DataTO; import org.apache.cloudstack.engine.subsystem.api.storage.DataTO;
import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint; import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector; import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector;
@ -39,6 +40,8 @@ import org.apache.cloudstack.framework.async.AsyncRpcConext;
import org.apache.cloudstack.storage.datastore.db.ImageStoreDetailsDao; import org.apache.cloudstack.storage.datastore.db.ImageStoreDetailsDao;
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao; import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO; import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreVO;
import org.apache.cloudstack.storage.image.ImageStoreDriver; import org.apache.cloudstack.storage.image.ImageStoreDriver;
import org.apache.cloudstack.storage.image.store.ImageStoreImpl; import org.apache.cloudstack.storage.image.store.ImageStoreImpl;
import org.apache.cloudstack.storage.image.store.TemplateObject; import org.apache.cloudstack.storage.image.store.TemplateObject;
@ -59,6 +62,7 @@ import com.cloud.host.HostVO;
import com.cloud.host.dao.HostDao; import com.cloud.host.dao.HostDao;
import com.cloud.storage.RegisterVolumePayload; import com.cloud.storage.RegisterVolumePayload;
import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Storage.ImageFormat;
import com.cloud.storage.DataStoreRole;
import com.cloud.storage.SnapshotVO; import com.cloud.storage.SnapshotVO;
import com.cloud.storage.VMTemplateStorageResourceAssoc; import com.cloud.storage.VMTemplateStorageResourceAssoc;
import com.cloud.storage.VMTemplateVO; import com.cloud.storage.VMTemplateVO;
@ -92,7 +96,7 @@ public class S3ImageStoreDriverImpl implements ImageStoreDriver {
@Inject @Inject
ImageStoreDetailsDao _imageStoreDetailsDao; ImageStoreDetailsDao _imageStoreDetailsDao;
@Inject VolumeDao volumeDao; @Inject VolumeDao volumeDao;
@Inject VolumeHostDao volumeHostDao; @Inject VolumeDataStoreDao _volumeStoreDao;
@Inject HostDao hostDao; @Inject HostDao hostDao;
@Inject SnapshotDao snapshotDao; @Inject SnapshotDao snapshotDao;
@Inject AgentManager agentMgr; @Inject AgentManager agentMgr;
@ -109,6 +113,7 @@ public class S3ImageStoreDriverImpl implements ImageStoreDriver {
private AgentManager _agentMgr; private AgentManager _agentMgr;
@Inject TemplateDataStoreDao _templateStoreDao; @Inject TemplateDataStoreDao _templateStoreDao;
@Inject EndPointSelector _epSelector; @Inject EndPointSelector _epSelector;
@Inject DataStoreManager _dataStoreMgr;
@Override @Override
public String grantAccess(DataObject data, EndPoint ep) { public String grantAccess(DataObject data, EndPoint ep) {
@ -183,28 +188,29 @@ public class S3ImageStoreDriverImpl implements ImageStoreDriver {
} }
// Find out if the volume is present on secondary storage // Find out if the volume is present on secondary storage
VolumeHostVO volumeHost = volumeHostDao.findByVolumeId(vol.getId()); VolumeDataStoreVO volumeStore = _volumeStoreDao.findByVolume(vol.getId());
if (volumeHost != null) { if (volumeStore != null) {
if (volumeHost.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOADED) { if (volumeStore.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOADED) {
HostVO ssHost = hostDao.findById(volumeHost.getHostId()); DataStore store = this._dataStoreMgr.getDataStore(volumeStore.getDataStoreId(), DataStoreRole.Image);
EndPoint ep = _epSelector.select(store);
DeleteVolumeCommand dtCommand = new DeleteVolumeCommand( DeleteVolumeCommand dtCommand = new DeleteVolumeCommand(
ssHost.getStorageUrl(), volumeHost.getInstallPath()); store.getUri(), volumeStore.getInstallPath());
Answer answer = agentMgr.sendToSecStorage(ssHost, dtCommand); Answer answer = ep.sendMessage(dtCommand);
if (answer == null || !answer.getResult()) { if (answer == null || !answer.getResult()) {
s_logger.debug("Failed to delete " s_logger.debug("Failed to delete "
+ volumeHost + volumeStore
+ " due to " + " due to "
+ ((answer == null) ? "answer is null" : answer + ((answer == null) ? "answer is null" : answer
.getDetails())); .getDetails()));
return; return;
} }
} else if (volumeHost.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOAD_IN_PROGRESS) { } else if (volumeStore.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOAD_IN_PROGRESS) {
s_logger.debug("Volume: " + vol.getName() s_logger.debug("Volume: " + vol.getName()
+ " is currently being uploaded; cant' delete it."); + " is currently being uploaded; cant' delete it.");
throw new CloudRuntimeException( throw new CloudRuntimeException(
"Please specify a volume that is not currently being uploaded."); "Please specify a volume that is not currently being uploaded.");
} }
volumeHostDao.remove(volumeHost.getId()); _volumeStoreDao.remove(volumeStore.getId());
volumeDao.remove(vol.getId()); volumeDao.remove(vol.getId());
CommandResult result = new CommandResult(); CommandResult result = new CommandResult();
callback.complete(result); callback.complete(result);

View File

@ -31,6 +31,7 @@ import org.apache.cloudstack.engine.subsystem.api.storage.CreateCmdResult;
import org.apache.cloudstack.engine.subsystem.api.storage.DataObject; import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectType; import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectType;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
import org.apache.cloudstack.engine.subsystem.api.storage.DataTO; import org.apache.cloudstack.engine.subsystem.api.storage.DataTO;
import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint; import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector; import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector;
@ -39,6 +40,8 @@ import org.apache.cloudstack.framework.async.AsyncRpcConext;
import org.apache.cloudstack.storage.datastore.db.ImageStoreDetailsDao; import org.apache.cloudstack.storage.datastore.db.ImageStoreDetailsDao;
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao; import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO; import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreVO;
import org.apache.cloudstack.storage.image.ImageStoreDriver; import org.apache.cloudstack.storage.image.ImageStoreDriver;
import org.apache.cloudstack.storage.image.store.ImageStoreImpl; import org.apache.cloudstack.storage.image.store.ImageStoreImpl;
import org.apache.cloudstack.storage.image.store.TemplateObject; import org.apache.cloudstack.storage.image.store.TemplateObject;
@ -59,6 +62,7 @@ import com.cloud.host.HostVO;
import com.cloud.host.dao.HostDao; import com.cloud.host.dao.HostDao;
import com.cloud.storage.RegisterVolumePayload; import com.cloud.storage.RegisterVolumePayload;
import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.Storage.ImageFormat;
import com.cloud.storage.DataStoreRole;
import com.cloud.storage.SnapshotVO; import com.cloud.storage.SnapshotVO;
import com.cloud.storage.VMTemplateStorageResourceAssoc; import com.cloud.storage.VMTemplateStorageResourceAssoc;
import com.cloud.storage.VMTemplateVO; import com.cloud.storage.VMTemplateVO;
@ -92,7 +96,7 @@ public class SwiftImageStoreDriverImpl implements ImageStoreDriver {
@Inject @Inject
ImageStoreDetailsDao _imageStoreDetailsDao; ImageStoreDetailsDao _imageStoreDetailsDao;
@Inject VolumeDao volumeDao; @Inject VolumeDao volumeDao;
@Inject VolumeHostDao volumeHostDao; @Inject VolumeDataStoreDao _volumeStoreDao;
@Inject HostDao hostDao; @Inject HostDao hostDao;
@Inject SnapshotDao snapshotDao; @Inject SnapshotDao snapshotDao;
@Inject AgentManager agentMgr; @Inject AgentManager agentMgr;
@ -109,6 +113,8 @@ public class SwiftImageStoreDriverImpl implements ImageStoreDriver {
private AgentManager _agentMgr; private AgentManager _agentMgr;
@Inject TemplateDataStoreDao _templateStoreDao; @Inject TemplateDataStoreDao _templateStoreDao;
@Inject EndPointSelector _epSelector; @Inject EndPointSelector _epSelector;
@Inject DataStoreManager _dataStoreMgr;
@Override @Override
public String grantAccess(DataObject data, EndPoint ep) { public String grantAccess(DataObject data, EndPoint ep) {
@ -176,28 +182,29 @@ public class SwiftImageStoreDriverImpl implements ImageStoreDriver {
} }
// Find out if the volume is present on secondary storage // Find out if the volume is present on secondary storage
VolumeHostVO volumeHost = volumeHostDao.findByVolumeId(vol.getId()); VolumeDataStoreVO volumeStore = _volumeStoreDao.findByVolume(vol.getId());
if (volumeHost != null) { if (volumeStore != null) {
if (volumeHost.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOADED) { if (volumeStore.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOADED) {
HostVO ssHost = hostDao.findById(volumeHost.getHostId()); DataStore store = this._dataStoreMgr.getDataStore(volumeStore.getDataStoreId(), DataStoreRole.Image);
EndPoint ep = _epSelector.select(store);
DeleteVolumeCommand dtCommand = new DeleteVolumeCommand( DeleteVolumeCommand dtCommand = new DeleteVolumeCommand(
ssHost.getStorageUrl(), volumeHost.getInstallPath()); store.getUri(), volumeStore.getInstallPath());
Answer answer = agentMgr.sendToSecStorage(ssHost, dtCommand); Answer answer = ep.sendMessage(dtCommand);
if (answer == null || !answer.getResult()) { if (answer == null || !answer.getResult()) {
s_logger.debug("Failed to delete " s_logger.debug("Failed to delete "
+ volumeHost + volumeStore
+ " due to " + " due to "
+ ((answer == null) ? "answer is null" : answer + ((answer == null) ? "answer is null" : answer
.getDetails())); .getDetails()));
return; return;
} }
} else if (volumeHost.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOAD_IN_PROGRESS) { } else if (volumeStore.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOAD_IN_PROGRESS) {
s_logger.debug("Volume: " + vol.getName() s_logger.debug("Volume: " + vol.getName()
+ " is currently being uploaded; cant' delete it."); + " is currently being uploaded; cant' delete it.");
throw new CloudRuntimeException( throw new CloudRuntimeException(
"Please specify a volume that is not currently being uploaded."); "Please specify a volume that is not currently being uploaded.");
} }
volumeHostDao.remove(volumeHost.getId()); _volumeStoreDao.remove(volumeStore.getId());
volumeDao.remove(vol.getId()); volumeDao.remove(vol.getId());
CommandResult result = new CommandResult(); CommandResult result = new CommandResult();
callback.complete(result); callback.complete(result);

View File

@ -331,7 +331,6 @@ public class ApiDBUtils {
static VolumeDao _volumeDao; static VolumeDao _volumeDao;
static Site2SiteVpnGatewayDao _site2SiteVpnGatewayDao; static Site2SiteVpnGatewayDao _site2SiteVpnGatewayDao;
static Site2SiteCustomerGatewayDao _site2SiteCustomerGatewayDao; static Site2SiteCustomerGatewayDao _site2SiteCustomerGatewayDao;
static VolumeHostDao _volumeHostDao;
static DataCenterDao _zoneDao; static DataCenterDao _zoneDao;
static NetworkOfferingDao _networkOfferingDao; static NetworkOfferingDao _networkOfferingDao;
static NetworkDao _networkDao; static NetworkDao _networkDao;
@ -436,7 +435,6 @@ public class ApiDBUtils {
@Inject private VolumeDao volumeDao; @Inject private VolumeDao volumeDao;
@Inject private Site2SiteVpnGatewayDao site2SiteVpnGatewayDao; @Inject private Site2SiteVpnGatewayDao site2SiteVpnGatewayDao;
@Inject private Site2SiteCustomerGatewayDao site2SiteCustomerGatewayDao; @Inject private Site2SiteCustomerGatewayDao site2SiteCustomerGatewayDao;
@Inject private VolumeHostDao volumeHostDao;
@Inject private DataCenterDao zoneDao; @Inject private DataCenterDao zoneDao;
@Inject private NetworkOfferingDao networkOfferingDao; @Inject private NetworkOfferingDao networkOfferingDao;
@Inject private NetworkDao networkDao; @Inject private NetworkDao networkDao;
@ -539,7 +537,6 @@ public class ApiDBUtils {
_volumeDao = volumeDao; _volumeDao = volumeDao;
_site2SiteVpnGatewayDao = site2SiteVpnGatewayDao; _site2SiteVpnGatewayDao = site2SiteVpnGatewayDao;
_site2SiteCustomerGatewayDao = site2SiteCustomerGatewayDao; _site2SiteCustomerGatewayDao = site2SiteCustomerGatewayDao;
_volumeHostDao = volumeHostDao;
_zoneDao = zoneDao; _zoneDao = zoneDao;
_securityGroupDao = securityGroupDao; _securityGroupDao = securityGroupDao;
_securityGroupJoinDao = securityGroupJoinDao; _securityGroupJoinDao = securityGroupJoinDao;
@ -865,10 +862,6 @@ public class ApiDBUtils {
return template; return template;
} }
public static VolumeHostVO findVolumeHostRef(long volumeId, long zoneId) {
return _volumeHostDao.findVolumeByZone(volumeId, zoneId);
}
public static VMTemplateSwiftVO findTemplateSwiftRef(long templateId) { public static VMTemplateSwiftVO findTemplateSwiftRef(long templateId) {
return _templateSwiftDao.findOneByTemplateId(templateId); return _templateSwiftDao.findOneByTemplateId(templateId);
} }

View File

@ -148,7 +148,6 @@ import com.cloud.storage.dao.VMTemplatePoolDao;
import com.cloud.storage.dao.VMTemplateS3Dao; import com.cloud.storage.dao.VMTemplateS3Dao;
import com.cloud.storage.dao.VMTemplateSwiftDao; import com.cloud.storage.dao.VMTemplateSwiftDao;
import com.cloud.storage.dao.VolumeDao; import com.cloud.storage.dao.VolumeDao;
import com.cloud.storage.dao.VolumeHostDao;
import com.cloud.storage.listener.StoragePoolMonitor; import com.cloud.storage.listener.StoragePoolMonitor;
import com.cloud.storage.listener.VolumeStateListener; import com.cloud.storage.listener.VolumeStateListener;
import com.cloud.storage.s3.S3Manager; import com.cloud.storage.s3.S3Manager;
@ -235,8 +234,6 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
@Inject @Inject
protected UserVmDao _userVmDao; protected UserVmDao _userVmDao;
@Inject @Inject
VolumeHostDao _volumeHostDao;
@Inject
protected VMInstanceDao _vmInstanceDao; protected VMInstanceDao _vmInstanceDao;
@Inject @Inject
protected PrimaryDataStoreDao _storagePoolDao = null; protected PrimaryDataStoreDao _storagePoolDao = null;
@ -1171,15 +1168,15 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
} }
@DB @DB
List<Long> findAllVolumeIdInSnapshotTable(Long hostId) { List<Long> findAllVolumeIdInSnapshotTable(Long storeId) {
String sql = "SELECT volume_id from snapshots WHERE sechost_id=? GROUP BY volume_id"; String sql = "SELECT volume_id from snapshots, snapshot_store_ref WHERE store_id=? GROUP BY volume_id";
List<Long> list = new ArrayList<Long>(); List<Long> list = new ArrayList<Long>();
try { try {
Transaction txn = Transaction.currentTxn(); Transaction txn = Transaction.currentTxn();
ResultSet rs = null; ResultSet rs = null;
PreparedStatement pstmt = null; PreparedStatement pstmt = null;
pstmt = txn.prepareAutoCloseStatement(sql); pstmt = txn.prepareAutoCloseStatement(sql);
pstmt.setLong(1, hostId); pstmt.setLong(1, storeId);
rs = pstmt.executeQuery(); rs = pstmt.executeQuery();
while (rs.next()) { while (rs.next()) {
list.add(rs.getLong(1)); list.add(rs.getLong(1));
@ -1187,7 +1184,7 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
return list; return list;
} catch (Exception e) { } catch (Exception e) {
s_logger.debug("failed to get all volumes who has snapshots in secondary storage " s_logger.debug("failed to get all volumes who has snapshots in secondary storage "
+ hostId + " due to " + e.getMessage()); + storeId + " due to " + e.getMessage());
return null; return null;
} }
@ -1224,88 +1221,63 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
try { try {
long storeId = store.getId(); long storeId = store.getId();
List<TemplateDataStoreVO> destroyedTemplateStoreVOs = this._templateStoreDao.listDestroyed(storeId); List<TemplateDataStoreVO> destroyedTemplateStoreVOs = this._templateStoreDao.listDestroyed(storeId);
s_logger.debug("Secondary storage garbage collector found " s_logger.debug("Secondary storage garbage collector found " + destroyedTemplateStoreVOs.size()
+ destroyedTemplateStoreVOs.size() + " templates to cleanup on secondary storage host: " + store.getName());
+ " templates to cleanup on secondary storage host: "
+ store.getName());
for (TemplateDataStoreVO destroyedTemplateStoreVO : destroyedTemplateStoreVOs) { for (TemplateDataStoreVO destroyedTemplateStoreVO : destroyedTemplateStoreVOs) {
if (!_tmpltMgr if (!_tmpltMgr.templateIsDeleteable(destroyedTemplateStoreVO)) {
.templateIsDeleteable(destroyedTemplateStoreVO)) {
if (s_logger.isDebugEnabled()) { if (s_logger.isDebugEnabled()) {
s_logger.debug("Not deleting template at: " s_logger.debug("Not deleting template at: " + destroyedTemplateStoreVO);
+ destroyedTemplateStoreVO);
} }
continue; continue;
} }
if (s_logger.isDebugEnabled()) { if (s_logger.isDebugEnabled()) {
s_logger.debug("Deleting template store: " s_logger.debug("Deleting template store: " + destroyedTemplateStoreVO);
+ destroyedTemplateStoreVO);
} }
VMTemplateVO destroyedTemplate = this._vmTemplateDao.findById(destroyedTemplateStoreVO.getTemplateId()); VMTemplateVO destroyedTemplate = this._vmTemplateDao.findById(destroyedTemplateStoreVO.getTemplateId());
if ( destroyedTemplate == null ){ if (destroyedTemplate == null) {
s_logger.error("Cannot find template : " + destroyedTemplateStoreVO.getTemplateId() + " from template table"); s_logger.error("Cannot find template : " + destroyedTemplateStoreVO.getTemplateId() + " from template table");
throw new CloudRuntimeException("Template " + destroyedTemplateStoreVO.getTemplateId() + " is found in secondary storage, but not found in template table"); throw new CloudRuntimeException("Template " + destroyedTemplateStoreVO.getTemplateId()
+ " is found in secondary storage, but not found in template table");
} }
String installPath = destroyedTemplateStoreVO String installPath = destroyedTemplateStoreVO.getInstallPath();
.getInstallPath();
if (installPath != null) { if (installPath != null) {
EndPoint ep = _epSelector.select(store); EndPoint ep = _epSelector.select(store);
Command cmd = new DeleteTemplateCommand( Command cmd = new DeleteTemplateCommand(store.getTO(), store.getUri(), destroyedTemplateStoreVO.getInstallPath(),
store.getTO(), destroyedTemplate.getId(), destroyedTemplate.getAccountId());
store.getUri(),
destroyedTemplateStoreVO
.getInstallPath(),
destroyedTemplate.getId(),
destroyedTemplate.getAccountId()
);
Answer answer = ep.sendMessage(cmd); Answer answer = ep.sendMessage(cmd);
if (answer == null || !answer.getResult()) { if (answer == null || !answer.getResult()) {
s_logger.debug("Failed to delete " s_logger.debug("Failed to delete " + destroyedTemplateStoreVO + " due to "
+ destroyedTemplateStoreVO + ((answer == null) ? "answer is null" : answer.getDetails()));
+ " due to "
+ ((answer == null) ? "answer is null"
: answer.getDetails()));
} else { } else {
_templateStoreDao _templateStoreDao.remove(destroyedTemplateStoreVO.getId());
.remove(destroyedTemplateStoreVO.getId()); s_logger.debug("Deleted template at: " + destroyedTemplateStoreVO.getInstallPath());
s_logger.debug("Deleted template at: "
+ destroyedTemplateStoreVO
.getInstallPath());
} }
} else { } else {
_templateStoreDao.remove(destroyedTemplateStoreVO _templateStoreDao.remove(destroyedTemplateStoreVO.getId());
.getId());
} }
} }
} catch (Exception e) { } catch (Exception e) {
s_logger.warn( s_logger.warn("problem cleaning up templates in secondary storage store " + store.getName(), e);
"problem cleaning up templates in secondary storage store "
+ store.getName(), e);
} }
} }
List<HostVO> secondaryStorageHosts = _ssvmMgr
.listSecondaryStorageHostsInAllZones();
// Cleanup snapshot in secondary storage hosts // Cleanup snapshot in secondary storage hosts
for (HostVO secondaryStorageHost : secondaryStorageHosts) { for (DataStore store : imageStores) {
try { try {
long hostId = secondaryStorageHost.getId(); List<Long> vIDs = findAllVolumeIdInSnapshotTable(store.getId());
List<Long> vIDs = findAllVolumeIdInSnapshotTable(hostId);
if (vIDs == null) { if (vIDs == null) {
continue; continue;
} }
for (Long volumeId : vIDs) { for (Long volumeId : vIDs) {
boolean lock = false; boolean lock = false;
try { try {
VolumeVO volume = _volsDao VolumeVO volume = _volsDao.findByIdIncludingRemoved(volumeId);
.findByIdIncludingRemoved(volumeId);
if (volume.getRemoved() == null) { if (volume.getRemoved() == null) {
volume = _volsDao.acquireInLockTable(volumeId, volume = _volsDao.acquireInLockTable(volumeId, 10);
10);
if (volume == null) { if (volume == null) {
continue; continue;
} }
@ -1315,25 +1287,18 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
if (snapshots == null) { if (snapshots == null) {
continue; continue;
} }
CleanupSnapshotBackupCommand cmd = new CleanupSnapshotBackupCommand( EndPoint ep = _epSelector.select(store);
secondaryStorageHost.getStorageUrl(), CleanupSnapshotBackupCommand cmd = new CleanupSnapshotBackupCommand(store.getUri(), store.getScope().getScopeId(),
secondaryStorageHost.getDataCenterId(),
volume.getAccountId(), volumeId, snapshots); volume.getAccountId(), volumeId, snapshots);
Answer answer = _agentMgr.sendToSecStorage( Answer answer = ep.sendMessage(cmd);
secondaryStorageHost, cmd);
if ((answer == null) || !answer.getResult()) { if ((answer == null) || !answer.getResult()) {
String details = "Failed to cleanup snapshots for volume " String details = "Failed to cleanup snapshots for volume " + volumeId + " due to "
+ volumeId + (answer == null ? "null" : answer.getDetails());
+ " due to "
+ (answer == null ? "null" : answer
.getDetails());
s_logger.warn(details); s_logger.warn(details);
} }
} catch (Exception e1) { } catch (Exception e1) {
s_logger.warn( s_logger.warn("problem cleaning up snapshots in secondary storage store " + store.getName(), e1);
"problem cleaning up snapshots in secondary storage "
+ secondaryStorageHost, e1);
} finally { } finally {
if (lock) { if (lock) {
_volsDao.releaseFromLockTable(volumeId); _volsDao.releaseFromLockTable(volumeId);
@ -1341,63 +1306,41 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
} }
} }
} catch (Exception e2) { } catch (Exception e2) {
s_logger.warn( s_logger.warn("problem cleaning up snapshots in secondary storage store " + store.getName(), e2);
"problem cleaning up snapshots in secondary storage "
+ secondaryStorageHost, e2);
} }
} }
// CleanUp volumes on Secondary Storage. // CleanUp volumes on Secondary Storage.
for (HostVO secondaryStorageHost : secondaryStorageHosts) { for (DataStore store : imageStores) {
try { try {
long hostId = secondaryStorageHost.getId(); List<VolumeDataStoreVO> destroyedStoreVOs = _volumeStoreDao.listDestroyed(store.getId());
List<VolumeHostVO> destroyedVolumeHostVOs = _volumeHostDao s_logger.debug("Secondary storage garbage collector found " + destroyedStoreVOs.size()
.listDestroyed(hostId); + " volumes to cleanup on secondary storage host: " + store.getName());
s_logger.debug("Secondary storage garbage collector found " for (VolumeDataStoreVO destroyedStoreVO : destroyedStoreVOs) {
+ destroyedVolumeHostVOs.size()
+ " templates to cleanup on secondary storage host: "
+ secondaryStorageHost.getName());
for (VolumeHostVO destroyedVolumeHostVO : destroyedVolumeHostVOs) {
if (s_logger.isDebugEnabled()) { if (s_logger.isDebugEnabled()) {
s_logger.debug("Deleting volume host: " s_logger.debug("Deleting volume on store: " + destroyedStoreVO);
+ destroyedVolumeHostVO);
} }
String installPath = destroyedVolumeHostVO String installPath = destroyedStoreVO.getInstallPath();
.getInstallPath();
if (installPath != null) { if (installPath != null) {
Answer answer = _agentMgr.sendToSecStorage( EndPoint ep = _epSelector.select(store);
secondaryStorageHost, DeleteVolumeCommand cmd = new DeleteVolumeCommand(store.getUri(), destroyedStoreVO.getInstallPath());
new DeleteVolumeCommand( Answer answer = ep.sendMessage(cmd);
secondaryStorageHost
.getStorageUrl(),
destroyedVolumeHostVO
.getInstallPath()));
if (answer == null || !answer.getResult()) { if (answer == null || !answer.getResult()) {
s_logger.debug("Failed to delete " s_logger.debug("Failed to delete " + destroyedStoreVO + " due to "
+ destroyedVolumeHostVO + ((answer == null) ? "answer is null" : answer.getDetails()));
+ " due to "
+ ((answer == null) ? "answer is null"
: answer.getDetails()));
} else { } else {
_volumeHostDao.remove(destroyedVolumeHostVO _volumeStoreDao.remove(destroyedStoreVO.getId());
.getId()); s_logger.debug("Deleted volume at: " + destroyedStoreVO.getInstallPath());
s_logger.debug("Deleted volume at: "
+ destroyedVolumeHostVO
.getInstallPath());
} }
} else { } else {
_volumeHostDao _volumeStoreDao.remove(destroyedStoreVO.getId());
.remove(destroyedVolumeHostVO.getId());
} }
} }
} catch (Exception e2) { } catch (Exception e2) {
s_logger.warn( s_logger.warn("problem cleaning up volumes in secondary storage store " + store.getName(), e2);
"problem cleaning up volumes in secondary storage "
+ secondaryStorageHost, e2);
} }
} }
} catch (Exception e3) { } catch (Exception e3) {

View File

@ -61,6 +61,8 @@ import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao; import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO; import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreVO;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -123,12 +125,10 @@ import com.cloud.storage.dao.SnapshotPolicyDao;
import com.cloud.storage.dao.StoragePoolHostDao; import com.cloud.storage.dao.StoragePoolHostDao;
import com.cloud.storage.dao.StoragePoolWorkDao; import com.cloud.storage.dao.StoragePoolWorkDao;
import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VMTemplateDao;
import com.cloud.storage.dao.VMTemplateHostDao;
import com.cloud.storage.dao.VMTemplatePoolDao; import com.cloud.storage.dao.VMTemplatePoolDao;
import com.cloud.storage.dao.VMTemplateS3Dao; import com.cloud.storage.dao.VMTemplateS3Dao;
import com.cloud.storage.dao.VMTemplateSwiftDao; import com.cloud.storage.dao.VMTemplateSwiftDao;
import com.cloud.storage.dao.VolumeDao; import com.cloud.storage.dao.VolumeDao;
import com.cloud.storage.dao.VolumeHostDao;
import com.cloud.storage.download.DownloadMonitor; import com.cloud.storage.download.DownloadMonitor;
import com.cloud.storage.s3.S3Manager; import com.cloud.storage.s3.S3Manager;
import com.cloud.storage.secondary.SecondaryStorageVmManager; import com.cloud.storage.secondary.SecondaryStorageVmManager;
@ -149,9 +149,6 @@ import com.cloud.utils.Pair;
import com.cloud.utils.UriUtils; import com.cloud.utils.UriUtils;
import com.cloud.utils.component.ManagerBase; import com.cloud.utils.component.ManagerBase;
import com.cloud.utils.db.DB; import com.cloud.utils.db.DB;
import com.cloud.utils.db.JoinBuilder;
import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.Transaction; import com.cloud.utils.db.Transaction;
import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.fsm.NoTransitionException; import com.cloud.utils.fsm.NoTransitionException;
@ -233,7 +230,7 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
@Inject @Inject
protected UserVmDao _userVmDao; protected UserVmDao _userVmDao;
@Inject @Inject
VolumeHostDao _volumeHostDao; VolumeDataStoreDao _volumeStoreDao;
@Inject @Inject
protected VMInstanceDao _vmInstanceDao; protected VMInstanceDao _vmInstanceDao;
@Inject @Inject
@ -1248,9 +1245,9 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
} }
if (volume.getState() == Volume.State.UploadOp) { if (volume.getState() == Volume.State.UploadOp) {
VolumeHostVO volumeHost = _volumeHostDao.findByVolumeId(volume VolumeDataStoreVO volumeStore = _volumeStoreDao.findByVolume(volume
.getId()); .getId());
if (volumeHost.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOAD_IN_PROGRESS) { if (volumeStore.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOAD_IN_PROGRESS) {
throw new InvalidParameterValueException( throw new InvalidParameterValueException(
"Please specify a volume that is not uploading"); "Please specify a volume that is not uploading");
} }
@ -1424,8 +1421,8 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
private VolumeInfo copyVolume(StoragePoolVO rootDiskPool private VolumeInfo copyVolume(StoragePoolVO rootDiskPool
, VolumeInfo volume, VMInstanceVO vm, VMTemplateVO rootDiskTmplt, DataCenterVO dcVO, , VolumeInfo volume, VMInstanceVO vm, VMTemplateVO rootDiskTmplt, DataCenterVO dcVO,
HostPodVO pod, DiskOfferingVO diskVO, ServiceOfferingVO svo, HypervisorType rootDiskHyperType) throws NoTransitionException { HostPodVO pod, DiskOfferingVO diskVO, ServiceOfferingVO svo, HypervisorType rootDiskHyperType) throws NoTransitionException {
VolumeHostVO volHostVO = _volumeHostDao.findByHostVolume(volume.getDataStore().getId(), volume.getId()); VolumeDataStoreVO volStoreVO = _volumeStoreDao.findByStoreVolume(volume.getDataStore().getId(), volume.getId());
if (!volHostVO if (!volStoreVO
.getFormat() .getFormat()
.getFileExtension() .getFileExtension()
.equals( .equals(
@ -1433,7 +1430,7 @@ public class VolumeManagerImpl extends ManagerBase implements VolumeManager {
.getClusterId()))) { .getClusterId()))) {
throw new InvalidParameterValueException( throw new InvalidParameterValueException(
"Failed to attach volume to VM since volumes format " "Failed to attach volume to VM since volumes format "
+ volHostVO.getFormat() + volStoreVO.getFormat()
.getFileExtension() .getFileExtension()
+ " is not compatible with the vm hypervisor type"); + " is not compatible with the vm hypervisor type");
} }

View File

@ -96,8 +96,6 @@ public class DownloadMonitorImpl extends ManagerBase implements DownloadMonitor
@Inject @Inject
VolumeDao _volumeDao; VolumeDao _volumeDao;
@Inject @Inject
VolumeHostDao _volumeHostDao;
@Inject
VolumeDataStoreDao _volumeStoreDao; VolumeDataStoreDao _volumeStoreDao;
@Inject @Inject
AlertManager _alertMgr; AlertManager _alertMgr;

View File

@ -355,8 +355,6 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
@Inject @Inject
protected ItWorkDao _workDao; protected ItWorkDao _workDao;
@Inject @Inject
protected VolumeHostDao _volumeHostDao;
@Inject
ResourceTagDao _resourceTagDao; ResourceTagDao _resourceTagDao;
@Inject @Inject
PhysicalNetworkDao _physicalNetworkDao; PhysicalNetworkDao _physicalNetworkDao;