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
