anmolbabu has uploaded a new change for review.

Change subject: webadmin : Optimise for virt store on volumes
......................................................................

webadmin : Optimise for virt store on volumes

This patch adds a check for eligibility to optimise
for virt store and just in case the options are not
enabled already, it adds the suggested options.

Change-Id: I6f995dec2258a3f5fc9673d5d075866b89f7773c
Signed-off-by: Anmol Babu <anb...@redhat.com>
---
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/volumes/VolumeListModel.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/VolumePopupView.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/VolumePopupView.ui.xml
5 files changed, 123 insertions(+), 26 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/28/39428/1

diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/volumes/VolumeListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/volumes/VolumeListModel.java
index 6f85d0f..1123e2e 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/volumes/VolumeListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/volumes/VolumeListModel.java
@@ -2,6 +2,7 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 import org.ovirt.engine.core.common.action.VdcActionParametersBase;
@@ -31,6 +32,9 @@
 import org.ovirt.engine.core.common.queries.SearchParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
+import org.ovirt.engine.core.common.utils.ListUtils;
+import org.ovirt.engine.core.common.utils.ListUtils.Predicate;
+import org.ovirt.engine.core.common.utils.ListUtils.PredicateFilter;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.searchbackend.SearchObjects;
 import org.ovirt.engine.ui.frontend.AsyncQuery;
@@ -593,6 +597,14 @@
             showVolumeProfiling();
         }else if(command.getName().equalsIgnoreCase("closeProfileStats")) 
{//$NON-NLS-1$
             setWindow(null);
+        } else 
if(command.getName().equalsIgnoreCase("CancelOptimizeForVirtStore")) 
{//$NON-NLS-1$
+            setConfirmWindow(null);
+        } else if 
(command.getName().equalsIgnoreCase("ConfirmOptimiseForVirtStore")) 
{//$NON-NLS-1$
+            List<GlusterVolumeEntity> selectedVolumes = new 
ArrayList<GlusterVolumeEntity>();
+            for(Object selectedVolume : getSelectedItems()) {
+                selectedVolumes.add((GlusterVolumeEntity) selectedVolume);
+            }
+            optimizeVolumesForVirtStore(selectedVolumes);
         }
     }
 
@@ -793,17 +805,48 @@
     }
 
     private void optimizeForVirtStore() {
+        UIConstants constants = ConstantsManager.getInstance().getConstants();
         if (getSelectedItems() == null || getSelectedItems().size() == 0) {
             return;
         }
-        ArrayList<Guid> volumeIds = new ArrayList<Guid>();
+        ArrayList<GlusterVolumeEntity> volumesForOptimiseForVirtStore = new 
ArrayList<GlusterVolumeEntity>();
+        Boolean isDiscouragedVolumePresent = false;
+        StringBuilder discouragedConfigVolumeNamesBuilder = new 
StringBuilder();
+        
discouragedConfigVolumeNamesBuilder.append(constants.optimiseForVirtStoreWarning());
         for (Object item : getSelectedItems()) {
-            volumeIds.add(((GlusterVolumeEntity) item).getId());
+            GlusterVolumeEntity volume = (GlusterVolumeEntity) item;
+            volumesForOptimiseForVirtStore.add(volume);
+            if(volume.getReplicaCount() != 3) {
+                discouragedConfigVolumeNamesBuilder.append(volume.getName() + 
"\n");//$NON-NLS-1$
+                isDiscouragedVolumePresent = true;
+            }
         }
-        optimizeVolumesForVirtStore(volumeIds);
+        
discouragedConfigVolumeNamesBuilder.append(constants.optimiseForVirtStoreContinueMessage());
+
+        if(isDiscouragedVolumePresent) {
+            ConfirmationModel cModel = new ConfirmationModel();
+
+            cModel.setMessage(discouragedConfigVolumeNamesBuilder.toString());
+
+            UICommand cancelOptimiseVirtStoreCommand = new 
UICommand("CancelOptimizeForVirtStore", this);//$NON-NLS-1$
+            
cancelOptimiseVirtStoreCommand.setTitle(constants.doNotOptimiseForVirtStore());
+            cancelOptimiseVirtStoreCommand.setIsCancel(true);
+            cModel.getCommands().add(cancelOptimiseVirtStoreCommand);
+
+            UICommand confirmOptimiseForVirtStoreCommand = new 
UICommand("ConfirmOptimiseForVirtStore", this);//$NON-NLS-1$
+            
confirmOptimiseForVirtStoreCommand.setTitle(constants.continueOptimiseForVirtStore());
+            confirmOptimiseForVirtStoreCommand.setIsDefault(true);
+            cModel.getCommands().add(confirmOptimiseForVirtStoreCommand);
+            setConfirmWindow(cModel);
+        } else {
+            optimizeVolumesForVirtStore(volumesForOptimiseForVirtStore);
+        }
     }
 
-    private void optimizeVolumesForVirtStore(final List<Guid> volumeList) {
+    private void optimizeVolumesForVirtStore(final List<GlusterVolumeEntity> 
volumeList) {
+        if(getConfirmWindow() != null) {
+            setConfirmWindow(null);
+        }
         AsyncQuery aQuery = new AsyncQuery();
         aQuery.setModel(this);
         aQuery.asyncCallback = new INewAsyncCallback() {
@@ -828,25 +871,26 @@
                                 String optionOwnerGroupVirt = (String) 
resultInner1;
 
                                 ArrayList<VdcActionParametersBase> list = new 
ArrayList<VdcActionParametersBase>();
-                                for (Guid volumeId : volumeList)
+                                for (GlusterVolumeEntity volume : volumeList)
                                 {
-                                    GlusterVolumeOptionEntity optionGroup = 
new GlusterVolumeOptionEntity();
-                                    optionGroup.setVolumeId(volumeId);
-                                    optionGroup.setKey("group"); //$NON-NLS-1$
-                                    optionGroup.setValue(optionGroupVirt);
-                                    list.add(new 
GlusterVolumeOptionParameters(optionGroup));
+                                    Guid volumeId = volume.getId();
 
-                                    GlusterVolumeOptionEntity optionOwnerUser 
= new GlusterVolumeOptionEntity();
-                                    optionOwnerUser.setVolumeId(volumeId);
-                                    
optionOwnerUser.setKey("storage.owner-uid"); //$NON-NLS-1$
-                                    
optionOwnerUser.setValue(optionOwnerUserVirt);
-                                    list.add(new 
GlusterVolumeOptionParameters(optionOwnerUser));
+                                    list.add(new 
GlusterVolumeOptionParameters(getOption(volumeId, "group", 
optionGroupVirt)));//$NON-NLS-1$
 
-                                    GlusterVolumeOptionEntity optionOwnerGroup 
= new GlusterVolumeOptionEntity();
-                                    optionOwnerGroup.setVolumeId(volumeId);
-                                    
optionOwnerGroup.setKey("storage.owner-gid"); //$NON-NLS-1$
-                                    
optionOwnerGroup.setValue(optionOwnerGroupVirt);
-                                    list.add(new 
GlusterVolumeOptionParameters(optionOwnerGroup));
+                                    list.add(new 
GlusterVolumeOptionParameters(getOption(volumeId, "storage.owner-uid", 
optionOwnerUserVirt)));//$NON-NLS-1$
+
+                                    list.add(new 
GlusterVolumeOptionParameters(getOption(volumeId, "storage.owner-gid", 
optionOwnerGroupVirt)));//$NON-NLS-1$
+
+                                    final GlusterVolumeOptionEntity 
checkOption = getOption(volumeId, "network.ping-timeout", 
"10");//$NON-NLS-1$//$NON-NLS-2$
+                                    
List<PredicateFilter<GlusterVolumeOptionEntity>> predicaetFilters = 
Collections.singletonList(new PredicateFilter<GlusterVolumeOptionEntity>(new 
Predicate<GlusterVolumeOptionEntity>() {
+                                        @Override
+                                        public boolean 
evaluate(GlusterVolumeOptionEntity obj) {
+                                            return 
obj.getKey().equalsIgnoreCase(checkOption.getKey());
+                                        }
+                                    }));
+                                    if(!isOptionEnabledOnVolume(volume, 
predicaetFilters)) {
+                                        list.add(new 
GlusterVolumeOptionParameters(checkOption));//$NON-NLS-1$
+                                    }
                                 }
                                 
Frontend.getInstance().runMultipleAction(VdcActionType.SetGlusterVolumeOption, 
list);
                             }
@@ -865,6 +909,22 @@
         AsyncDataProvider.getConfigFromCache(new 
GetConfigurationValueParameters(ConfigurationValues.GlusterVolumeOptionGroupVirtValue,
                 AsyncDataProvider.getDefaultConfigurationVersion()),
                 aQuery);
+    }
+
+    private boolean isOptionEnabledOnVolume(GlusterVolumeEntity volume, 
List<PredicateFilter<GlusterVolumeOptionEntity>> predicates) {
+        List<GlusterVolumeOptionEntity> volumeOptionsEnabled = new 
ArrayList<GlusterVolumeOptionEntity>(volume.getOptions());
+        List<GlusterVolumeOptionEntity> filteredOptions = volumeOptionsEnabled;
+        for(PredicateFilter<GlusterVolumeOptionEntity> predicate  : 
predicates) {
+             filteredOptions = ListUtils.filter(filteredOptions, predicate);
+        }
+        if(filteredOptions.size() > 0) {
+            return true;
+        }
+        return false;
+    }
+
+    private GlusterVolumeOptionEntity getOption(Guid volumeId, String key, 
String value) {
+        return new GlusterVolumeOptionEntity(volumeId, key, value);
     }
 
     private void stop() {
@@ -964,7 +1024,7 @@
         }
 
         Guid clusterId = ((VDSGroup) 
volumeModel.getCluster().getSelectedItem()).getId();
-        GlusterVolumeEntity volume = new GlusterVolumeEntity();
+        final GlusterVolumeEntity volume = new GlusterVolumeEntity();
         volume.setClusterId(clusterId);
         volume.setName((String) volumeModel.getName().getEntity());
         GlusterVolumeType type = (GlusterVolumeType) 
volumeModel.getTypeList().getSelectedItem();
@@ -1020,12 +1080,12 @@
             @Override
             public void executed(FrontendActionAsyncResult result) {
                 VolumeListModel localModel = (VolumeListModel) 
result.getState();
-                localModel.postOnCreateVolume(result.getReturnValue());
+                localModel.postOnCreateVolume(result.getReturnValue(), volume);
             }
         }, this);
     }
 
-    public void postOnCreateVolume(VdcReturnValueBase returnValue)
+    public void postOnCreateVolume(VdcReturnValueBase returnValue, 
GlusterVolumeEntity volume)
     {
         VolumeModel model = (VolumeModel) getWindow();
 
@@ -1034,9 +1094,8 @@
         if (returnValue != null && returnValue.getSucceeded())
         {
             cancel();
-            Guid volumeId = (Guid) returnValue.getActionReturnValue();
             if ((Boolean) model.getOptimizeForVirtStore().getEntity()) {
-                optimizeVolumesForVirtStore(Arrays.asList(volumeId));
+                optimizeVolumesForVirtStore(Arrays.asList(volume));
             }
         }
     }
diff --git 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
index ac232d0..1f4b89c 100644
--- 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
+++ 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
@@ -2431,5 +2431,17 @@
 
     @DefaultStringValue("Remove the Data Center(s) will move the entities 
residing on the storage domain(s) to an unregistered state. For further 
information please consult documentation.")
     String removeDataCenterWarnningNote();
+
+    @DefaultStringValue("The following volumes were found not to be of the 
suggested replica-3 type : \n")
+    String optimiseForVirtStoreWarning();
+
+    @DefaultStringValue("Are you sure you want to continue?")
+    String optimiseForVirtStoreContinueMessage();
+
+    @DefaultStringValue("Yes")
+    String continueOptimiseForVirtStore();
+
+    @DefaultStringValue("No")
+    String doNotOptimiseForVirtStore();
 }
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
index d4723eb..57329f2 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
@@ -3861,4 +3861,7 @@
 
     @DefaultStringValue("NUMA Support")
     String numaSupport();
+
+    @DefaultStringValue("It is suggested to optimise a Volume for virt store 
if the volume is of replica-3 type")
+    String newVolumeOptimiseForVirtStoreWarning();
 }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/VolumePopupView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/VolumePopupView.java
index d93405e..01b0fc9 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/VolumePopupView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/VolumePopupView.java
@@ -138,6 +138,10 @@
     Label messageLabel;
 
     @UiField
+    @Ignore
+    Label virtStoreOptimiseWarningLabel;
+
+    @UiField
     @Path(value = "optimizeForVirtStore.entity")
     @WithElementId
     EntityModelCheckBoxEditor optimizeForVirtStoreEditor;
@@ -152,9 +156,14 @@
         initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
         ViewIdHandler.idHandler.generateAndSetIds(this);
         localize(constants);
+        setVisibilities();
         initAddBricksButton();
         initBricksCountLabele();
         driver.initialize(this);
+    }
+
+    private void setVisibilities() {
+        virtStoreOptimiseWarningLabel.setVisible(false);
     }
 
     private void initCheckboxEditors() {
@@ -213,6 +222,7 @@
         allowAccessEditor.setLabel(constants.allowAccessFromVolume());
         allowAccessLabel.setText(constants.allowAccessFromLabelVolume());
         
optimizeForVirtStoreEditor.setLabel(constants.optimizeForVirtStoreVolume());
+        
virtStoreOptimiseWarningLabel.setText(constants.newVolumeOptimiseForVirtStoreWarning());
     }
 
     @Override
