Liron Aravot has uploaded a new change for review.

Change subject: core: perform ovf update for domain when it's deactivated
......................................................................

core: perform ovf update for domain when it's deactivated

When a storage domain is being deactivated, we can attempt to perform an
ovf update to that domain if the data center version supports it, if the
update fails the domain will still be moved to maintenance.

Ovf stores are created for a domain according to the config
value StorageDomainOvfStoreCount on each OvfDataUpdater run, so the same
case should be supported on deactivation of domain (OVF stores will be
created if needed).

Change-Id: I54cc929937d3b14dc49a2edab9e763cbe603a9c3
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1138124
Signed-off-by: Liron Aravot <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateOvfStoresForStorageDomainCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateOvfVolumeForStorageDomainCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImageSpmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MultipleActionsRunnersFactory.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfDataUpdater.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStorageDomainCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UploadStreamCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommand.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainWithOvfUpdateCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcActionUtils.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddDiskParameters.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/CreateOvfStoresForStorageDomainCommandParameters.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/CreateOvfVolumeForStorageDomainCommandParameters.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ProcessOvfUpdateForStorageDomainCommandParameters.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/StorageDomainPoolParametersBase.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/Disk.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/job/StepEnum.java
M 
backend/manager/modules/common/src/test/java/org/ovirt/engine/core/common/VdcActionUtilsTest.java
M 
backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties
M 
backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAttachedStorageDomainResource.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendAttachedStorageDomainResourceTest.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterStorageListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageDataCenterListModel.java
29 files changed, 411 insertions(+), 78 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/17/35817/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
index 700a70d..814fb9d 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
@@ -184,7 +184,7 @@
         StorageDomainValidator storageDomainValidator = 
createStorageDomainValidator();
         // vm agnostic checks
         returnValue =
-                validate(storageDomainValidator.isDomainExistAndActive()) &&
+                (getParameters().isSkipDomainCheck() || 
validate(storageDomainValidator.isDomainExistAndActive())) &&
                 !isShareableDiskOnGlusterDomain() &&
                 checkImageConfiguration() &&
                 
validate(storageDomainValidator.hasSpaceForNewDisk(getDiskImageInfo())) &&
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java
index ab37b88..284aefb 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java
@@ -747,6 +747,10 @@
         rollbackQuota();
     }
 
+    protected boolean hasParentCommand() {
+        return getParameters().getParentCommand() != VdcActionType.Unknown;
+    }
+
     private boolean internalCanDoAction() {
         boolean returnValue = false;
         try {
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateOvfStoresForStorageDomainCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateOvfStoresForStorageDomainCommand.java
index 2c2ee49..46e0508 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateOvfStoresForStorageDomainCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateOvfStoresForStorageDomainCommand.java
@@ -7,7 +7,8 @@
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.action.AddImageFromScratchParameters;
 import 
org.ovirt.engine.core.common.action.CreateOvfStoresForStorageDomainCommandParameters;
-import org.ovirt.engine.core.common.action.StorageDomainParametersBase;
+import 
org.ovirt.engine.core.common.action.CreateOvfVolumeForStorageDomainCommandParameters;
+import 
org.ovirt.engine.core.common.action.ProcessOvfUpdateForStorageDomainCommandParameters;
 import org.ovirt.engine.core.common.action.VdcActionParametersBase;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.action.VdcReturnValueBase;
@@ -29,18 +30,16 @@
         super(parameters, commandContext);
     }
 
-
     @Override
     protected void executeCommand() {
         for (int i = 0; i < getParameters().getStoresCount(); i++) {
-            StorageDomainParametersBase storageDomainParametersBase = new 
StorageDomainParametersBase(getParameters().getStoragePoolId(),
-                    getParameters().getStorageDomainId());
-            storageDomainParametersBase.setParentCommand(getActionType());
-            storageDomainParametersBase.setParentParameters(getParameters());
+            CreateOvfVolumeForStorageDomainCommandParameters parameters = 
createCreateOvfVolumeForStorageDomainParams();
+
             VdcReturnValueBase vdcReturnValueBase =
                     
runInternalAction(VdcActionType.CreateOvfVolumeForStorageDomain,
-                            storageDomainParametersBase);
-            
getReturnValue().getVdsmTaskIdList().addAll(vdcReturnValueBase.getInternalVdsmTaskIdList());
+                            parameters);
+
+            
getReturnValue().getInternalVdsmTaskIdList().addAll(vdcReturnValueBase.getInternalVdsmTaskIdList());
         }
 
         setSucceeded(true);
@@ -64,9 +63,9 @@
     private void endCommandOperations() {
         boolean atleastOneSucceeded = false;
         for (VdcActionParametersBase p : 
getParameters().getImagesParameters()) {
+            Guid diskId = ((AddImageFromScratchParameters) 
p).getDiskInfo().getId();
             if (p.getTaskGroupSuccess()) {
                 atleastOneSucceeded = true;
-                Guid diskId = ((AddImageFromScratchParameters) 
p).getDiskInfo().getId();
 
                 StorageDomainOvfInfo storageDomainOvfInfoDb =
                         getStorageDomainOvfInfoDao()
@@ -86,6 +85,7 @@
                 getBackend().endAction(p.getCommandType(),
                         p,
                         
getContext().clone().withoutCompensationContext().withoutExecutionContext().withoutLock());
+                addCustomValue("DiskId", diskId.toString());
                 AuditLogDirector.log(this, 
AuditLogType.CREATE_OVF_STORE_FOR_STORAGE_DOMAIN_FAILED);
             }
         }
@@ -94,11 +94,36 @@
             // if we'd have the possibility to know whether we failed because 
of failure to acquire locks as there's an
             // update in progress, we could
             // try again (avoid setSucceeded(true) in that scenario).
-            
getBackend().runInternalAction(VdcActionType.ProcessOvfUpdateForStorageDomain, 
getParameters());
+            VdcReturnValueBase returnValue = 
getBackend().runInternalAction(VdcActionType.ProcessOvfUpdateForStorageDomain, 
createProcessOvfUpdateForDomainParams());
+            
getReturnValue().getInternalVdsmTaskIdList().addAll(returnValue.getInternalVdsmTaskIdList());
         }
+
         setSucceeded(true);
     }
 
