summaryrefslogtreecommitdiffstats
path: root/com.gluster.storage.management.core
diff options
context:
space:
mode:
authorShireesh Anjal <shireesh@gluster.com>2011-03-23 19:24:44 +0530
committerShireesh Anjal <shireesh@gluster.com>2011-03-23 19:24:44 +0530
commit0766ea8fcf31990d07431521c7fc7db7e1acf762 (patch)
tree21274f8d8b96d3404609b215824e3d9a786b75f9 /com.gluster.storage.management.core
parente4868a85da0ef3db927314e4d724a305cfbda8ae (diff)
Create Volume
Diffstat (limited to 'com.gluster.storage.management.core')
-rw-r--r--com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java4
-rw-r--r--com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ClusterListener.java2
-rw-r--r--com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java4
-rw-r--r--com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterUtil.java64
4 files changed, 74 insertions, 0 deletions
diff --git a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java
index 79a2b80e..65d5ebea 100644
--- a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java
+++ b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java
@@ -75,6 +75,10 @@ public class Cluster extends Entity {
this.volumes = volumes;
children.add(new EntityGroup<Volume>("Volumes", Volume.class, this, volumes));
}
+
+ public void addVolume(Volume volume) {
+ this.volumes.add(volume);
+ }
public Cluster(String name, Entity parent) {
super(name, parent);
diff --git a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ClusterListener.java b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ClusterListener.java
index 85cdd872..ce2752a4 100644
--- a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ClusterListener.java
+++ b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ClusterListener.java
@@ -38,4 +38,6 @@ public interface ClusterListener {
public void volumeRemoved(Volume volume);
public void volumeChanged(Volume volume, Event event);
+
+ public void volumeCreated(Volume volume);
}
diff --git a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java
index bf76de43..eb974fd9 100644
--- a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java
+++ b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java
@@ -55,4 +55,8 @@ public class DefaultClusterListener implements ClusterListener {
@Override
public void discoveredServerRemoved(Server server) {
}
+
+ @Override
+ public void volumeCreated(Volume volume) {
+ }
}
diff --git a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterUtil.java b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterUtil.java
index 81208eff..7e2cfc31 100644
--- a/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterUtil.java
+++ b/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterUtil.java
@@ -24,8 +24,12 @@ import java.util.ArrayList;
import java.util.List;
import com.gluster.storage.management.core.constants.CoreConstants;
+import com.gluster.storage.management.core.model.Disk;
import com.gluster.storage.management.core.model.GlusterServer;
import com.gluster.storage.management.core.model.GlusterServer.SERVER_STATUS;
+import com.gluster.storage.management.core.model.Volume;
+import com.gluster.storage.management.core.model.Volume.TRANSPORT_TYPE;
+import com.gluster.storage.management.core.model.Volume.VOLUME_TYPE;
/**
*
@@ -131,6 +135,7 @@ public class GlusterUtil {
return processUtil.executeCommand("gluster", "peer", "probe", serverName);
}
+
public ProcessResult startVolume(String volumeName) {
return processUtil.executeCommand("gluster", "volume", "start", volumeName);
}
@@ -139,6 +144,65 @@ public class GlusterUtil {
return processUtil.executeCommand("gluster", "--mode=script", "volume", "stop", volumeName);
}
+ public ProcessResult createVolume(Volume volume) {
+ int count=1; // replica or stripe count
+ String volumeType = null;
+ VOLUME_TYPE volType = volume.getVolumeType();
+ if(volType == VOLUME_TYPE.DISTRIBUTED_MIRROR) {
+ volumeType = "replica";
+ count = 2;
+ } else if(volType == VOLUME_TYPE.DISTRIBUTED_STRIPE) {
+ volumeType = "stripe";
+ count = 4;
+ }
+
+ String transportTypeStr = null;
+ TRANSPORT_TYPE transportType = volume.getTransportType();
+ transportTypeStr = (transportType == TRANSPORT_TYPE.ETHERNET) ? "tcp" : "rdma";
+
+ List<String> command = new ArrayList<String>();
+ command.add("gluster");
+ command.add("volume");
+ command.add("create");
+ command.add(volume.getName());
+ if(volumeType != null) {
+ command.add(volumeType);
+ command.add("" + count);
+ }
+ command.add("transport");
+ command.add(transportTypeStr);
+ for(Disk disk : volume.getDisks()) {
+ command.add(getBrickNotation(volume, disk));
+ }
+ return processUtil.executeCommand(command);
+ }
+
+ public ProcessResult setOption(List<String> command) {
+ return processUtil.executeCommand(command);
+ }
+
+ public ProcessResult setVolumeAccessControl(Volume volume) {
+ List<String> command = new ArrayList<String>();
+ command.add("gluster");
+ command.add("volume");
+ command.add("set");
+ command.add(volume.getName());
+ command.add("auth.allow");
+ command.add(volume.getAccessControlList());
+ return setOption(command);
+ }
+
+ /**
+ * @param disk
+ * @return
+ */
+ private String getBrickNotation(Volume vol, Disk disk) {
+ // TODO: Figure out an appropriate directory INSIDE the DISK having given NAME (e.g. sda, sdb, etc)
+ // String dirName = "/export/" + vol.getName() + "/" + disk.getName();
+ String dirName = "/export/" + vol.getName() ;
+ return disk.getServerName() + ":" + dirName;
+ }
+
public static void main(String args[]) {
List<String> names = new GlusterUtil().getGlusterServerNames();
System.out.println(names);