diff options
| author | Dhandapani <dhandapani@gluster.com> | 2011-07-25 14:58:10 +0530 |
|---|---|---|
| committer | Dhandapani <dhandapani@gluster.com> | 2011-07-25 15:01:50 +0530 |
| commit | cdd96ee20614141213f9932b886d7e19bbe4dcd1 (patch) | |
| tree | 57b5a0ce3eef243f3479bdde5a0de1e7f6324d72 /src | |
| parent | a2a52d53ee2e0dd32b993c112200cfd1c927aafa (diff) | |
NFS volume Enable/Disable feature
Diffstat (limited to 'src')
7 files changed, 148 insertions, 56 deletions
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java index 250d05c3..2815f8b3 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java @@ -59,6 +59,7 @@ public class Volume extends Entity { public static final int DEFAULT_STRIPE_COUNT = 4; public static final String OPTION_AUTH_ALLOW = "auth.allow"; + public static final String OPTION_NFS = "nfs.disable"; private static final String[] VOLUME_TYPE_STR = new String[] { "Plain Distribute", "Distributed Mirror", "Distributed Stripe" }; @@ -77,9 +78,9 @@ public class Volume extends Entity { public Volume() { } - // GlusterFS and NFS export is always enabled + // Only GlusterFS is enabled private Set<NAS_PROTOCOL> nasProtocols = new LinkedHashSet<NAS_PROTOCOL>(Arrays.asList(new NAS_PROTOCOL[] { - NAS_PROTOCOL.GLUSTERFS, NAS_PROTOCOL.NFS })); + NAS_PROTOCOL.GLUSTERFS })); public String getVolumeTypeStr() { return getVolumeTypeStr(getVolumeType()); @@ -232,12 +233,14 @@ public class Volume extends Entity { return bricks; } - public void enableNFS() { + public void enableNFS(String NFSOption) { nasProtocols.add(NAS_PROTOCOL.NFS); + setOption(OPTION_NFS, NFSOption); } - public void disableNFS() { + public void disableNFS(String NFSOption) { nasProtocols.remove(NAS_PROTOCOL.NFS); + setOption(OPTION_NFS, NFSOption); } public Volume(String name, Entity parent, VOLUME_TYPE volumeType, TRANSPORT_TYPE transportType, VOLUME_STATUS status) { diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ApplicationWorkbenchAdvisor.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ApplicationWorkbenchAdvisor.java index 73a10b01..1d381055 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ApplicationWorkbenchAdvisor.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ApplicationWorkbenchAdvisor.java @@ -74,4 +74,9 @@ public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor { } }); } + + @Override + public boolean preShutdown() { + return syncJob.cancel(); + } } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/GlusterDataModelManager.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/GlusterDataModelManager.java index 14086260..a82ad21b 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/GlusterDataModelManager.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/GlusterDataModelManager.java @@ -817,6 +817,10 @@ public class GlusterDataModelManager { public void setAccessControlList(Volume volume, String accessControlList) { setVolumeOption(volume, Volume.OPTION_AUTH_ALLOW, accessControlList); } + + public void setNFSOption(Volume volume, String nfsOption) { + setVolumeOption(volume, Volume.OPTION_NFS, nfsOption); + } public Server getGlusterServer(String serverName) { for (Server server : model.getCluster().getServers()) { diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumePage1.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumePage1.java index 26cb0c2f..2377c520 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumePage1.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumePage1.java @@ -330,6 +330,12 @@ public class CreateVolumePage1 extends WizardPage { nasProtocols.add(NAS_PROTOCOL.NFS); volume.setAccessControlList(txtAccessControl.getText()); + + if (btnNfs.getSelection()) { + volume.enableNFS("on"); + } else { + volume.disableNFS("off"); + } for(Device device : selectedDevices) { Brick brick = new Brick(device.getServerName(), BRICK_STATUS.ONLINE, device.getName(), device.getMountPoint() + File.separator + volume.getName()); diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeSummaryView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeSummaryView.java index 8b5b3fee..f4c1f977 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeSummaryView.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeSummaryView.java @@ -12,6 +12,8 @@ import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.custom.CLabel; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.layout.FillLayout; @@ -44,6 +46,7 @@ import com.gluster.storage.management.core.model.Server.SERVER_STATUS; import com.gluster.storage.management.core.model.Volume; import com.gluster.storage.management.core.model.Volume.NAS_PROTOCOL; import com.gluster.storage.management.core.model.Volume.VOLUME_TYPE; +import com.gluster.storage.management.core.model.VolumeOption; import com.gluster.storage.management.core.utils.NumberUtil; import com.gluster.storage.management.core.utils.StringUtil; import com.gluster.storage.management.core.utils.ValidationUtil; @@ -67,6 +70,11 @@ public class VolumeSummaryView extends ViewPart { private Composite parent; private static final String COURIER_FONT = "Courier"; private Cluster cluster = GlusterDataModelManager.getInstance().getModel().getCluster(); + private Button nfsCheckBox; + private FormText glusterNfsMountText; + private String nfsMountInfo; + private Label nfsLabel; + private String nfs; @Override public void createPartControl(Composite parent) { @@ -85,6 +93,7 @@ public class VolumeSummaryView extends ViewPart { public void volumeChanged(Volume volume, Event event) { updateVolumeStatusLabel(); populateAccessControlText(); + changeNFSStatus(); toolbarManager.updateToolbar(volume); } }; @@ -134,12 +143,12 @@ public class VolumeSummaryView extends ViewPart { private void createVolumeMountingInfoSection() { String glusterFs = "Gluster:"; - String nfs = "NFS:"; + nfs = "NFS:"; String onlineServers = getOnlineServers(10); // Limited to 10 servers String firstOnlineServer = onlineServers.split(",")[0].trim(); String glusterFsMountInfo = "mount -t glusterfs " + firstOnlineServer + ":/" + volume.getName() + " <mount-point>"; - String nfsMountInfo = "mount -t nfs " + firstOnlineServer + ":/" + volume.getName() + " <mount-point>"; + nfsMountInfo = "mount -t nfs " + firstOnlineServer + ":/" + volume.getName() + " <mount-point>"; String info = "Server can be any server name in the storage cloud eg. <" + onlineServers + ">"; // TODO: if more // than 10 // servers... @@ -153,13 +162,12 @@ public class VolumeSummaryView extends ViewPart { glusterfsMountText.setLayoutData(new GridData(GridData.BEGINNING, GridData.VERTICAL_ALIGN_CENTER, false, false, 2, 0)); // Label spanned two column - // TODO: Check required if nfs is optional - toolkit.createLabel(section, nfs, SWT.NORMAL); - FormText glusterNfsMountText = setFormTextStyle(toolkit.createFormText(section, true), COURIER_FONT, 10, - SWT.NONE); - glusterNfsMountText.setText(nfsMountInfo, false, false); - glusterNfsMountText.setLayoutData(new GridData(GridData.BEGINNING, GridData.VERTICAL_ALIGN_CENTER, false, - false, 2, 0)); + nfsLabel = toolkit.createLabel(section, (volume.getOptions().getOption(Volume.OPTION_NFS).getValue().equals("on")) ? nfs : " ", SWT.NORMAL); + glusterNfsMountText = setFormTextStyle(toolkit.createFormText(section, true), COURIER_FONT, 10, + SWT.NONE); + glusterNfsMountText.setText((volume.getOptions().getOption(Volume.OPTION_NFS).getValue().equals("on")) ? nfsMountInfo : " ", false, false); + glusterNfsMountText.setLayoutData(new GridData(GridData.BEGINNING, GridData.VERTICAL_ALIGN_CENTER, false, + false, 2, 0)); toolkit.createLabel(section, ""); Label infoLabel = toolkit.createLabel(section, info, SWT.NONE); @@ -315,6 +323,29 @@ public class VolumeSummaryView extends ViewPart { guiHelper.clearStatusMessage(); parent.update(); } + + private void saveNFSOption() { + final String nfsOption = (nfsCheckBox.getSelection()) ? "on" : "off"; + + guiHelper.setStatusMessage("Setting NFS option..."); + parent.update(); + + BusyIndicator.showWhile(Display.getDefault(), new Runnable() { + @Override + public void run() { + try { + new VolumesClient().setVolumeOption(volume.getName(), Volume.OPTION_NFS, nfsOption); + + GlusterDataModelManager.getInstance().setNFSOption(volume, nfsOption); + } catch (Exception e) { + MessageDialog.openError(Display.getDefault().getActiveShell(), "NFS Option", e.getMessage()); + } + } + }); + + guiHelper.clearStatusMessage(); + parent.update(); + } private void addKeyListerForAccessControl() { accessControlText.addKeyListener(new KeyAdapter() { @@ -354,54 +385,93 @@ public class VolumeSummaryView extends ViewPart { nasProtocolsComposite.setLayout(new FillLayout()); createCheckbox(nasProtocolsComposite, "Gluster", true, false); - final Button nfsCheckBox = createCheckbox(nasProtocolsComposite, "NFS", - volume.getNASProtocols().contains(NAS_PROTOCOL.NFS), true); + + // Check whether nfs option is off + VolumeOption option = volume.getOptions().getOption(Volume.OPTION_NFS); + + boolean isNFSEnabled = (volume.getOptions().getOption(Volume.OPTION_NFS).getValue().toLowerCase().equals("off")) ? false : true; + + nfsCheckBox = createCheckbox(nasProtocolsComposite, "NFS", + isNFSEnabled, true); + + nfsCheckBox.addSelectionListener(new SelectionListener() { + + @Override + public void widgetSelected(SelectionEvent e) { + if (nfsCheckBox.getSelection()) { + volume.enableNFS("on"); + saveNFSOption(); + } else { + volume.disableNFS("off"); + saveNFSOption(); + } + } + + @Override + public void widgetDefaultSelected(SelectionEvent e) { + } + }); + + // CIFS checkbox createCheckbox(nasProtocolsComposite, "CIFS", false, true); toolkit.createLabel(section, "", SWT.NONE); // dummy // createChangeLinkForNASProtocol(section, nfsCheckBox); } - private Button createCheckbox(Composite parent, String label, boolean selected, boolean enabled) { + private Button createCheckbox(Composite parent, String label, boolean checked, boolean enabled) { final Button checkBox = toolkit.createButton(parent, label, SWT.CHECK); + checkBox.setSelection(checked); checkBox.setEnabled(enabled); - checkBox.setSelection(selected); return checkBox; } - - private void createChangeLinkForNASProtocol(Composite section, final Button nfsCheckBox) { - final Hyperlink nasChangeLink = toolkit.createHyperlink(section, "change", SWT.NONE); - nasChangeLink.addHyperlinkListener(new HyperlinkAdapter() { - - private void finishEdit() { - // TODO: Update value to back-end - if (nfsCheckBox.getSelection()) { - volume.enableNFS(); - } else { - volume.disableNFS(); - } - nfsCheckBox.setEnabled(false); - nasChangeLink.setText("change"); - } - - private void startEdit() { - nfsCheckBox.setEnabled(true); - nasChangeLink.setText("update"); - } - - @Override - public void linkActivated(HyperlinkEvent e) { - if (nfsCheckBox.isEnabled()) { - // we were already in edit mode. - finishEdit(); - } else { - // Get in to edit mode - startEdit(); - } - } - }); + + private void changeNFSStatus() { + if (volume.getOptions().getOption(Volume.OPTION_NFS).getValue().equals("on")) { + nfsCheckBox.setSelection(true); + glusterNfsMountText.setText(nfsMountInfo, false, false); + nfsLabel.setText(nfs); + } else { + nfsCheckBox.setSelection(false); + glusterNfsMountText.setText(" ", false, false); + nfsLabel.setText(" "); + } + } +// private void createChangeLinkForNASProtocol(Composite section, final Button nfsCheckBox) { +// final Hyperlink nasChangeLink = toolkit.createHyperlink(section, "change", SWT.NONE); +// nasChangeLink.addHyperlinkListener(new HyperlinkAdapter() { +// +// private void finishEdit() { +// // TODO: Update value to back-end +// if (nfsCheckBox.getSelection()) { +// volume.enableNFS(""); +// } else { +// volume.disableNFS(""); +// } +// nfsCheckBox.setEnabled(false); +// nasChangeLink.setText("change"); +// } +// +// private void startEdit() { +// nfsCheckBox.setEnabled(true); +// nasChangeLink.setText("update"); +// } +// +// @Override +// public void linkActivated(HyperlinkEvent e) { +// if (nfsCheckBox.isEnabled()) { +// // we were already in edit mode. +// finishEdit(); +// } else { +// // Get in to edit mode +// startEdit(); +// } +// } +// }); +// } + private double getDiskSize(String serverName, String deviceName) { double diskSize = 0; GlusterServer server = cluster.getServer(serverName); diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumeOptionsPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumeOptionsPage.java index 1331a81f..69434e96 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumeOptionsPage.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumeOptionsPage.java @@ -157,13 +157,7 @@ public class VolumeOptionsPage extends Composite { setAddButtonsEnabled(false); } - if (tableViewer.getTable().getItemCount() < volume.getOptions().size()) { - // new volume set from outside this page. refresh the viewer. - tableViewer.refresh(); - } else { - // existing volume option value changed. update that element. - tableViewer.update(volume.getOptions().get(key), null); - } + tableViewer.refresh(); break; case VOLUME_CHANGED: tableViewer.refresh(); diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java index 22da9ca3..37bd213b 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java @@ -41,6 +41,7 @@ import com.gluster.storage.management.core.model.Server.SERVER_STATUS; import com.gluster.storage.management.core.model.Status; import com.gluster.storage.management.core.model.TaskStatus; import com.gluster.storage.management.core.model.Volume; +import com.gluster.storage.management.core.model.Volume.NAS_PROTOCOL; import com.gluster.storage.management.core.model.Volume.TRANSPORT_TYPE; import com.gluster.storage.management.core.model.Volume.VOLUME_STATUS; import com.gluster.storage.management.core.model.Volume.VOLUME_TYPE; @@ -447,6 +448,15 @@ public class GlusterUtil { if (line.matches("^[^:]*:.*$")) { int index = line.indexOf(':'); volume.setOption(line.substring(0, index).trim(), line.substring(index + 1, line.length()).trim()); + + if (line.substring(0, index).trim().equals(Volume.OPTION_NFS)) { + if (line.substring(index + 1, line.length()).trim().equals("off")) { + volume.disableNFS(line.substring(index + 1, line.length()).trim()); + } else { + volume.enableNFS(line.substring(index + 1, line.length()).trim()); + } + } + return true; } return false; |
