mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Remove VolumeHostDao references from codebase.
This commit is contained in:
parent
0cfef3aa4e
commit
792fc471a2
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user