diff --git a/engine/api/src/org/apache/cloudstack/storage/image/datastore/ImageStoreEntity.java b/engine/api/src/org/apache/cloudstack/storage/image/datastore/ImageStoreEntity.java index 7ebfd0d4481..be823647e64 100644 --- a/engine/api/src/org/apache/cloudstack/storage/image/datastore/ImageStoreEntity.java +++ b/engine/api/src/org/apache/cloudstack/storage/image/datastore/ImageStoreEntity.java @@ -27,6 +27,7 @@ import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo; import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo; import com.cloud.storage.ImageStore; +import com.cloud.storage.Upload; import com.cloud.storage.Storage.ImageFormat; public interface ImageStoreEntity extends DataStore, ImageStore { @@ -44,5 +45,5 @@ public interface ImageStoreEntity extends DataStore, ImageStore { String createEntityExtractUrl(String installPath, ImageFormat format, DataObject dataObject); // get the entity download URL - void deleteExtractUrl(String installPath, String url); + void deleteExtractUrl(String installPath, String url, Upload.Type volume); } diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/store/ImageStoreImpl.java b/engine/storage/image/src/org/apache/cloudstack/storage/image/store/ImageStoreImpl.java index 7bbe324fd04..5c0595549ac 100644 --- a/engine/storage/image/src/org/apache/cloudstack/storage/image/store/ImageStoreImpl.java +++ b/engine/storage/image/src/org/apache/cloudstack/storage/image/store/ImageStoreImpl.java @@ -45,6 +45,7 @@ import com.cloud.agent.api.to.DataStoreTO; import com.cloud.storage.DataStoreRole; import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.dao.VMTemplateDao; +import com.cloud.storage.Upload; import com.cloud.utils.component.ComponentContext; public class ImageStoreImpl implements ImageStoreEntity { @@ -195,8 +196,8 @@ public class ImageStoreImpl implements ImageStoreEntity { } @Override - public void deleteExtractUrl(String installPath, String url) { - driver.deleteEntityExtractUrl(this, installPath, url); + public void deleteExtractUrl(String installPath, String url, Upload.Type entityType ) { + driver.deleteEntityExtractUrl(this, installPath, url, entityType); } } diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/BaseImageStoreDriverImpl.java b/engine/storage/src/org/apache/cloudstack/storage/image/BaseImageStoreDriverImpl.java index 2905f081061..8e884d530ea 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/image/BaseImageStoreDriverImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/image/BaseImageStoreDriverImpl.java @@ -30,6 +30,7 @@ import com.cloud.storage.VolumeVO; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VolumeDao; import com.cloud.storage.download.DownloadMonitor; +import com.cloud.storage.Upload; import org.apache.cloudstack.engine.subsystem.api.storage.CopyCommandResult; import org.apache.cloudstack.engine.subsystem.api.storage.CreateCmdResult; import org.apache.cloudstack.engine.subsystem.api.storage.DataObject; @@ -261,7 +262,7 @@ public abstract class BaseImageStoreDriverImpl implements ImageStoreDriver { } @Override - public void deleteEntityExtractUrl(DataStore store, String installPath, String url){ + public void deleteEntityExtractUrl(DataStore store, String installPath, String url, Upload.Type entityType){ } } diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/ImageStoreDriver.java b/engine/storage/src/org/apache/cloudstack/storage/image/ImageStoreDriver.java index 444a6c731d5..d7d435df492 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/image/ImageStoreDriver.java +++ b/engine/storage/src/org/apache/cloudstack/storage/image/ImageStoreDriver.java @@ -23,11 +23,13 @@ import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreDriver; import com.cloud.storage.Storage.ImageFormat; +import com.cloud.storage.Upload; +import com.cloud.storage.Upload.Type; public interface ImageStoreDriver extends DataStoreDriver { String createEntityExtractUrl(DataStore store, String installPath, ImageFormat format, DataObject dataObject); - void deleteEntityExtractUrl(DataStore store, String installPath, String url); + void deleteEntityExtractUrl(DataStore store, String installPath, String downloadUrl, Upload.Type entityType); } diff --git a/plugins/storage/image/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackImageStoreDriverImpl.java b/plugins/storage/image/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackImageStoreDriverImpl.java index 479665389bc..deba61b0643 100644 --- a/plugins/storage/image/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackImageStoreDriverImpl.java +++ b/plugins/storage/image/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackImageStoreDriverImpl.java @@ -81,14 +81,21 @@ public class CloudStackImageStoreDriverImpl extends BaseImageStoreDriverImpl { } @Override - public void deleteEntityExtractUrl(DataStore store, String installPath, String downloadUrl) { + public void deleteEntityExtractUrl(DataStore store, String installPath, String downloadUrl, Upload.Type entityType) { // find an endpoint to send command EndPoint ep = _epSelector.select(store); - // Create Symlink at ssvm - //CreateEntityDownloadURLCommand cmd = new CreateEntityDownloadURLCommand(((ImageStoreEntity) store).getMountPoint(), installPath, uuid); - DeleteEntityDownloadURLCommand cmd = new DeleteEntityDownloadURLCommand(installPath, Upload.Type.VOLUME, downloadUrl, ((ImageStoreEntity) store).getMountPoint()); - Answer ans = ep.sendMessage(cmd); + // Delete Symlink at ssvm. In case of volume also delete the volume. + DeleteEntityDownloadURLCommand cmd = new DeleteEntityDownloadURLCommand(installPath, entityType, downloadUrl, ((ImageStoreEntity) store).getMountPoint()); + + Answer ans = null; + if (ep == null) { + String errMsg = "No remote endpoint to send command, check if host or ssvm is down?"; + s_logger.error(errMsg); + ans = new Answer(cmd, false, errMsg); + } else { + ans = ep.sendMessage(cmd); + } if (ans == null || !ans.getResult()) { String errorString = "Unable to delete the url " + downloadUrl + " for path " + installPath + " on ssvm, " + ans.getDetails(); s_logger.error(errorString); diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index 2a79b0cf3d8..d892d8e2cb6 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -1214,7 +1214,7 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C // Remove it from image store ImageStoreEntity secStore = (ImageStoreEntity) _dataStoreMgr.getDataStore(volumeOnImageStore.getDataStoreId(), DataStoreRole.Image); - secStore.deleteExtractUrl(volumeOnImageStore.getInstallPath(), volumeOnImageStore.getExtractUrl()); + secStore.deleteExtractUrl(volumeOnImageStore.getInstallPath(), volumeOnImageStore.getExtractUrl(), Upload.Type.VOLUME); // Now remove it from DB. volumeOnImageStore.setExtractUrl(null); @@ -1240,7 +1240,7 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C // Remove it from image store ImageStoreEntity secStore = (ImageStoreEntity) _dataStoreMgr.getDataStore(templateOnImageStore.getDataStoreId(), DataStoreRole.Image); - secStore.deleteExtractUrl(templateOnImageStore.getInstallPath(), templateOnImageStore.getExtractUrl()); + secStore.deleteExtractUrl(templateOnImageStore.getInstallPath(), templateOnImageStore.getExtractUrl(), Upload.Type.TEMPLATE); // Now remove it from DB. templateOnImageStore.setExtractUrl(null);