Daniel Erez has uploaded a new change for review. Change subject: core: support remove template with Cinder disks ......................................................................
core: support remove template with Cinder disks Modified RemoveVmTemplate to remove template's Cinder disks. Change-Id: I03673ed3fe4494b32ea7271cfa2e8963787565da Bug-Url: https://bugzilla.redhat.com/1185826 Signed-off-by: Daniel Erez <de...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmTemplateCommand.java 1 file changed, 39 insertions(+), 4 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/46/39646/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmTemplateCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmTemplateCommand.java index 051cdaa..fc8a0b1 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmTemplateCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmTemplateCommand.java @@ -7,17 +7,22 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; import org.apache.commons.lang.StringUtils; +import org.ovirt.engine.core.bll.context.CommandContext; import org.ovirt.engine.core.bll.quota.QuotaConsumptionParameter; import org.ovirt.engine.core.bll.quota.QuotaStorageConsumptionParameter; import org.ovirt.engine.core.bll.quota.QuotaStorageDependent; +import org.ovirt.engine.core.bll.tasks.CommandCoordinatorUtil; import org.ovirt.engine.core.bll.validator.storage.DiskImagesValidator; import org.ovirt.engine.core.bll.validator.storage.StoragePoolValidator; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.LockProperties; import org.ovirt.engine.core.common.action.LockProperties.Scope; +import org.ovirt.engine.core.common.action.RemoveAllVmCinderDisksParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VdcReturnValueBase; import org.ovirt.engine.core.common.action.VmTemplateParametersBase; @@ -25,6 +30,7 @@ import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VmEntityType; import org.ovirt.engine.core.common.businessentities.VmTemplate; +import org.ovirt.engine.core.common.businessentities.storage.CinderDisk; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; import org.ovirt.engine.core.common.errors.VdcBllMessages; import org.ovirt.engine.core.common.locks.LockingGroup; @@ -43,13 +49,17 @@ private List<DiskImage> imageTemplates; private final Map<Guid, List<DiskImage>> storageToDisksMap = new HashMap<Guid, List<DiskImage>>(); - public RemoveVmTemplateCommand(T parameters) { - super(parameters); + public RemoveVmTemplateCommand(T parameters, CommandContext cmdContext) { + super(parameters, cmdContext); super.setVmTemplateId(parameters.getVmTemplateId()); parameters.setEntityInfo(new EntityInfo(VdcObjectType.VmTemplate, getVmTemplateId())); if (getVmTemplate() != null) { setStoragePoolId(getVmTemplate().getStoragePoolId()); } + } + + public RemoveVmTemplateCommand(T parameters) { + this(parameters, null); } public RemoveVmTemplateCommand(Guid vmTemplateId) { @@ -192,16 +202,24 @@ @Override protected void executeCommand() { + final List<CinderDisk> cinderDisks = + ImagesHandler.filterDisksBasedOnCinder(DbFacade.getInstance() + .getDiskDao() + .getAllForVm(getVmTemplateId())); // Set VM to lock status immediately, for reducing race condition. VmTemplateHandler.lockVmTemplateInTransaction(getVmTemplateId(), getCompensationContext()); - if (!imageTemplates.isEmpty()) { + if (!imageTemplates.isEmpty() || ! cinderDisks.isEmpty()) { TransactionSupport.executeInNewTransaction(new TransactionMethod<Void>() { @Override public Void runInTransaction() { - if (removeVmTemplateImages()) { + if (!imageTemplates.isEmpty() && removeVmTemplateImages()) { VmHandler.removeVmInitFromDB(getVmTemplate()); + setSucceeded(true); + } + if (!cinderDisks.isEmpty()) { + removeCinderDisks(cinderDisks); setSucceeded(true); } return null; @@ -213,6 +231,23 @@ } } + /** + * The following method performs a removing of all cinder disks from vm. These is only DB operation + */ + private void removeCinderDisks(List<CinderDisk> cinderDisks) { + RemoveAllVmCinderDisksParameters removeParam = new RemoveAllVmCinderDisksParameters(getVmTemplateId(), cinderDisks); + removeParam.setParentHasTasks(!getReturnValue().getVdsmTaskIdList().isEmpty()); + Future<VdcReturnValueBase> future = + CommandCoordinatorUtil.executeAsyncCommand(VdcActionType.RemoveAllVmCinderDisks, + withRootCommandInfo(removeParam, getActionType()), + cloneContextAndDetachFromParent()); + try { + future.get().getActionReturnValue(); + } catch (InterruptedException | ExecutionException e) { + log.error("Exception", e); + } + } + @Override protected Map<String, Pair<String, String>> getExclusiveLocks() { if (getVmTemplate() != null) { -- To view, visit https://gerrit.ovirt.org/39646 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I03673ed3fe4494b32ea7271cfa2e8963787565da Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Daniel Erez <de...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches