summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDhandapani <dhandapani@gluster.com>2011-07-25 14:58:10 +0530
committerDhandapani <dhandapani@gluster.com>2011-07-25 15:01:50 +0530
commitcdd96ee20614141213f9932b886d7e19bbe4dcd1 (patch)
tree57b5a0ce3eef243f3479bdde5a0de1e7f6324d72 /src
parenta2a52d53ee2e0dd32b993c112200cfd1c927aafa (diff)
NFS volume Enable/Disable feature
Diffstat (limited to 'src')
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java11
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ApplicationWorkbenchAdvisor.java5
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/GlusterDataModelManager.java4
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumePage1.java6
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeSummaryView.java160
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumeOptionsPage.java8
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java10
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;