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

Reply via email to