Ramesh N has uploaded a new change for review. Change subject: gluster: add brick list to add bricks dialog ......................................................................
gluster: add brick list to add bricks dialog Change the Add Brick dialog to show all the available bricks from the host. This will be enabled only for the cluster levels >=3.6. Still there will be an option for the user to manually enter the bricks dir. Change-Id: I5e5502cf5a1f551521010214b14414c07f43c2c2 Signed-off-by: Ramesh Nachimuthu <rnach...@redhat.com> --- 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/gluster/VolumeBrickListModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeBrickModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeModel.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/AddBrickPopupView.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/AddBrickPopupView.ui.xml 7 files changed, 126 insertions(+), 10 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/92/40192/1 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 0cb5867..19556db 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 @@ -3979,4 +3979,16 @@ aQuery); } + public static void getUnusedBricksFromServer(AsyncQuery asyncQuery, Guid hostId) { + asyncQuery.converterCallback = new IAsyncConverter() { + @Override + public Object Convert(Object source, AsyncQuery _asyncQuery) + { + return source; + } + }; + VdsIdParametersBase parameters = new VdsIdParametersBase(hostId); + Frontend.getInstance().runQuery(VdcQueryType.GetUnusedGlusterBricks, parameters, asyncQuery); + } + } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeBrickListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeBrickListModel.java index 2868afa..f59ab19 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeBrickListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeBrickListModel.java @@ -350,7 +350,7 @@ VDSGroup cluster = (VDSGroup) result; volumeBrickModel.getForce() .setIsAvailable(GlusterFeaturesUtil.isGlusterForceAddBricksSupported(cluster.getcompatibility_version())); - + volumeBrickModel.setIsBrickProvisioningSupported(GlusterFeaturesUtil.isGlusterBrickProvisioningSupported(cluster.getcompatibility_version())); AsyncQuery _asyncQueryInner = new AsyncQuery(); _asyncQueryInner.setModel(model); _asyncQueryInner.asyncCallback = new INewAsyncCallback() { @@ -829,7 +829,7 @@ model.startProgress(null); - boolean isMigrate = (Boolean) model.getMigrateData().getEntity(); + boolean isMigrate = model.getMigrateData().getEntity(); Frontend.getInstance().runAction(isMigrate ? VdcActionType.StartRemoveGlusterVolumeBricks : VdcActionType.GlusterVolumeRemoveBricks, parameter, new IFrontendActionAsyncCallback() { @@ -1239,13 +1239,13 @@ return; } - VDS server = (VDS) replaceBrickModel.getServers().getSelectedItem(); + VDS server = replaceBrickModel.getServers().getSelectedItem(); GlusterBrickEntity newBrick = new GlusterBrickEntity(); newBrick.setVolumeId(volumeEntity.getId()); newBrick.setServerId(server.getId()); newBrick.setServerName(server.getHostName()); - newBrick.setBrickDirectory((String) replaceBrickModel.getBrickDirectory().getEntity()); + newBrick.setBrickDirectory(replaceBrickModel.getBrickDirectory().getEntity()); replaceBrickModel.startProgress(null); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeBrickModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeBrickModel.java index 640e91b..6bac469 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeBrickModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeBrickModel.java @@ -11,7 +11,11 @@ import org.ovirt.engine.core.common.businessentities.comparators.LexoNumericComparator; import org.ovirt.engine.core.common.businessentities.gluster.GlusterBrickEntity; import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeType; +import org.ovirt.engine.core.common.businessentities.gluster.StorageDevice; +import org.ovirt.engine.ui.frontend.AsyncQuery; +import org.ovirt.engine.ui.frontend.INewAsyncCallback; import org.ovirt.engine.ui.uicommonweb.UICommand; +import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicommonweb.models.ListModel; import org.ovirt.engine.ui.uicommonweb.models.Model; @@ -33,6 +37,8 @@ ListModel<VDS> servers; EntityModel<String> brickDirectory; + ListModel<String> bricksFromServer; + EntityModel<Boolean> showBricksList; ListModel<EntityModel<GlusterBrickEntity>> bricks; @@ -59,12 +65,13 @@ setServers(new ListModel<VDS>()); setBrickDirectory(new EntityModel<String>()); + setBricksFromServer(new ListModel<String>()); + setShowBricksList(new EntityModel<Boolean>()); setBricks(new ListModel<EntityModel<GlusterBrickEntity>>()); setForce(new EntityModel<Boolean>()); getForce().setEntity(false); - setAddBrickCommand(new UICommand("AddBrick", this)); //$NON-NLS-1$ setRemoveBricksCommand(new UICommand("RemoveBricks", this)); //$NON-NLS-1$ setRemoveAllBricksCommand(new UICommand("RemoveAllBricks", this)); //$NON-NLS-1$ @@ -81,6 +88,22 @@ getMoveBricksUpCommand().setIsExecutionAllowed(false); getMoveBricksDownCommand().setIsExecutionAllowed(false); + getShowBricksList().getEntityChangedEvent().addListener(new IEventListener() { + @Override + public void eventRaised(Event ev, Object sender, EventArgs args) { + if (getShowBricksList().getEntity()) { + // Show the brick list and hide the text box for entering brick dir + getBricksFromServer().setIsAvailable(true); + getBrickDirectory().setIsAvailable(false); + updateBricksFromHost(); + } else { + // Hide the brick list and show the text box for entering brick dir + getBricksFromServer().setIsAvailable(false); + getBrickDirectory().setIsAvailable(true); + } + } + + }); getBricks().getSelectedItemsChangedEvent().addListener(new IEventListener() { @Override @@ -104,6 +127,41 @@ } } }); + + getServers().getSelectedItemChangedEvent().addListener(new IEventListener() { + @Override + public void eventRaised(Event ev, Object sender, EventArgs args) { + if (getShowBricksList().getEntity()) { + updateBricksFromHost(); + } + } + + }); + } + + private void updateBricksFromHost() { + VDS selectedServer = getServers().getSelectedItem(); + if (selectedServer != null) { + AsyncDataProvider.getUnusedBricksFromServer(new AsyncQuery(this, new INewAsyncCallback() { + @Override + public void onSuccess(Object model, Object returnValue) { + List<StorageDevice> bricks = (List<StorageDevice>) returnValue; + List<String> lvNames = new ArrayList<String>(); + for (StorageDevice brick : bricks) { + if (brick.getMountPoint() != null && !brick.getMountPoint().isEmpty()) { + lvNames.add(brick.getMountPoint()); + } + } + getBricksFromServer().setItems(lvNames); + } + }), selectedServer.getId()); + } + + } + + public void setIsBrickProvisioningSupported(boolean isBrickProvisioningSupported) { + getShowBricksList().setIsAvailable(isBrickProvisioningSupported); + getShowBricksList().setEntity(isBrickProvisioningSupported); } private void updateSelectedBricksActions() @@ -272,6 +330,12 @@ private void addBrick() { VDS server = servers.getSelectedItem(); + String brickDir = null; + if (getShowBricksList().getEntity()) { + brickDir = bricksFromServer.getSelectedItem(); + } else { + brickDir = getBrickDirectory().getEntity(); + } if (server == null) { @@ -279,15 +343,14 @@ return; } - if (brickDirectory.getEntity() == null || brickDirectory.getEntity().trim().length() == 0) + if (brickDir == null || brickDir.trim().length() == 0) { setMessage(ConstantsManager.getInstance().getConstants().emptyBrickDirectoryMsg()); return; } - brickDirectory.setEntity(brickDirectory.getEntity().trim()); - - if (!validateBrickDirectory(brickDirectory.getEntity())) + brickDir = brickDir.trim(); + if (!validateBrickDirectory(brickDir)) { return; } @@ -295,7 +358,7 @@ GlusterBrickEntity brickEntity = new GlusterBrickEntity(); brickEntity.setServerId(server.getId()); brickEntity.setServerName(server.getHostName()); - brickEntity.setBrickDirectory(brickDirectory.getEntity()); + brickEntity.setBrickDirectory(brickDir); EntityModel<GlusterBrickEntity> entityModel = new EntityModel<GlusterBrickEntity>(brickEntity); List<EntityModel<GlusterBrickEntity>> items = (List<EntityModel<GlusterBrickEntity>>) bricks.getItems(); @@ -701,4 +764,22 @@ } } + public ListModel<String> getBricksFromServer() { + return bricksFromServer; + } + + public void setBricksFromServer(ListModel<String> bricksFromServer) { + this.bricksFromServer = bricksFromServer; + } + + public EntityModel<Boolean> getShowBricksList() { + return showBricksList; + } + + public void setShowBricksList(EntityModel<Boolean> showBricksList) { + this.showBricksList = showBricksList; + } + + + } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeModel.java index 6bcdeda..9a3b91a 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeModel.java @@ -302,6 +302,7 @@ GlusterFeaturesUtil.isGlusterForceAddBricksSupported(cluster.getcompatibility_version()); volumeBrickModel.getForce().setIsAvailable(isForceAddBrickSupported); volumeBrickModel.getForce().setEntity(isForceAddBricks() && isForceAddBrickSupported); + volumeBrickModel.setIsBrickProvisioningSupported(GlusterFeaturesUtil.isGlusterBrickProvisioningSupported(cluster.getCompatibilityVersion())); } setWindow(volumeBrickModel); 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 61d1df3..cd7ce27 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 @@ -2980,6 +2980,9 @@ @DefaultStringValue("Brick Directory") String brickDirectoryBricks(); + @DefaultStringValue("Show available bricks from host") + String addBricksShowBricksFromHost(); + @DefaultStringValue("Bricks") String bricksHeaderLabel(); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/AddBrickPopupView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/AddBrickPopupView.java index e0d8cc2..40c0098 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/AddBrickPopupView.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/AddBrickPopupView.java @@ -80,10 +80,20 @@ @WithElementId ListModelListBoxEditor<VDS> serverEditor; + @UiField(provided = true) + @Path(value = "showBricksList.entity") + @WithElementId + EntityModelCheckBoxEditor showBricksListEditor; + @UiField @Path(value = "brickDirectory.entity") @WithElementId StringEntityModelTextBoxEditor exportDirEditor; + + @UiField + @Path(value = "bricksFromServer.selectedItem") + @WithElementId + ListModelListBoxEditor<String> bricksFromServerList; @UiField @WithElementId @@ -149,6 +159,7 @@ private void initEditors() { volumeTypeEditor = new EntityModelLabelEditor<GlusterVolumeType>(new EnumRenderer<GlusterVolumeType>()); forceEditor = new EntityModelCheckBoxEditor(Align.RIGHT); + showBricksListEditor = new EntityModelCheckBoxEditor(Align.RIGHT); serverEditor = new ListModelListBoxEditor<VDS>(new NullSafeRenderer<VDS>() { @Override public String renderNullSafe(VDS vds) { @@ -246,6 +257,8 @@ bricksHeader.setText(constants.bricksHeaderLabel()); serverEditor.setLabel(constants.serverBricks()); exportDirEditor.setLabel(constants.brickDirectoryBricks()); + bricksFromServerList.setLabel(constants.brickDirectoryBricks()); + showBricksListEditor.setLabel(constants.addBricksShowBricksFromHost()); addBrickButton.setLabel(constants.addBricksButtonLabel()); removeBricksButton.setLabel(constants.removeBricksButtonLabel()); removeAllBricksButton.setLabel(constants.removeAllBricksButtonLabel()); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/AddBrickPopupView.ui.xml b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/AddBrickPopupView.ui.xml index 9b32ec6..878ddb0 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/AddBrickPopupView.ui.xml +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/AddBrickPopupView.ui.xml @@ -25,6 +25,10 @@ padding-bottom: 5px; } + .showBricksListCheckBox { + padding-left: 92px; + width: 300px; + } .messageLabel { color: #FF0000; left: 10px; @@ -84,6 +88,8 @@ <g:HorizontalPanel verticalAlignment="ALIGN_BOTTOM"> <g:VerticalPanel> <e:ListModelListBoxEditor ui:field="serverEditor"/> + <ge:EntityModelCheckBoxEditor ui:field="showBricksListEditor" addStyleNames="{style.showBricksListCheckBox}"/> + <e:ListModelListBoxEditor ui:field="bricksFromServerList" /> <ge:StringEntityModelTextBoxEditor ui:field="exportDirEditor" /> </g:VerticalPanel> <g:HorizontalPanel spacing="5"> -- To view, visit https://gerrit.ovirt.org/40192 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I5e5502cf5a1f551521010214b14414c07f43c2c2 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.5-gluster Gerrit-Owner: Ramesh N <rnach...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches