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

Reply via email to