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