@@ -239,6 +249,18 @@
                 }
             }
         });
+        
object.getOptimizeForVirtStore().getEntityChangedEvent().addListener(new 
IEventListener<EventArgs>() {
+            @Override
+            public void eventRaised(Event<EventArgs> ev, Object sender, 
EventArgs args) {
+                
virtStoreOptimiseWarningLabel.setVisible(object.getOptimizeForVirtStore().getEntity()
 && object.getReplicaCount().getEntity() != 3);
+            }
+        });
+        object.getReplicaCount().getEntityChangedEvent().addListener(new 
IEventListener<EventArgs>() {
+            @Override
+            public void eventRaised(Event<EventArgs> ev, Object sender, 
EventArgs args) {
+                
virtStoreOptimiseWarningLabel.setVisible(object.getOptimizeForVirtStore().getEntity()
 && object.getReplicaCount().getEntity() != 3);
+            }
+        });
     }
 
     @Override
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/VolumePopupView.ui.xml
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/VolumePopupView.ui.xml
index 1dbb377..f717b25b 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/VolumePopupView.ui.xml
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/VolumePopupView.ui.xml
@@ -100,7 +100,8 @@
 
                                <ge:EntityModelCheckBoxEditor 
ui:field="optimizeForVirtStoreEditor"/>
 
-                               <g:Label ui:field="messageLabel" 
addStyleNames="{style.messageLabel}" />
+                <g:Label ui:field="messageLabel" 
addStyleNames="{style.messageLabel}" />
+                <g:Label ui:field="virtStoreOptimiseWarningLabel" 
addStyleNames="{style.messageLabel}" />
                        </g:VerticalPanel>
                </d:content>
        </d:SimpleDialogPanel>


-- 
To view, visit https://gerrit.ovirt.org/39428
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I6f995dec2258a3f5fc9673d5d075866b89f7773c
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5-gluster
Gerrit-Owner: anmolbabu <anb...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to