+    private ProcessOvfUpdateForStorageDomainCommandParameters 
createProcessOvfUpdateForDomainParams() {
+        ProcessOvfUpdateForStorageDomainCommandParameters params = new 
ProcessOvfUpdateForStorageDomainCommandParameters(getParameters().getStoragePoolId(),
 getParameters().getStorageDomainId());
+        params.setSkipDomainChecks(getParameters().isSkipDomainChecks());
+        params.setParentCommand(getParameters().getParentCommand());
+        params.setParentParameters(getParameters().getParentParameters());
+        return params;
+    }
+
+    public CreateOvfVolumeForStorageDomainCommandParameters 
createCreateOvfVolumeForStorageDomainParams() {
+        CreateOvfVolumeForStorageDomainCommandParameters parameters = new 
CreateOvfVolumeForStorageDomainCommandParameters(getParameters().getStoragePoolId(),
+                getParameters().getStorageDomainId());
+        parameters.setSkipDomainChecks(getParameters().isSkipDomainChecks());
+        if (hasParentCommand()) {
+            parameters.setParentCommand(getParameters().getParentCommand());
+            
parameters.setParentParameters(getParameters().getParentParameters());
+        } else {
+            parameters.setParentCommand(getActionType());
+            parameters.setParentParameters(getParameters());
+        }
+
+        return parameters;
+    }
+
     protected StorageDomainOvfInfoDao getStorageDomainOvfInfoDao() {
         return getDbFacade().getStorageDomainOvfInfoDao();
     }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateOvfVolumeForStorageDomainCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateOvfVolumeForStorageDomainCommand.java
index bb15ecc..639cec5 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateOvfVolumeForStorageDomainCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateOvfVolumeForStorageDomainCommand.java
@@ -1,15 +1,14 @@
 package org.ovirt.engine.core.bll;
 
-import org.ovirt.engine.core.bll.context.CommandContext;
-
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Date;
 
+import org.ovirt.engine.core.bll.context.CommandContext;
 import org.ovirt.engine.core.bll.storage.StorageDomainCommandBase;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.action.AddDiskParameters;
-import org.ovirt.engine.core.common.action.StorageDomainParametersBase;
+import 
org.ovirt.engine.core.common.action.CreateOvfVolumeForStorageDomainCommandParameters;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.action.VdcReturnValueBase;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
@@ -27,7 +26,7 @@
 
 @InternalCommandAttribute
 @NonTransactiveCommandAttribute
