Ravi Nori has uploaded a new change for review. Change subject: engine, webadmin: Allow to specify disk error_policy in Web UI ......................................................................
engine, webadmin: Allow to specify disk error_policy in Web UI Should add the ability of specifying error_policy for each disk. Change-Id: Id4bed1019f94064b9800fda0fb17a6def46ab221 Bug-Url: https://bugzilla.redhat.com/1024428 Signed-off-by: Ravi Nori <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddImageFromScratchCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/BaseDisk.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DiskErrorPolicy.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DiskImage.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/AbstractBaseDiskRowMapper.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/BaseDiskDaoDbFacadeImpl.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugDiskVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.ui.xml M frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/DiskModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/EditDiskModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewDiskModel.java M packaging/dbscripts/base_disks_sp.sql M packaging/dbscripts/create_views.sql A packaging/dbscripts/upgrade/03_06_0940_add_disk_error_policy_to_base_disks.sql 23 files changed, 188 insertions(+), 9 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/29/38329/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddImageFromScratchCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddImageFromScratchCommand.java index a7b660f..fa90f6e 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddImageFromScratchCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddImageFromScratchCommand.java @@ -45,6 +45,7 @@ newDiskImage.setBoot(getParameters().getDiskInfo().isBoot()); newDiskImage.setDiskInterface(getParameters().getDiskInfo().getDiskInterface()); newDiskImage.setPropagateErrors(getParameters().getDiskInfo().getPropagateErrors()); + newDiskImage.setDiskErrorPolicy(getParameters().getDiskInfo().getDiskErrorPolicy()); newDiskImage.setWipeAfterDelete(getParameters().getDiskInfo().isWipeAfterDelete()); newDiskImage.setDiskAlias(getParameters().getDiskInfo().getDiskAlias()); newDiskImage.setDiskDescription(getParameters().getDiskInfo().getDiskDescription()); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java index 739ef87..12ddc33 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java @@ -477,6 +477,7 @@ diskToUpdate.setBoot(getNewDisk().isBoot()); diskToUpdate.setDiskInterface(getNewDisk().getDiskInterface()); diskToUpdate.setPropagateErrors(getNewDisk().getPropagateErrors()); + diskToUpdate.setDiskErrorPolicy(getNewDisk().getDiskErrorPolicy()); diskToUpdate.setWipeAfterDelete(getNewDisk().isWipeAfterDelete()); diskToUpdate.setDiskAlias(getNewDisk().getDiskAlias()); diskToUpdate.setDiskDescription(getNewDisk().getDiskDescription()); diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/BaseDisk.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/BaseDisk.java index c38e1c2..b29c6a4 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/BaseDisk.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/BaseDisk.java @@ -62,6 +62,11 @@ private DiskInterface diskInterface; /** + * The disk Error Policy (report, enospc, stop, ignore + */ + private DiskErrorPolicy diskErrorPolicy = DiskErrorPolicy.stop; + + /** * Should the disk be wiped after it's deleted. */ private Boolean wipeAfterDelete; @@ -80,7 +85,7 @@ private Date lastAlignmentScan; public BaseDisk() { - propagateErrors = PropagateErrors.Off; + propagateErrors = PropagateErrors.On; alignment = DiskAlignment.Unknown; } @@ -106,6 +111,14 @@ public void setDiskInterface(DiskInterface diskInterface) { this.diskInterface = diskInterface; + } + + public DiskErrorPolicy getDiskErrorPolicy() { + return diskErrorPolicy; + } + + public void setDiskErrorPolicy(DiskErrorPolicy diskErrorPolicy) { + this.diskErrorPolicy = diskErrorPolicy; } public boolean isWipeAfterDelete() { @@ -199,6 +212,7 @@ result = prime * result + ((diskAlias == null) ? 0 : diskAlias.hashCode()); result = prime * result + ((diskDescription == null) ? 0 : diskDescription.hashCode()); result = prime * result + ((diskInterface == null) ? 0 : diskInterface.hashCode()); + result = prime * result + ((diskErrorPolicy == null) ? 0 : diskErrorPolicy.hashCode()); result = prime * result + ((propagateErrors == null) ? 0 : propagateErrors.hashCode()); result = prime * result + (shareable ? 1231 : 1237); result = prime * result + (isWipeAfterDelete() ? 1231 : 1237); @@ -223,6 +237,7 @@ && ObjectUtils.objectsEqual(diskAlias, other.diskAlias) && ObjectUtils.objectsEqual(diskDescription, other.diskDescription) && diskInterface == other.diskInterface + && diskErrorPolicy == other.diskErrorPolicy && propagateErrors == other.propagateErrors && shareable == other.shareable && isWipeAfterDelete() == other.isWipeAfterDelete() diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DiskErrorPolicy.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DiskErrorPolicy.java new file mode 100644 index 0000000..6a1e22d --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DiskErrorPolicy.java @@ -0,0 +1,34 @@ +package org.ovirt.engine.core.common.businessentities; + +import java.util.HashMap; +import java.util.Map; + +public enum DiskErrorPolicy { + + report("report"), + enospc("enospc"), + stop("stop"), + ignore("ignore"); + + private String name; + private static Map<String, DiskErrorPolicy> mappings; + + static { + mappings = new HashMap<String, DiskErrorPolicy>(); + for (DiskErrorPolicy error : values()) { + mappings.put(error.getName(), error); + } + } + + private DiskErrorPolicy(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public static DiskErrorPolicy forValue(String name) { + return mappings.get(name); + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DiskImage.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DiskImage.java index 4e3a7bb..778fc51 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DiskImage.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/DiskImage.java @@ -462,6 +462,7 @@ di.setDiskInterface(diskImage.getDiskInterface()); di.setWipeAfterDelete(diskImage.isWipeAfterDelete()); di.setPropagateErrors(diskImage.getPropagateErrors()); + di.setDiskErrorPolicy(diskImage.getDiskErrorPolicy()); di.setDiskAlias(diskImage.getDiskAlias()); di.setDiskDescription(diskImage.getDiskDescription()); di.setShareable(diskImage.isShareable()); diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/AbstractBaseDiskRowMapper.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/AbstractBaseDiskRowMapper.java index 16eb371..25982a9 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/AbstractBaseDiskRowMapper.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/AbstractBaseDiskRowMapper.java @@ -6,6 +6,7 @@ import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.common.businessentities.BaseDisk; import org.ovirt.engine.core.common.businessentities.DiskAlignment; +import org.ovirt.engine.core.common.businessentities.DiskErrorPolicy; import org.ovirt.engine.core.common.businessentities.DiskInterface; import org.ovirt.engine.core.common.businessentities.PropagateErrors; import org.ovirt.engine.core.common.businessentities.ScsiGenericIO; @@ -32,6 +33,11 @@ disk.setPropagateErrors(PropagateErrors.valueOf(propagateErrors)); } + String diskErrorPolicy = rs.getString("disk_error_policy"); + if (!StringUtils.isEmpty(diskErrorPolicy)) { + disk.setDiskErrorPolicy(DiskErrorPolicy.valueOf(diskErrorPolicy)); + } + disk.setShareable(rs.getBoolean("shareable")); disk.setBoot(rs.getBoolean("boot")); disk.setSgio(ScsiGenericIO.forValue(rs.getInt("sgio"))); diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/BaseDiskDaoDbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/BaseDiskDaoDbFacadeImpl.java index 3d87e67..1fc6fb9 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/BaseDiskDaoDbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/BaseDiskDaoDbFacadeImpl.java @@ -29,7 +29,8 @@ .addValue("boot", entity.isBoot()) .addValue("sgio", entity.getSgio()) .addValue("alignment", entity.getAlignment()) - .addValue("last_alignment_scan", entity.getLastAlignmentScan()); + .addValue("last_alignment_scan", entity.getLastAlignmentScan()) + .addValue("disk_error_policy", EnumUtils.nameOrNull(entity.getDiskErrorPolicy())); } @Override diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugDiskVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugDiskVDSCommand.java index e0f5966..52088ec 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugDiskVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugDiskVDSCommand.java @@ -67,6 +67,7 @@ drive.put(VdsProperties.VolumeId, diskImage.getImageId().toString()); drive.put(VdsProperties.ImageId, diskImage.getId().toString()); drive.put(VdsProperties.PropagateErrors, disk.getPropagateErrors().toString().toLowerCase()); + drive.put(VdsProperties.DiskErrorPolicy, disk.getDiskErrorPolicy().toString().toLowerCase()); VmInfoBuilder.handleIoTune(getParameters().getVm(), vmDevice, diskImage, new HashMap<Guid, Guid>(), new HashMap<Guid, Map<String, Long>>()); diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java index 417d6ae..713675c 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java @@ -324,6 +324,7 @@ public static final String Address = "address"; public static final String Alias = "alias"; public static final String PropagateErrors = "propagateErrors"; + public static final String DiskErrorPolicy = "errorPolicy"; public static final String Optional = "optional"; public static final String ReadOnly = "readonly"; public static final String Virtio = "virtio"; diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java index 87d7e8e..a6d5f41 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java @@ -361,6 +361,8 @@ .toLowerCase()); struct.put(VdsProperties.PropagateErrors, disk.getPropagateErrors().toString() .toLowerCase()); + struct.put(VdsProperties.DiskErrorPolicy, disk.getDiskErrorPolicy().toString() + .toLowerCase()); handleIoTune(vm, vmDevice, diskImage, diskProfileStorageQosMap, storageQosIoTuneMap); } else { diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java index e6e1b4a..dbdc171 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmOldInfoBuilder.java @@ -79,6 +79,8 @@ .toLowerCase()); drive.put("propagateErrors", disk.getPropagateErrors().toString() .toLowerCase()); + drive.put("errorPolicy", disk.getDiskErrorPolicy().toString() + .toLowerCase()); switch (disk.getDiskInterface()) { case IDE: try { diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java index 6ede749..17c0986 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java @@ -1145,6 +1145,9 @@ @DefaultStringValue("Disk Profile") String diskProfileVmDiskPopup(); + @DefaultStringValue("Disk Error Policy") + String diskErrorPolicyVmDiskPopup(); + @DefaultStringValue("Quota") String quotaVmDiskPopup(); diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.java index 0090a91..238d38b 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.java @@ -4,6 +4,7 @@ import com.google.gwt.editor.client.SimpleBeanEditorDriver; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.resources.client.CssResource; import com.google.gwt.text.shared.AbstractRenderer; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; @@ -11,6 +12,7 @@ import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.VerticalPanel; import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType; +import org.ovirt.engine.core.common.businessentities.DiskErrorPolicy; import org.ovirt.engine.core.common.businessentities.DiskInterface; import org.ovirt.engine.core.common.businessentities.Quota; import org.ovirt.engine.core.common.businessentities.StorageDomain; @@ -27,6 +29,7 @@ import org.ovirt.engine.ui.common.idhandler.WithElementId; import org.ovirt.engine.ui.common.widget.Align; import org.ovirt.engine.ui.common.widget.RadioButtonsHorizontalPanel; +import org.ovirt.engine.ui.common.widget.dialog.AdvancedParametersExpander; import org.ovirt.engine.ui.common.widget.dialog.InfoIcon; import org.ovirt.engine.ui.common.widget.editor.ListModelListBoxEditor; import org.ovirt.engine.ui.common.widget.editor.generic.EntityModelCheckBoxEditor; @@ -109,6 +112,22 @@ @Path("diskProfile.selectedItem") @WithElementId("diskProfile") ListModelListBoxEditor<DiskProfile> diskProfileEditor; + + @UiField + Style style; + + @UiField + @Ignore + AdvancedParametersExpander expander; + + @UiField + @Ignore + FlowPanel expanderContent; + + @UiField(provided = true) + @Path("diskErrorPolicy.selectedItem") + @WithElementId("diskErrorPolicy") + ListModelListBoxEditor<DiskErrorPolicy> diskErrorPolicyEditor; @UiField(provided = true) @Path("quota.selectedItem") @@ -196,6 +215,10 @@ FcpStorageModel fcpStorageModel; SanStorageModel sanStorageModel; + interface Style extends CssResource { + String expanderContent(); + } + public VmDiskPopupWidget(CommonApplicationConstants constants, CommonApplicationResources resources, CommonApplicationTemplates templates, @@ -204,9 +227,15 @@ this.constants = constants; initManualWidgets(constants, resources, templates); initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); + initExpander(); localize(constants); + expanderContent.setStyleName(style.expanderContent()); ViewIdHandler.idHandler.generateAndSetIds(this); driver.initialize(this); + } + + private void initExpander() { + expander.initWithContent(expanderContent.getElement()); } private void localize(CommonApplicationConstants constants) { @@ -219,6 +248,7 @@ hostListEditor.setLabel(constants.hostVmDiskPopup()); quotaEditor.setLabel(constants.quotaVmDiskPopup()); diskProfileEditor.setLabel(constants.diskProfileVmDiskPopup()); + diskErrorPolicyEditor.setLabel(constants.diskErrorPolicyVmDiskPopup()); interfaceEditor.setLabel(constants.interfaceVmDiskPopup()); volumeTypeEditor.setLabel(constants.allocationDisk()); storageTypeEditor.setLabel(constants.storageTypeVmDiskPopup()); @@ -247,6 +277,13 @@ diskProfileEditor = new ListModelListBoxEditor<DiskProfile>(new NullSafeRenderer<DiskProfile>() { @Override protected String renderNullSafe(DiskProfile object) { + return object.getName(); + } + }); + + diskErrorPolicyEditor = new ListModelListBoxEditor<DiskErrorPolicy>(new NullSafeRenderer<DiskErrorPolicy>() { + @Override + protected String renderNullSafe(DiskErrorPolicy object) { return object.getName(); } }); @@ -452,6 +489,7 @@ isReadOnlyEditor.setTabIndex(nextTabIndex++); isScsiPassthroughEditor.setTabIndex(nextTabIndex++); isSgIoUnfilteredEditor.setTabIndex(nextTabIndex++); + diskErrorPolicyEditor.setTabIndex(nextTabIndex++); return nextTabIndex; } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.ui.xml b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.ui.xml index 782ab67..4eccbfb 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.ui.xml +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.ui.xml @@ -6,7 +6,7 @@ <ui:with field='constants' type='org.ovirt.engine.ui.common.CommonApplicationConstants' /> - <ui:style> + <ui:style type="org.ovirt.engine.ui.common.widget.uicommon.popup.vm.VmDiskPopupWidget.Style"> .container { width: 100%; } @@ -57,6 +57,12 @@ padding-top: 5px; padding-left: 2px; } + + .expanderContent { + margin-left: 15px; + display: none; + } + </ui:style> <g:FlowPanel addStyleNames="{style.container}"> @@ -90,6 +96,10 @@ <ge:EntityModelCheckBoxEditor ui:field="isSgIoUnfilteredEditor" addStyleNames="{style.checkBoxEditor} {style.checkBoxSecondary}"/> </g:VerticalPanel> </g:HorizontalPanel> + <d:AdvancedParametersExpander ui:field="expander"/> + <g:FlowPanel ui:field="expanderContent"> + <e:ListModelListBoxEditor ui:field="diskErrorPolicyEditor" addStyleNames="{style.boxEditor}"/> + </g:FlowPanel> <g:Label ui:field="message" addStyleNames="{style.errorMessageLabel}" /> <g:FlowPanel ui:field="externalDiskPanel" addStyleNames="{style.externalDiskPanel}"/> </g:VerticalPanel> diff --git a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml index c9ddaa3..9870e47 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml +++ b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml @@ -37,6 +37,7 @@ <include name="common/businessentities/DiskImageBase.java" /> <include name="common/businessentities/DiskImageDynamic.java" /> <include name="common/businessentities/DiskInterface.java" /> + <include name="common/businessentities/DiskErrorPolicy.java" /> <include name="common/businessentities/DiskType.java" /> <include name="common/businessentities/DisplayType.java" /> <include name="common/businessentities/GraphicsDevice.java" /> diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java index aed9124..0f358ca 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java @@ -30,6 +30,7 @@ import org.ovirt.engine.core.common.businessentities.BusinessEntity; import org.ovirt.engine.core.common.businessentities.CertificateInfo; import org.ovirt.engine.core.common.businessentities.Disk; +import org.ovirt.engine.core.common.businessentities.DiskErrorPolicy; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.DiskInterface; import org.ovirt.engine.core.common.businessentities.DisplayType; @@ -3275,6 +3276,19 @@ return diskInterfaces; } + public ArrayList<DiskErrorPolicy> getDiskErrorPolicyList() + { + ArrayList<DiskErrorPolicy> diskErrorPolicy = new ArrayList<>( + Arrays.asList(new DiskErrorPolicy[] { + DiskErrorPolicy.report, + DiskErrorPolicy.enospc, + DiskErrorPolicy.stop, + DiskErrorPolicy.ignore + })); + + return diskErrorPolicy; + } + public String getNewNicName(Collection<VmNetworkInterface> existingInterfaces) { int maxIfaceNumber = 0; diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java index a519869..15d2f7b 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java @@ -7,6 +7,7 @@ import org.ovirt.engine.core.common.businessentities.ActionGroup; import org.ovirt.engine.core.common.businessentities.Disk; import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType; +import org.ovirt.engine.core.common.businessentities.DiskErrorPolicy; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.DiskInterface; import org.ovirt.engine.core.common.businessentities.LunDisk; @@ -299,6 +300,8 @@ protected abstract void setDefaultInterface(); + protected abstract void setDefaultErrorPolicy(); + protected abstract void updateVolumeType(StorageType storageType); protected boolean isEditEnabled() { @@ -513,6 +516,15 @@ private void setInterfaces(ArrayList<DiskInterface> diskInterfaces) { getDiskInterface().setItems(diskInterfaces); setDefaultInterface(); + } + + public void updateDiskErrorPolicy() { + setDiskErrorPolicies(AsyncDataProvider.getInstance().getDiskErrorPolicyList()); + } + + private void setDiskErrorPolicies(ArrayList<DiskErrorPolicy> diskErrorPolicies) { + getDiskErrorPolicy().setItems(diskErrorPolicies); + setDefaultErrorPolicy(); } private void updateDiskProfiles(StoragePool selectedItem) { @@ -755,6 +767,7 @@ updateShareableDiskEnabled(datacenter); updateDirectLunDiskEnabled(datacenter); updateInterface(isInVm ? getVm().getVdsGroupCompatibilityVersion() : null); + updateDiskErrorPolicy(); if (getDiskStorageType().getEntity() == DiskStorageType.IMAGE) { updateStorageDomains(datacenter); @@ -873,11 +886,12 @@ getDisk().setDiskAlias(getAlias().getEntity()); getDisk().setDiskDescription(getDescription().getEntity()); getDisk().setDiskInterface(getDiskInterface().getSelectedItem()); + getDisk().setDiskErrorPolicy(getDiskErrorPolicy().getSelectedItem()); getDisk().setWipeAfterDelete(getIsWipeAfterDelete().getEntity()); getDisk().setBoot(getIsBootable().getEntity()); getDisk().setShareable(getIsShareable().getEntity()); getDisk().setPlugged(getIsPlugged().getEntity()); - getDisk().setPropagateErrors(PropagateErrors.Off); + getDisk().setPropagateErrors(getDisk().getDiskErrorPolicy() == DiskErrorPolicy.ignore ? PropagateErrors.Off : PropagateErrors.On); getDisk().setReadOnly(getIsReadOnly().getIsAvailable() ? getIsReadOnly().getEntity() : null); } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/DiskModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/DiskModel.java index 272c551..c8c8b53 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/DiskModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/DiskModel.java @@ -1,6 +1,7 @@ package org.ovirt.engine.ui.uicommonweb.models.vms; import org.ovirt.engine.core.common.businessentities.Disk; +import org.ovirt.engine.core.common.businessentities.DiskErrorPolicy; import org.ovirt.engine.core.common.businessentities.DiskInterface; import org.ovirt.engine.core.common.businessentities.Quota; import org.ovirt.engine.core.common.businessentities.StorageDomain; @@ -27,6 +28,7 @@ private ListModel<StorageDomain> sourceStorageDomain; private ListModel<StorageDomain> storageDomain; private ListModel<DiskProfile> diskProfile; + private ListModel<DiskErrorPolicy> diskErrorPolicy; private ListModel<Quota> quota; private boolean pluggedToRunningVm; @@ -95,6 +97,14 @@ this.diskInterface = diskInterface; } + public ListModel<DiskErrorPolicy> getDiskErrorPolicy() { + return diskErrorPolicy; + } + + public void setDiskErrorPolicy(ListModel<DiskErrorPolicy> diskErrorPolicy) { + this.diskErrorPolicy = diskErrorPolicy; + } + public ListModel<StorageDomain> getSourceStorageDomain() { return sourceStorageDomain; } @@ -142,6 +152,7 @@ setSourceStorageDomainName(new EntityModel<String>()); setSourceStorageDomain(new ListModel<StorageDomain>()); setDiskInterface(new ListModel<DiskInterface>()); + setDiskErrorPolicy(new ListModel<DiskErrorPolicy>()); setStorageDomain(new ListModel<StorageDomain>()); setDiskProfile(new ListModel<DiskProfile>()); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/EditDiskModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/EditDiskModel.java index 1f16761..fd5c278 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/EditDiskModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/EditDiskModel.java @@ -90,6 +90,11 @@ } @Override + public void setDefaultErrorPolicy() { + getDiskErrorPolicy().setSelectedItem(getDisk().getDiskErrorPolicy()); + } + + @Override protected DiskImage getDiskImage() { return (DiskImage) getDisk(); } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewDiskModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewDiskModel.java index 04b2b74..a4b034f 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewDiskModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewDiskModel.java @@ -5,6 +5,7 @@ import org.ovirt.engine.core.common.action.AddDiskParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.Disk; +import org.ovirt.engine.core.common.businessentities.DiskErrorPolicy; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.DiskInterface; import org.ovirt.engine.core.common.businessentities.LUNs; @@ -128,6 +129,11 @@ } @Override + public void setDefaultErrorPolicy() { + getDiskErrorPolicy().setSelectedItem(DiskErrorPolicy.stop); + } + + @Override protected DiskImage getDiskImage() { return new DiskImage(); } diff --git a/packaging/dbscripts/base_disks_sp.sql b/packaging/dbscripts/base_disks_sp.sql index 0eb21a6..f54c574 100644 --- a/packaging/dbscripts/base_disks_sp.sql +++ b/packaging/dbscripts/base_disks_sp.sql @@ -18,7 +18,8 @@ v_boot BOOLEAN, v_sgio INTEGER, v_alignment SMALLINT, - v_last_alignment_scan TIMESTAMP WITH TIME ZONE) + v_last_alignment_scan TIMESTAMP WITH TIME ZONE, + v_disk_error_policy VARCHAR(32)) RETURNS VOID AS $procedure$ BEGIN @@ -33,7 +34,8 @@ boot, sgio, alignment, - last_alignment_scan) + last_alignment_scan, + disk_error_policy) VALUES( v_disk_id, v_disk_interface, @@ -45,7 +47,8 @@ v_boot, v_sgio, v_alignment, - v_last_alignment_scan); + v_last_alignment_scan, + v_disk_error_policy); END; $procedure$ LANGUAGE plpgsql; @@ -64,7 +67,8 @@ v_boot BOOLEAN, v_sgio INTEGER, v_alignment SMALLINT, - v_last_alignment_scan TIMESTAMP WITH TIME ZONE) + v_last_alignment_scan TIMESTAMP WITH TIME ZONE, + v_disk_error_policy VARCHAR(32)) RETURNS VOID AS $procedure$ BEGIN @@ -78,7 +82,8 @@ boot = v_boot, sgio = v_sgio, alignment = v_alignment, - last_alignment_scan = v_last_alignment_scan + last_alignment_scan = v_last_alignment_scan, + disk_error_policy = v_disk_error_policy WHERE disk_id = v_disk_id; END; $procedure$ LANGUAGE plpgsql; diff --git a/packaging/dbscripts/create_views.sql b/packaging/dbscripts/create_views.sql index e003ffe..90df40f 100644 --- a/packaging/dbscripts/create_views.sql +++ b/packaging/dbscripts/create_views.sql @@ -80,6 +80,7 @@ base_disks.disk_interface, base_disks.wipe_after_delete AS wipe_after_delete, base_disks.propagate_errors, + base_disks.disk_error_policy, base_disks.boot AS boot, base_disks.sgio AS sgio, image_storage_domain_map.quota_id AS quota_id, @@ -225,6 +226,7 @@ images_storage_domain_view.boot AS boot, images_storage_domain_view.wipe_after_delete AS wipe_after_delete, images_storage_domain_view.propagate_errors AS propagate_errors, + images_storage_domain_view.disk_error_policy AS disk_error_policy, images_storage_domain_view.sgio AS sgio, images_storage_domain_view.entity_type AS entity_type, images_storage_domain_view.number_of_vms AS number_of_vms, @@ -256,6 +258,7 @@ bd.disk_interface, bd.wipe_after_delete, bd.propagate_errors, + bd.disk_error_policy, bd.disk_alias, bd.disk_description, bd.shareable, @@ -2034,6 +2037,7 @@ vm_images_view.boot, vm_images_view.wipe_after_delete, vm_images_view.propagate_errors, + vm_images_view.disk_error_policy, vm_images_view.entity_type, vm_images_view.number_of_vms, vm_images_view.vm_names, diff --git a/packaging/dbscripts/upgrade/03_06_0940_add_disk_error_policy_to_base_disks.sql b/packaging/dbscripts/upgrade/03_06_0940_add_disk_error_policy_to_base_disks.sql new file mode 100644 index 0000000..6dda1fd --- /dev/null +++ b/packaging/dbscripts/upgrade/03_06_0940_add_disk_error_policy_to_base_disks.sql @@ -0,0 +1,3 @@ +select fn_db_add_column('base_disks', 'disk_error_policy', 'character varying(32) NOT NULL DEFAULT ''stop'''); + +UPDATE base_disks SET propagate_errors = 'On'; -- To view, visit https://gerrit.ovirt.org/38329 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Id4bed1019f94064b9800fda0fb17a6def46ab221 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Ravi Nori <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
