Skip to content

Commit 374944a

Browse files
committed
Detach from hypervisor after copy to secondary storage
1 parent 252942f commit 374944a

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/StorageSystemDataMotionStrategy.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import com.cloud.storage.DiskOfferingVO;
4040
import com.cloud.storage.SnapshotVO;
4141
import com.cloud.storage.Storage.ImageFormat;
42+
import com.cloud.storage.Volume;
4243
import com.cloud.storage.VolumeDetailVO;
4344
import com.cloud.storage.VolumeVO;
4445
import com.cloud.storage.dao.DiskOfferingDao;
@@ -86,6 +87,7 @@
8687
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
8788
import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
8889
import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
90+
import org.apache.cloudstack.storage.to.SnapshotObjectTO;
8991
import org.apache.cloudstack.storage.to.VolumeObjectTO;
9092
import org.apache.commons.lang.StringUtils;
9193
import org.apache.log4j.Logger;
@@ -445,6 +447,29 @@ private void handleCopyDataToSecondaryStorage(SnapshotInfo snapshotInfo, DataObj
445447
throw new CloudRuntimeException(msg + ex.getMessage());
446448

447449
} finally {
450+
451+
// detach and remove access after the volume is created
452+
SnapshotObjectTO snapshotObjectTO = (SnapshotObjectTO) snapshotInfo.getTO();
453+
DiskTO disk = new DiskTO(snapshotObjectTO, null, snapshotInfo.getPath(), Volume.Type.UNKNOWN);
454+
DettachCommand cmd = new DettachCommand(disk, null);
455+
StoragePoolVO storagePool = _storagePoolDao.findById(srcDataStore.getId());
456+
457+
cmd.setManaged(true);
458+
cmd.setStorageHost(storagePool.getHostAddress());
459+
cmd.setStoragePort(storagePool.getPort());
460+
cmd.set_iScsiName(getProperty(snapshotInfo.getId(), DiskTO.IQN));
461+
462+
try {
463+
DettachAnswer dettachAnswer = (DettachAnswer) _agentMgr.send(hostVO.getId(), cmd);
464+
465+
if (!dettachAnswer.getResult()) {
466+
throw new CloudRuntimeException("Error detaching volume:" + dettachAnswer.getDetails());
467+
}
468+
469+
} catch (Exception e) {
470+
LOGGER.warn("Error detaching volume for snapshot " + snapshotInfo.getId() + " Error: " + e.getMessage());
471+
}
472+
448473
try {
449474
_volumeService.revokeAccess(snapshotInfo, hostVO, srcDataStore);
450475
}

0 commit comments

Comments
 (0)