-public class CreateOvfVolumeForStorageDomainCommand<T extends 
StorageDomainParametersBase> extends StorageDomainCommandBase<T> {
+public class CreateOvfVolumeForStorageDomainCommand<T extends 
CreateOvfVolumeForStorageDomainCommandParameters> extends 
StorageDomainCommandBase<T> {
     public CreateOvfVolumeForStorageDomainCommand(T parameters, CommandContext 
cmdContext) {
         super(parameters, cmdContext);
         setStorageDomainId(getParameters().getStorageDomainId());
@@ -41,12 +40,12 @@
     @Override
 
     protected void executeCommand() {
-        DiskImage createdDisk = createDisk(getStorageDomainId());
         AddDiskParameters diskParameters = new AddDiskParameters(null, 
createDisk(getStorageDomainId()));
         diskParameters.setStorageDomainId(getStorageDomainId());
         diskParameters.setParentCommand(getParameters().getParentCommand());
         
diskParameters.setParentParameters(getParameters().getParentParameters());
         diskParameters.setShouldRemainIllegalOnFailedExecution(true);
+        
diskParameters.setSkipDomainCheck(getParameters().isSkipDomainChecks());
         VdcReturnValueBase vdcReturnValueBase =
                 runInternalActionWithTasksContext(VdcActionType.AddDisk, 
diskParameters);
         Guid createdId = (Guid)vdcReturnValueBase.getActionReturnValue();
@@ -56,8 +55,8 @@
         }
 
         if (!vdcReturnValueBase.getSucceeded()) {
-            addCustomValue("DiskAlias", createdDisk.getDiskAlias());
             if (createdId != null) {
+                addCustomValue("DiskId", createdId.toString());
                 AuditLogDirector.log(this, 
AuditLogType.CREATE_OVF_STORE_FOR_STORAGE_DOMAIN_FAILED);
             } else {
                 AuditLogDirector.log(this, 
AuditLogType.CREATE_OVF_STORE_FOR_STORAGE_DOMAIN_INITIATE_FAILED);
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImageSpmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImageSpmCommand.java
index a7e9a27..fd63cee 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImageSpmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImageSpmCommand.java
@@ -4,7 +4,6 @@
 import java.util.Map;
 
 import org.ovirt.engine.core.bll.context.CommandContext;
-import org.ovirt.engine.core.bll.storage.StoragePoolValidator;
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.action.ImagesContainterParametersBase;
 import org.ovirt.engine.core.common.action.LockProperties;
@@ -51,10 +50,6 @@
         setStoragePool(null);
         if (getStoragePool() == null) {
             return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_POOL_NOT_EXIST);
-        }
-
-        if (!validate(new StoragePoolValidator(getStoragePool()).isUp())) {
-            return false;
         }
 
         if (!getPoolSpmId().equals(getStoragePool().getspm_vds_id())) {
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MultipleActionsRunnersFactory.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MultipleActionsRunnersFactory.java
index f73a3c1..6704b20 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MultipleActionsRunnersFactory.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MultipleActionsRunnersFactory.java
@@ -21,7 +21,7 @@
                                                                     boolean 
isInternal, CommandContext commandContext) {
         MultipleActionsRunner runner;
         switch (actionType) {
-        case DeactivateStorageDomain: {
+        case DeactivateStorageDomainWithOvfUpdate: {
             runner = new 
DeactivateStorageDomainsMultipleActionRunner(actionType, parameters, 
commandContext, isInternal);
             break;
         }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfDataUpdater.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfDataUpdater.java
index 4e31c59..ce86e02 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfDataUpdater.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfDataUpdater.java
@@ -5,7 +5,7 @@
 import java.util.concurrent.TimeUnit;
 
 import org.ovirt.engine.core.common.FeatureSupported;
-import org.ovirt.engine.core.common.action.StorageDomainParametersBase;
+import 
org.ovirt.engine.core.common.action.ProcessOvfUpdateForStorageDomainCommandParameters;
 import org.ovirt.engine.core.common.action.StoragePoolParametersBase;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.action.VdcReturnValueBase;
@@ -46,7 +46,8 @@
     }
 
     protected void performOvfUpdateForDomain(Guid storagePoolId, Guid 
domainId) {
-        
Backend.getInstance().runInternalAction(VdcActionType.ProcessOvfUpdateForStorageDomain,
 new StorageDomainParametersBase(storagePoolId, domainId));
+        
Backend.getInstance().runInternalAction(VdcActionType.ProcessOvfUpdateForStorageDomain,
+                new 
ProcessOvfUpdateForStorageDomainCommandParameters(storagePoolId, domainId));
     }
 
     protected VdcReturnValueBase performOvfUpdateForStoragePool(Guid 
storagePoolId) {
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStorageDomainCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStorageDomainCommand.java
index d06db83..57e8825 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStorageDomainCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStorageDomainCommand.java
@@ -3,6 +3,7 @@
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Comparator;
@@ -15,6 +16,7 @@
 import java.util.Set;
 
 import org.apache.commons.lang.ObjectUtils;
+import org.apache.commons.lang.StringUtils;
 import org.ovirt.engine.core.bll.context.CommandContext;
 import org.ovirt.engine.core.bll.storage.StorageDomainCommandBase;
 import org.ovirt.engine.core.bll.validator.StorageDomainValidator;
@@ -22,7 +24,7 @@
 import 
org.ovirt.engine.core.common.action.CreateOvfStoresForStorageDomainCommandParameters;
 import org.ovirt.engine.core.common.action.LockProperties;
 import org.ovirt.engine.core.common.action.LockProperties.Scope;
-import org.ovirt.engine.core.common.action.StorageDomainParametersBase;
+import 
org.ovirt.engine.core.common.action.ProcessOvfUpdateForStorageDomainCommandParameters;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.action.VdcReturnValueBase;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
@@ -51,12 +53,13 @@
 
 @InternalCommandAttribute
 @NonTransactiveCommandAttribute
-public class ProcessOvfUpdateForStorageDomainCommand<T extends 
StorageDomainParametersBase> extends StorageDomainCommandBase<T> {
+public class ProcessOvfUpdateForStorageDomainCommand<T extends 
ProcessOvfUpdateForStorageDomainCommandParameters> extends 
StorageDomainCommandBase<T> {
     private LinkedList<Pair<StorageDomainOvfInfo, DiskImage>> 
domainOvfStoresInfoForUpdate = new LinkedList<>();
     private StorageDomain storageDomain;
     private int ovfDiskCount;
     private String postUpdateDescription;
     private Date updateDate;
+    private List<Guid> failedOvfDisks;
 
     public ProcessOvfUpdateForStorageDomainCommand(T parameters) {
         this(parameters, null);
@@ -81,9 +84,11 @@
     @Override
     protected boolean canDoAction() {
         loadStorageDomain();
-        StorageDomainValidator storageDomainValidator = new 
StorageDomainValidator(storageDomain);
-        if (!validate(storageDomainValidator.isDomainExistAndActive())) {
-            return false;
+        if (!getParameters().isSkipDomainChecks()) {
+            StorageDomainValidator storageDomainValidator = new 
StorageDomainValidator(storageDomain);
+            if (!validate(storageDomainValidator.isDomainExistAndActive())) {
+                return false;
+            }
         }
 
         return true;
@@ -231,6 +236,7 @@
         }
 
         boolean shouldUpdateLastOvfStore = false;
+        failedOvfDisks = new ArrayList<>();
 
         for (Pair<StorageDomainOvfInfo, DiskImage> pair : 
domainOvfStoresInfoForUpdate) {
             shouldUpdateLastOvfStore |=
@@ -248,6 +254,14 @@
                     lastOvfStoreForUpdate.getSecond(),
                     vmAndTemplatesIds);
         }
+
+        if (!failedOvfDisks.isEmpty()) {
+            AuditLogableBase auditLogableBase = new AuditLogableBase();
+            auditLogableBase.addCustomValue("DataCenterName", 
getStoragePool().getName());
+            auditLogableBase.addCustomValue("StorageDomainName", 
storageDomain.getName());
+            auditLogableBase.addCustomValue("DisksIds", 
StringUtils.join(failedOvfDisks, ", "));
+            AuditLogDirector.log(auditLogableBase, 
AuditLogType.UPDATE_FOR_OVF_STORES_FAILED);
+        }
     }
 
     private void setOvfVolumeDescription(Guid storagePoolId,
@@ -256,19 +270,10 @@
             Guid volumeId,
             String description) {
 
-            SetVolumeDescriptionVDSCommandParameters vdsCommandParameters =
-                    new 
SetVolumeDescriptionVDSCommandParameters(storagePoolId, storageDomainId,
-                            diskId, volumeId, description);
-        try {
-            runVdsCommand(VDSCommandType.SetVolumeDescription, 
vdsCommandParameters);
-        } catch (VdcBLLException e) {
-            AuditLogableBase auditLogableBase = new AuditLogableBase();
-            auditLogableBase.addCustomValue("DataCenterName", 
getStoragePool().getName());
-            auditLogableBase.addCustomValue("StorageDomainName", 
storageDomain.getName());
-            auditLogableBase.addCustomValue("DiskId", diskId.toString());
-            AuditLogDirector.log(auditLogableBase, 
AuditLogType.UPDATE_DESCRIPTION_FOR_OVF_STORE_FAILED);
-            throw e;
-        }
+        SetVolumeDescriptionVDSCommandParameters vdsCommandParameters =
+                new SetVolumeDescriptionVDSCommandParameters(storagePoolId, 
storageDomainId,
+                        diskId, volumeId, description);
+        runVdsCommand(VDSCommandType.SetVolumeDescription, 
vdsCommandParameters);
     }
 
     private boolean performOvfUpdateForDomain(byte[] ovfData,
@@ -299,11 +304,17 @@
                     new UploadStreamParameters(storagePoolId, storageDomainId,
                             diskId, volumeId, byteArrayInputStream,
                             size);
-            uploadStreamParameters.setParentCommand(getActionType());
-            uploadStreamParameters.setParentParameters(getParameters());
+
+            if (hasParentCommand()) {
+                
uploadStreamParameters.setParentCommand(getParameters().getParentCommand());
+                
uploadStreamParameters.setParentParameters(getParameters().getParentParameters());
+            } else {
+                uploadStreamParameters.setParentCommand(getActionType());
+                uploadStreamParameters.setParentParameters(getParameters());
+            }
 
             VdcReturnValueBase vdcReturnValueBase =
-                    runInternalAction(VdcActionType.UploadStream, 
uploadStreamParameters);
+                    
runInternalActionWithTasksContext(VdcActionType.UploadStream, 
uploadStreamParameters);
             if (vdcReturnValueBase.getSucceeded()) {
                 
storageDomainOvfInfo.setStatus(StorageDomainOvfInfoStatus.UPDATED);
                 storageDomainOvfInfo.setStoredOvfIds(vmAndTemplatesIds);
@@ -311,26 +322,40 @@
                 setOvfVolumeDescription(storagePoolId, storageDomainId,
                         diskId, volumeId, 
getPostUpdateOvfStoreDescription(size));
                 getStorageDomainOvfInfoDao().update(storageDomainOvfInfo);
-                
getReturnValue().getVdsmTaskIdList().addAll(vdcReturnValueBase.getInternalVdsmTaskIdList());
+                if (hasParentCommand()) {
+                    
getReturnValue().getInternalVdsmTaskIdList().addAll(vdcReturnValueBase.getInternalVdsmTaskIdList());
+                } else {
+                    
getReturnValue().getVdsmTaskIdList().addAll(vdcReturnValueBase.getInternalVdsmTaskIdList());
+                }
                 return true;
             }
         } catch (VdcBLLException e) {
             log.warnFormat("failed to update domain {0} ovf store disk {1}", 
storageDomainId, diskId);
         }
 
+        failedOvfDisks.add(diskId);
         return false;
     }
 
     @Override
     protected void executeCommand() {
-        updateOvfStoreContent();
-
         int missingDiskCount = Config.<Integer> 
getValue(ConfigValues.StorageDomainOvfStoreCount) - ovfDiskCount;
 
         if (missingDiskCount > 0) {
-            runInternalAction(VdcActionType.CreateOvfStoresForStorageDomain,
-                    new 
CreateOvfStoresForStorageDomainCommandParameters(getParameters().getStoragePoolId(),
-                            getParameters().getStorageDomainId(), 
missingDiskCount), cloneContextAndDetachFromParent());
+            CreateOvfStoresForStorageDomainCommandParameters parameters = new 
CreateOvfStoresForStorageDomainCommandParameters(getParameters().getStoragePoolId(),
+            getParameters().getStorageDomainId(), missingDiskCount);
+            
parameters.setParentParameters(getParameters().getParentParameters());
+            parameters.setParentCommand(getParameters().getParentCommand());
+            
parameters.setSkipDomainChecks(getParameters().isSkipDomainChecks());
+            VdcReturnValueBase returnValueBase = 
runInternalAction(VdcActionType.CreateOvfStoresForStorageDomain,
+                    parameters, cloneContextAndDetachFromParent());
+            if (hasParentCommand()) {
+                
getReturnValue().getInternalVdsmTaskIdList().addAll(returnValueBase.getInternalVdsmTaskIdList());
+            } else {
+                
getReturnValue().getVdsmTaskIdList().addAll(returnValueBase.getInternalVdsmTaskIdList());
+            }
+        } else {
+            updateOvfStoreContent();
         }
 
         setSucceeded(true);
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UploadStreamCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UploadStreamCommand.java
index 0073915..70fa454 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UploadStreamCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UploadStreamCommand.java
@@ -17,6 +17,10 @@
         super(parameters, cmdContext);
     }
 
+    public UploadStreamCommand(T parameters) {
+        this(parameters, null);
+    }
+
     @Override
     protected VDSReturnValue executeVdsCommand() {
         UploadStreamVDSCommandParameters vdsCommandParameters =
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommand.java
index 2693f78..c2e8090 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommand.java
@@ -70,7 +70,8 @@
 
     @Override
     protected LockProperties applyLockProperties(LockProperties 
lockProperties) {
-        return lockProperties.withScope(Scope.Execution);
+        Scope scope = getParameters().isSkipLock() ? Scope.None : 
Scope.Execution;
+        return lockProperties.withScope(scope);
     }
 
     protected void setNewMaster(StorageDomain value) {
@@ -105,6 +106,10 @@
 
     @Override
     protected boolean canDoAction() {
+        if (getParameters().isSkipChecks()) {
+            return true;
+        }
+
         if (!(checkStorageDomain())) {
             return false;
         }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainWithOvfUpdateCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainWithOvfUpdateCommand.java
new file mode 100644
index 0000000..cd1ba5d
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainWithOvfUpdateCommand.java
@@ -0,0 +1,184 @@
+package org.ovirt.engine.core.bll.storage;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute;
+import org.ovirt.engine.core.bll.context.CommandContext;
+import org.ovirt.engine.core.bll.tasks.CommandCoordinatorUtil;
+import org.ovirt.engine.core.common.FeatureSupported;
+import 
org.ovirt.engine.core.common.action.CreateOvfStoresForStorageDomainCommandParameters;
+import 
org.ovirt.engine.core.common.action.ProcessOvfUpdateForStorageDomainCommandParameters;
+import org.ovirt.engine.core.common.action.StorageDomainPoolParametersBase;
+import org.ovirt.engine.core.common.action.StoragePoolParametersBase;
+import org.ovirt.engine.core.common.action.VdcActionParametersBase;
+import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.action.VdcReturnValueBase;
+import org.ovirt.engine.core.common.businessentities.StorageDomainStatus;
+import org.ovirt.engine.core.common.businessentities.StorageDomainType;
+import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMap;
+import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMapId;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.compat.backendcompat.CommandExecutionStatus;
+import org.ovirt.engine.core.utils.threadpool.ThreadPoolUtil;
+
+@NonTransactiveCommandAttribute(forceCompensation = true)
+public class DeactivateStorageDomainWithOvfUpdateCommand<T extends 
StorageDomainPoolParametersBase> extends
+        DeactivateStorageDomainCommand<T> {
+
+    public DeactivateStorageDomainWithOvfUpdateCommand(T parameters) {
+        this(parameters, null);
+    }
+
+    public DeactivateStorageDomainWithOvfUpdateCommand(T parameters, 
CommandContext commandContext) {
+        super(parameters, commandContext);
+        setCommandShouldBeLogged(false);
+    }
+
+
+    /**
+     * Constructor for command creation when compensation is applied on startup
+     *
+     * @param commandId
+     */
+
+    protected DeactivateStorageDomainWithOvfUpdateCommand(Guid commandId) {
+        super(commandId);
+
+    }
+    @Override
+    protected void executeCommand() {
+        StoragePoolIsoMap map =
+                getStoragePoolIsoMapDAO().get
+                        (new 
StoragePoolIsoMapId(getParameters().getStorageDomainId(),
+                                getParameters().getStoragePoolId()));
+        changeDomainStatusWithCompensation(map, StorageDomainStatus.Unknown, 
StorageDomainStatus.Locked);
+
+        if (shouldPerformOvfUpdate()) {
+            runInternalAction(VdcActionType.ProcessOvfUpdateForStoragePool, 
new StoragePoolParametersBase(getStoragePoolId()), null);
+
+            VdcReturnValueBase tmpRetValue = 
runInternalActionWithTasksContext(VdcActionType.ProcessOvfUpdateForStorageDomain,
+                    createProcessOvfUpdateForDomainParams(), null);
+
+            
getReturnValue().getVdsmTaskIdList().addAll(tmpRetValue.getInternalVdsmTaskIdList());
+        }
+
+        if (getReturnValue().getVdsmTaskIdList().isEmpty()) {
+            executeDeactivateCommnad(true);
+        } else {
+            setCommandShouldBeLogged(false);
+        }
+
+        setSucceeded(true);
+    }
+
+    protected boolean shouldPerformOvfUpdate() {
+        return !getParameters().isInactive() && ovfOnAnyDomainSupported() && 
getStorageDomain().getStatus() == StorageDomainStatus.Active
+                && getStorageDomain().getStorageDomainType().isDataDomain();
+    }
+
+    private boolean ovfOnAnyDomainSupported() {
+        return 
FeatureSupported.ovfStoreOnAnyDomain(getStoragePool().getcompatibility_version());
+    }
+
+    private ProcessOvfUpdateForStorageDomainCommandParameters 
createProcessOvfUpdateForDomainParams() {
+        ProcessOvfUpdateForStorageDomainCommandParameters params = new 
ProcessOvfUpdateForStorageDomainCommandParameters(getStoragePoolId(), 
getStorageDomainId());
+        params.setParentCommand(getActionType());
+        params.setParentParameters(getParameters());
+        params.setSkipDomainChecks(true);
+        return params;
+    }
+
+    @Override
+    protected void endSuccessfully() {
+        endCommand();
+        setSucceeded(true);
+    }
+
+    @Override
+    protected void endWithFailure() {
+        endCommand();
+        setSucceeded(true);
+    }
+
+    public boolean hasExecutionEnded() {
+        return 
CommandCoordinatorUtil.getCommandExecutionStatus(getParameters().getCommandId())
 == CommandExecutionStatus.EXECUTED;
+    }
+
+    private void endCommand() {
+        if (!hasExecutionEnded()) {
+            return;
+        }
+
+        List<Guid> createdTasks = new LinkedList<>();
+
+        for (VdcActionParametersBase parametersBase : 
getParameters().getImagesParameters()) {
+            if (parametersBase.getCommandType() == 
VdcActionType.AddImageFromScratch) {
+                CreateOvfStoresForStorageDomainCommandParameters parameters = 
new 
CreateOvfStoresForStorageDomainCommandParameters(getParameters().getStoragePoolId(),
+                        getParameters().getStorageDomainId(), 0);
+                
parameters.getImagesParameters().addAll(getParameters().getImagesParameters());
+                parameters.setParentParameters(getParameters());
+                parameters.setParentCommand(getActionType());
+                parameters.setSkipDomainChecks(true);
+                VdcReturnValueBase vdsReturnValue = 
getBackend().endAction(VdcActionType.CreateOvfStoresForStorageDomain, 
parameters, null);
+                
createdTasks.addAll(vdsReturnValue.getInternalVdsmTaskIdList());
+                break;
+            }
+            
createdTasks.addAll(getBackend().endAction(parametersBase.getCommandType(), 
parametersBase, null).getInternalVdsmTaskIdList());
+        }
+
+        if (!createdTasks.isEmpty()) {
+            setSucceeded(true);
+            startPollingAsyncTasks(createdTasks);
+            return;
+        }
+
+        deactivateStorageDomainAfterTaskExecution();
+    }
+
+    private boolean executeDeactivateCommnad(boolean passContext) {
+        final StorageDomainPoolParametersBase params = new 
StorageDomainPoolParametersBase(getStorageDomainId(), getStoragePoolId());
+        params.setSkipChecks(true);
+        params.setSkipLock(true);
+        CommandContext context = passContext ? cloneContext() : null;
+        return 
getBackend().runInternalAction(VdcActionType.DeactivateStorageDomain, params, 
context).getSucceeded();
+    }
+
+    protected void deactivateStorageDomainAfterTaskExecution() {
+        final StorageDomainPoolParametersBase params = new 
StorageDomainPoolParametersBase(getStorageDomainId(), getStoragePoolId());
+        params.setSkipChecks(true);
+        boolean newThread = getStorageDomain().getStorageDomainType() == 
StorageDomainType.Master && getNewMaster(false) == null;
+        if (newThread) {
+            ThreadPoolUtil.execute(new Runnable() {
+                @Override
+                public void run() {
+                    try {
+                        waitForTasksToBeCleared();
+                        executeDeactivateCommnad(false);
+                    } catch (Exception e) {
+                        setSucceeded(false);
+                        log.error("Error when attempting to deactivate storage 
domain {}", getStorageDomainId(), e);
+                        compensate();
+                    }
+                }
+            });
+        } else {
+            executeDeactivateCommnad(false);
+        }
+    }
+
+    protected void waitForTasksToBeCleared() throws InterruptedException {
+        log.info("waiting for all tasks related to domain {} to be cleared (if 
exist) before attempting to deactivate", getStorageDomainId());
+        while (true) {
+            TimeUnit.SECONDS.sleep(3);
+            List<Guid> tasks = 
getDbFacade().getAsyncTaskDao().getAsyncTaskIdsByEntity(getStorageDomainId());
+            if (tasks.isEmpty()) {
+                log.info("no tasks for the deactivated domain {}, proceeding 
with deactivation", getStorageDomainId());
+                return;
+            } else {
+                log.info("tasks {} were found for domain {}, waiting before 
attempting to deactivate", tasks, getStorageDomainId());
+            }
+        }
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java
index b69c308..3f6cf08 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java
@@ -426,6 +426,11 @@
         });
     }
 
+    protected void changeDomainStatusWithCompensation(StoragePoolIsoMap map, 
StorageDomainStatus compensateStatus, StorageDomainStatus newStatus) {
+        map.setStatus(compensateStatus);
+        changeStorageDomainStatusInTransaction(map, newStatus);
+    }
+
     private StorageDomainStatus getStorageDomainStatus() {
         StorageDomainStatus status = null;
         if (getStorageDomain() != null) {
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java
index 723c3a7..5a4a9c6 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java
@@ -857,7 +857,7 @@
     CREATE_OVF_STORE_FOR_STORAGE_DOMAIN_FAILED(191, AuditLogSeverity.WARNING),
     CREATE_OVF_STORE_FOR_STORAGE_DOMAIN_INITIATE_FAILED(192),
     DELETE_OVF_STORE_FOR_STORAGE_DOMAIN_FAILED(193),
-    UPDATE_DESCRIPTION_FOR_OVF_STORE_FAILED(1016),
+    UPDATE_FOR_OVF_STORES_FAILED(1016, AuditLogSeverity.WARNING),
     RETRIEVE_OVF_STORE_FAILED(1017, AuditLogSeverity.WARNING),
 
     // Authentication
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcActionUtils.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcActionUtils.java
index 3e5c46b..70ecb8b 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcActionUtils.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcActionUtils.java
@@ -299,32 +299,32 @@
                 EnumSet.of(VdcActionType.DetachStorageDomainFromPool, 
VdcActionType.ActivateStorageDomain));
         storageDomainMatrix.put(
                 StorageDomainStatus.Inactive,
-                EnumSet.of(VdcActionType.DeactivateStorageDomain));
+                
EnumSet.of(VdcActionType.DeactivateStorageDomainWithOvfUpdate));
         storageDomainMatrix.put(
                 StorageDomainStatus.Locked,
                 EnumSet.of(VdcActionType.DetachStorageDomainFromPool,
-                        VdcActionType.DeactivateStorageDomain, 
VdcActionType.ActivateStorageDomain));
+                        VdcActionType.DeactivateStorageDomainWithOvfUpdate, 
VdcActionType.ActivateStorageDomain));
         storageDomainMatrix.put(
                 StorageDomainStatus.Unattached,
                 EnumSet.of(VdcActionType.DetachStorageDomainFromPool,
-                        VdcActionType.DeactivateStorageDomain, 
VdcActionType.ActivateStorageDomain));
+                        VdcActionType.DeactivateStorageDomainWithOvfUpdate, 
VdcActionType.ActivateStorageDomain));
         storageDomainMatrix.put(
                 StorageDomainStatus.Uninitialized,
                 EnumSet.of(VdcActionType.DetachStorageDomainFromPool,
-                        VdcActionType.DeactivateStorageDomain, 
VdcActionType.ActivateStorageDomain));
+                        VdcActionType.DeactivateStorageDomainWithOvfUpdate, 
VdcActionType.ActivateStorageDomain));
         storageDomainMatrix.put(
                 StorageDomainStatus.Unknown,
-                EnumSet.of(VdcActionType.DetachStorageDomainFromPool, 
VdcActionType.DeactivateStorageDomain));
+                EnumSet.of(VdcActionType.DetachStorageDomainFromPool, 
VdcActionType.DeactivateStorageDomainWithOvfUpdate));
         storageDomainMatrix.put(
                 StorageDomainStatus.Maintenance,
-                EnumSet.of(VdcActionType.DeactivateStorageDomain));
+                
EnumSet.of(VdcActionType.DeactivateStorageDomainWithOvfUpdate));
         storageDomainMatrix.put(
                 StorageDomainStatus.PreparingForMaintenance,
-                EnumSet.of(VdcActionType.DetachStorageDomainFromPool, 
VdcActionType.DeactivateStorageDomain));
+                EnumSet.of(VdcActionType.DetachStorageDomainFromPool, 
VdcActionType.DeactivateStorageDomainWithOvfUpdate));
         storageDomainMatrix.put(
                 StorageDomainStatus.Detaching,
                 EnumSet.of(VdcActionType.DetachStorageDomainFromPool,
-                        VdcActionType.DeactivateStorageDomain, 
VdcActionType.ActivateStorageDomain));
+                        VdcActionType.DeactivateStorageDomainWithOvfUpdate, 
VdcActionType.ActivateStorageDomain));
         storageDomainMatrix.put(
                 StorageDomainStatus.Activating,
                 EnumSet.of(VdcActionType.DetachStorageDomainFromPool, 
VdcActionType.ActivateStorageDomain));
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddDiskParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddDiskParameters.java
index 93b0e34..650e789 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddDiskParameters.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddDiskParameters.java
@@ -9,6 +9,7 @@
     private Guid storageDomainId;
     private Boolean plugDiskToVm;
     private boolean shouldRemainIllegalOnFailedExecution;
+    private boolean skipDomainCheck;
 
     public AddDiskParameters() {
         storageDomainId = Guid.Empty;
@@ -50,4 +51,12 @@
     public void setShouldRemainIllegalOnFailedExecution(boolean 
shouldRemainIllegalOnFailedExecution) {
         this.shouldRemainIllegalOnFailedExecution = 
shouldRemainIllegalOnFailedExecution;
     }
+
+    public boolean isSkipDomainCheck() {
+        return skipDomainCheck;
+    }
+
+    public void setSkipDomainCheck(boolean skipDomainCheck) {
+        this.skipDomainCheck = skipDomainCheck;
+    }
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/CreateOvfStoresForStorageDomainCommandParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/CreateOvfStoresForStorageDomainCommandParameters.java
index 9ba49e6..9f5a40d 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/CreateOvfStoresForStorageDomainCommandParameters.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/CreateOvfStoresForStorageDomainCommandParameters.java
@@ -4,6 +4,7 @@
 
 public class CreateOvfStoresForStorageDomainCommandParameters extends 
StorageDomainParametersBase {
     private int storesCount;
+    private boolean skipDomainChecks;
 
     public CreateOvfStoresForStorageDomainCommandParameters() {
     }
@@ -20,4 +21,12 @@
     public void setStoresCount(int storesCount) {
         this.storesCount = storesCount;
     }
+
+    public boolean isSkipDomainChecks() {
+        return skipDomainChecks;
+    }
+
+    public void setSkipDomainChecks(boolean skipDomainChecks) {
+        this.skipDomainChecks = skipDomainChecks;
+    }
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/CreateOvfVolumeForStorageDomainCommandParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/CreateOvfVolumeForStorageDomainCommandParameters.java
new file mode 100644
index 0000000..4ee644f
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/CreateOvfVolumeForStorageDomainCommandParameters.java
@@ -0,0 +1,23 @@
+package org.ovirt.engine.core.common.action;
+
+import org.ovirt.engine.core.compat.Guid;
+
+public class CreateOvfVolumeForStorageDomainCommandParameters extends 
StorageDomainParametersBase {
+    private boolean skipDomainChecks;
+
+    public CreateOvfVolumeForStorageDomainCommandParameters() {
+        super();
+    }
+
+    public CreateOvfVolumeForStorageDomainCommandParameters(Guid 
storagePoolId, Guid storageDomainId) {
+        super(storagePoolId, storageDomainId);
+    }
+
+    public boolean isSkipDomainChecks() {
+        return skipDomainChecks;
+    }
+
+    public void setSkipDomainChecks(boolean skipDomainChecks) {
+        this.skipDomainChecks = skipDomainChecks;
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ProcessOvfUpdateForStorageDomainCommandParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ProcessOvfUpdateForStorageDomainCommandParameters.java
new file mode 100644
index 0000000..e8b8405
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ProcessOvfUpdateForStorageDomainCommandParameters.java
@@ -0,0 +1,23 @@
+package org.ovirt.engine.core.common.action;
+
+import org.ovirt.engine.core.compat.Guid;
+
+public class ProcessOvfUpdateForStorageDomainCommandParameters extends 
StorageDomainParametersBase {
+    private boolean skipDomainChecks;
+
+    public ProcessOvfUpdateForStorageDomainCommandParameters() {
+        super();
+    }
+
+    public ProcessOvfUpdateForStorageDomainCommandParameters(Guid 
storagePoolId, Guid storageDomainId) {
+        super(storagePoolId, storageDomainId);
+    }
+
+    public boolean isSkipDomainChecks() {
+        return skipDomainChecks;
+    }
+
+    public void setSkipDomainChecks(boolean skipDomainChecks) {
+        this.skipDomainChecks = skipDomainChecks;
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/StorageDomainPoolParametersBase.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/StorageDomainPoolParametersBase.java
index 9b8d6d6..4757b8b 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/StorageDomainPoolParametersBase.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/StorageDomainPoolParametersBase.java
@@ -7,6 +7,8 @@
 
     private boolean runSilent;
     private boolean inactive;
+    private boolean skipChecks;
+    private boolean skipLock;
 
     public boolean isInactive() {
         return inactive;
@@ -31,4 +33,20 @@
     public void setRunSilent(boolean runSilent) {
         this.runSilent = runSilent;
     }
+
+    public boolean isSkipChecks() {
+        return skipChecks;
+    }
+
+    public void setSkipChecks(boolean skipChecks) {
+        this.skipChecks = skipChecks;
+    }
+
+    public boolean isSkipLock() {
+        return skipLock;
+    }
+
+    public void setSkipLock(boolean skipLock) {
+        this.skipLock = skipLock;
+    }
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
index f3c1437..f381c2f 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
@@ -241,6 +241,7 @@
     AddSANStorageDomain(910, ActionGroup.CREATE_STORAGE_DOMAIN, 
QuotaDependency.NONE),
     ExtendSANStorageDomain(911, ActionGroup.EDIT_STORAGE_DOMAIN_CONFIGURATION, 
QuotaDependency.NONE),
     ReconstructMasterDomain(913, QuotaDependency.NONE),
+    DeactivateStorageDomainWithOvfUpdate(914, 
ActionGroup.MANIPULATE_STORAGE_DOMAIN, QuotaDependency.NONE),
     RecoveryStoragePool(915, ActionGroup.CREATE_STORAGE_POOL, 
QuotaDependency.NONE),
     AddEmptyStoragePool(950, ActionGroup.CREATE_STORAGE_POOL, false, 
QuotaDependency.NONE),
     AddStoragePoolWithStorages(951, ActionGroup.CREATE_STORAGE_POOL, 
QuotaDependency.NONE),
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/Disk.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/Disk.java
index 1130f17..a8d9455 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/Disk.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/Disk.java
@@ -64,14 +64,14 @@
         return readOnly;
     }
 
-    public void setReadOnly(Boolean readOnly) {
-        this.readOnly = readOnly;
-    }
-
     public String getLogicalName() {
         return logicalName;
     }
 
+    public void setReadOnly(Boolean readOnly) {
+        this.readOnly = readOnly;
+    }
+
     public void setLogicalName(String logicalName) {
         this.logicalName = logicalName;
     }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/job/StepEnum.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/job/StepEnum.java
index 0988652..f982e84 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/job/StepEnum.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/job/StepEnum.java
@@ -37,6 +37,7 @@
     CLONE_IMAGE_STRUCTURE(AsyncTaskType.cloneImageStructure),
     SYNC_IMAGE_DATA(AsyncTaskType.syncImageData),
     DOWNLOAD_IMAGE(AsyncTaskType.downloadImage),
+    DOWNLOAD_IMAGE_FROM_STREAM(AsyncTaskType.downloadImageFromStream),
     UNKNOWN(AsyncTaskType.unknown);
 
     /**
diff --git 
a/backend/manager/modules/common/src/test/java/org/ovirt/engine/core/common/VdcActionUtilsTest.java
 
b/backend/manager/modules/common/src/test/java/org/ovirt/engine/core/common/VdcActionUtilsTest.java
index 43c4b6a..bf68f1f 100644
--- 
a/backend/manager/modules/common/src/test/java/org/ovirt/engine/core/common/VdcActionUtilsTest.java
+++ 
b/backend/manager/modules/common/src/test/java/org/ovirt/engine/core/common/VdcActionUtilsTest.java
@@ -51,8 +51,8 @@
                 { downVm, VdcActionType.MigrateVm, false },
                 { upVds, VdcActionType.RefreshHostCapabilities, true },
                 { downVds, VdcActionType.RefreshHostCapabilities, false },
-                { upStorageDomain, VdcActionType.DeactivateStorageDomain, true 
},
-                { downStorageDomain, VdcActionType.DeactivateStorageDomain, 
false },
+                { upStorageDomain, 
VdcActionType.DeactivateStorageDomainWithOvfUpdate, true },
+                { downStorageDomain, 
VdcActionType.DeactivateStorageDomainWithOvfUpdate, false },
                 { new StoragePool(), VdcActionType.UpdateStoragePool, true }
         });
     }
diff --git 
a/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties
 
b/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties
index 1444691..c29ec3b 100644
--- 
a/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties
+++ 
b/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties
@@ -459,8 +459,8 @@
 USER_ATTACH_STORAGE_DOMAIN_TO_POOL_FAILED=Failed to attach Storage Domain 
${StorageDomainName} to Data Center ${StoragePoolName}. (User: ${UserName})
 USER_ATTACH_STORAGE_DOMAINS_TO_POOL=Storage Domains were attached to Data 
Center ${StoragePoolName} by ${UserName}
 USER_ATTACH_STORAGE_DOMAINS_TO_POOL_FAILED=Failed to attach Storage Domains to 
Data Center ${StoragePoolName}. (User: ${UserName})
-USER_DEACTIVATED_STORAGE_DOMAIN=Storage Domain ${StorageDomainName} (Data 
Center ${StoragePoolName}) was deactivated by ${UserName}
-USER_DEACTIVATE_STORAGE_DOMAIN_FAILED=Failed to deactivate Storage Domain 
${StorageDomainName} (Data Center ${StoragePoolName}). (User: ${UserName})
+USER_DEACTIVATED_STORAGE_DOMAIN=Storage Domain ${StorageDomainName} (Data 
Center ${StoragePoolName}) was deactivated.
+USER_DEACTIVATE_STORAGE_DOMAIN_FAILED=Failed to deactivate Storage Domain 
${StorageDomainName} (Data Center ${StoragePoolName}).
 USER_DETACH_STORAGE_DOMAIN_FROM_POOL=Storage Domain ${StorageDomainName} was 
detached from Data Center ${StoragePoolName} by ${UserName}
 USER_DETACH_STORAGE_DOMAIN_FROM_POOL_FAILED=Failed to detach Storage Domain 
${StorageDomainName} to Data Center ${StoragePoolName}. (User: ${UserName})
 USER_REMOVE_STORAGE_DOMAIN=Storage Domain ${StorageDomainName} was removed by 
${UserName}
@@ -653,9 +653,9 @@
 UPDATE_OVF_FOR_STORAGE_POOL_FAILED=Failed to update VMs/Templates OVF data in 
Data Center ${StoragePoolName}.
 RETRIEVE_OVF_STORE_FAILED=Failed to retrieve VMs and Templates from the OVF 
disk of Storage Domain ${StorageDomainName}.
 UPDATE_OVF_FOR_STORAGE_DOMAIN_FAILED=Failed to update VMs/Templates OVF data 
for Storage Domain ${StorageDomainName} in Data Center ${StoragePoolName}.
-CREATE_OVF_STORE_FOR_STORAGE_DOMAIN_FAILED=Failed to create OVF store disk for 
Storage Domain ${StorageDomainName}.\n The Disk with the alias ${DiskAlias} 
might be removed manually for automatic attempt to create new one. \n OVF 
updates won't be attempted on the created disk.
+CREATE_OVF_STORE_FOR_STORAGE_DOMAIN_FAILED=Failed to create OVF store disk for 
Storage Domain ${StorageDomainName}.\n The Disk with the id ${DiskId} might be 
removed manually for automatic attempt to create new one. \n OVF updates won't 
be attempted on the created disk.
 CREATE_OVF_STORE_FOR_STORAGE_DOMAIN_INITIATE_FAILED=Failed to create OVF store 
disk for Storage Domain ${StorageDomainName}. \n OVF data won't be updated 
meanwhile for that domain.
-UPDATE_DESCRIPTION_FOR_OVF_STORE_FAILED=Failed to update OVF disk ${DiskId} 
description to reflect its state, OVF data isn't updated on that OVF store 
(Data Center ${DataCenterName}, Storage Domain ${StorageDomainName}).
+UPDATE_FOR_OVF_STORES_FAILED=Failed to update OVF disks ${DisksIds}, OVF data 
isn't updated on those OVF stores (Data Center ${DataCenterName}, Storage 
Domain ${StorageDomainName}).
 DELETE_OVF_STORE_FOR_STORAGE_DOMAIN_FAILED=Failed to delete the OVF store disk 
for Storage Domain ${StorageDomainName}.\n In order to detach the domain please 
remove it manually or try to detach the domain again for another attempt.
 IMPORTEXPORT_FAILED_TO_IMPORT_VM=Failed to read VM '${ImportedVmName}' OVF, it 
may be corrupted
 IMPORTEXPORT_FAILED_TO_IMPORT_TEMPLATE=Failed to read Template '${Template}' 
OVF, it may be corrupted
diff --git 
a/backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties
 
b/backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties
index 8ab35fc..06c3726 100644
--- 
a/backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties
+++ 
b/backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties
@@ -61,6 +61,7 @@
 job.DetachStorageDomainFromPool=Detaching Storage Domain ${Storage} from Data 
Center ${StoragePool}
 job.ActivateStorageDomain=Activating Storage Domain ${Storage} on Data Center 
${StoragePool}
 job.DeactivateStorageDomain=Deactivating Storage Domain ${Storage} in Data 
Center ${StoragePool}
+job.DeactivateStorageDomainWithOvfUpdate=Deactivating Storage Domain 
${Storage} in Data Center ${StoragePool}.
 job.AddSANStorageDomain=Adding SAN Storage Domain ${Storage}
 job.ExtendSANStorageDomain=Extending SAN Storage Domain ${Storage}
 job.RecoveryStoragePool=Recovering Data Center ${StoragePool}
@@ -128,6 +129,7 @@
 step.DELETE_VOLUME=Deleting Volume
 step.DELETE_IMAGE=Deleting Image
 step.DOWNLOAD_IMAGE=Downloading Image
+step.DOWNLOAD_IMAGE_FROM_STREAM=Uploading Image
 step.MERGE_SNAPSHOTS=Merging snapshots (${SourceSnapshot} into 
${DestinationSnapshot}) of disk ${Disk}
 step.ADD_VM_TO_POOL=Creating VM ${VM} for VM Pool
 step.MIGRATE_VM=Migrating VM ${VM} from Host ${VDS}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAttachedStorageDomainResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAttachedStorageDomainResource.java
index 2597964..c4d885e 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAttachedStorageDomainResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendAttachedStorageDomainResource.java
@@ -41,7 +41,7 @@
 
     @Override
     public Response deactivate(Action action) {
-        return doAction(VdcActionType.DeactivateStorageDomain,
+        return doAction(VdcActionType.DeactivateStorageDomainWithOvfUpdate,
                         new StorageDomainPoolParametersBase(guid, 
dataCenterId),
                         action);
     }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendAttachedStorageDomainResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendAttachedStorageDomainResourceTest.java
index 41c9e0a..6fc94da 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendAttachedStorageDomainResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendAttachedStorageDomainResourceTest.java
@@ -120,7 +120,7 @@
 
     @Test
     public void testDeactivate() throws Exception {
-        
setUriInfo(setUpActionExpectations(VdcActionType.DeactivateStorageDomain,
+        
setUriInfo(setUpActionExpectations(VdcActionType.DeactivateStorageDomainWithOvfUpdate,
                                            
StorageDomainPoolParametersBase.class,
                                            new String[] { "StorageDomainId", 
"StoragePoolId" },
                                            new Object[] { STORAGE_DOMAIN_ID, 
DATA_CENTER_ID }));
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterStorageListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterStorageListModel.java
index 75d687e..500f39d 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterStorageListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterStorageListModel.java
@@ -228,7 +228,7 @@
         final ConfirmationModel confirmationModel = (ConfirmationModel) 
getWindow();
         confirmationModel.startProgress(null);
 
-        
Frontend.getInstance().runMultipleAction(VdcActionType.DeactivateStorageDomain, 
pb, new IFrontendMultipleActionAsyncCallback() {
+        
Frontend.getInstance().runMultipleAction(VdcActionType.DeactivateStorageDomainWithOvfUpdate,
 pb, new IFrontendMultipleActionAsyncCallback() {
             @Override
             public void executed(FrontendMultipleActionAsyncResult result) {
                 confirmationModel.stopProgress();
@@ -760,7 +760,7 @@
         getMaintenanceCommand().setIsExecutionAllowed(selectedItems.size() == 1
                 && VdcActionUtils.canExecute(selectedItems,
                 StorageDomain.class,
-                VdcActionType.DeactivateStorageDomain));
+                VdcActionType.DeactivateStorageDomainWithOvfUpdate));
     }
 
     @Override
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageDataCenterListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageDataCenterListModel.java
index 9bddab7..8748755 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageDataCenterListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageDataCenterListModel.java
@@ -600,7 +600,7 @@
         final ConfirmationModel confirmationModel = (ConfirmationModel) 
getWindow();
         confirmationModel.startProgress(null);
 
-        
Frontend.getInstance().runMultipleAction(VdcActionType.DeactivateStorageDomain, 
list,
+        
Frontend.getInstance().runMultipleAction(VdcActionType.DeactivateStorageDomainWithOvfUpdate,
 list,
                 new IFrontendMultipleActionAsyncCallback() {
                     @Override
                     public void executed(FrontendMultipleActionAsyncResult 
result) {
@@ -676,7 +676,7 @@
                 && VdcActionUtils.canExecute(items, StorageDomain.class, 
VdcActionType.ActivateStorageDomain));
 
         getMaintenanceCommand().setIsExecutionAllowed(items.size() == 1
-                && VdcActionUtils.canExecute(items, StorageDomain.class, 
VdcActionType.DeactivateStorageDomain));
+                && VdcActionUtils.canExecute(items, StorageDomain.class, 
VdcActionType.DeactivateStorageDomainWithOvfUpdate));
 
         getAttachCommand().setIsExecutionAllowed(getEntity() != null
                 && (getEntity().getStorageDomainSharedStatus() == 
StorageDomainSharedStatus.Unattached || getEntity().getStorageDomainType() == 
StorageDomainType.ISO));


-- 
To view, visit http://gerrit.ovirt.org/35817
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I54cc929937d3b14dc49a2edab9e763cbe603a9c3
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5
Gerrit-Owner: Liron Aravot <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to