summaryrefslogtreecommitdiffstats
path: root/src/com.gluster.storage.management.server
diff options
context:
space:
mode:
authorSelvam <selvam@gluster.com>2011-05-03 18:02:39 +0530
committerSelvam <selvam@gluster.com>2011-05-03 18:02:39 +0530
commitdf48da74b8775e59fdb9d59c9a9562a2449a2956 (patch)
tree83e00176f30ea5b95ef661737013b491076dd36d /src/com.gluster.storage.management.server
parent52a5b56223f1ba86ecc5af3d26ebf78037358c26 (diff)
Story #22 Disk migration (for a Volume)
Diffstat (limited to 'src/com.gluster.storage.management.server')
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java85
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java10
2 files changed, 59 insertions, 36 deletions
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java
index 586bf5a3..fd4643a6 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java
@@ -21,8 +21,12 @@
package com.gluster.storage.management.server.resources;
import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_OPERATION;
+import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_VALUE_PAUSE;
+import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_VALUE_SOURCE;
import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_VALUE_START;
+import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_VALUE_STATUS;
import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_VALUE_STOP;
+import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_VALUE_TARGET;
import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_VOLUME_NAME;
import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_DELETE_OPTION;
import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_DISKS;
@@ -119,7 +123,8 @@ public class VolumesResource {
status.setMessage("Error while setting volume options: " + optionsStatus);
}
} else {
- Status cleanupStatus = cleanupDirectories(disks, volume.getName(), disks.size(), "-d"); // delete permanently
+ Status cleanupStatus = cleanupDirectories(disks, volume.getName(), disks.size(), "-d"); // delete
+ // permanently
if (!cleanupStatus.isSuccess()) {
status.setMessage(status.getMessage() + CoreConstants.NEWLINE + "Cleanup errors: "
+ CoreConstants.NEWLINE + cleanupStatus);
@@ -249,7 +254,7 @@ public class VolumesResource {
return status;
}
- //TODO Can be removed and use StringUtil.ListToString(List<String> list, String delimiter)
+ // TODO Can be removed and use StringUtil.ListToString(List<String> list, String delimiter)
private String bricksAsString(List<String> bricks) {
String bricksStr = "";
for (String brickInfo : bricks) {
@@ -266,8 +271,8 @@ public class VolumesResource {
diskInfo = disks.get(i).split(":");
serverName = diskInfo[0];
diskName = diskInfo[1];
- result = ((GenericResponse) serverUtil.executeOnServer(true, serverName, VOLUME_DIRECTORY_CLEANUP_SCRIPT + " "
- + diskName + " " + volumeName + " " + deleteFlag, GenericResponse.class)).getStatus();
+ result = ((GenericResponse) serverUtil.executeOnServer(true, serverName, VOLUME_DIRECTORY_CLEANUP_SCRIPT
+ + " " + diskName + " " + volumeName + " " + deleteFlag, GenericResponse.class)).getStatus();
if (!result.isSuccess()) {
return result;
}
@@ -281,30 +286,30 @@ public class VolumesResource {
String[] brickParts = brickName.split(":");
String serverName = brickParts[0];
String brickDir = brickParts[1];
-
+
String logDir = glusterUtil.getLogLocation(volume.getName(), brickName);
String logFileName = glusterUtil.getLogFileNameForBrickDir(brickDir);
String logFilePath = logDir + CoreConstants.FILE_SEPARATOR + logFileName;
// Usage: get_volume_disk_log.py <volumeName> <diskName> <lineCount>
- Object responseObj = serverUtil.executeOnServer(true, serverName, VOLUME_BRICK_LOG_SCRIPT
- + " " + logFilePath + " " + lineCount, LogMessageListResponse.class);
+ Object responseObj = serverUtil.executeOnServer(true, serverName, VOLUME_BRICK_LOG_SCRIPT + " " + logFilePath
+ + " " + lineCount, LogMessageListResponse.class);
Status status = null;
LogMessageListResponse response = null;
- if(responseObj instanceof LogMessageListResponse) {
- response = (LogMessageListResponse)responseObj;
+ if (responseObj instanceof LogMessageListResponse) {
+ response = (LogMessageListResponse) responseObj;
status = response.getStatus();
} else {
- status = (Status)responseObj;
+ status = (Status) responseObj;
}
-
+
if (!status.isSuccess()) {
throw new GlusterRuntimeException(status.toString());
}
// populate disk and trim other fields
List<LogMessage> logMessages = response.getLogMessages();
- for(LogMessage logMessage : logMessages) {
+ for (LogMessage logMessage : logMessages) {
logMessage.setDisk(getDiskForBrick(volume, brickName));
logMessage.setMessage(logMessage.getMessage().trim());
logMessage.setSeverity(logMessage.getSeverity().trim());
@@ -332,32 +337,32 @@ public class VolumesResource {
} catch (Exception e) {
return new LogMessageListResponse(new Status(e), null);
}
-
+
filterLogsBySeverity(logMessages, severity);
- filterLogsByTime(logMessages, fromTimestamp, toTimestamp);
+ filterLogsByTime(logMessages, fromTimestamp, toTimestamp);
return new LogMessageListResponse(Status.STATUS_SUCCESS, logMessages);
}
private void filterLogsByTime(List<LogMessage> logMessages, String fromTimestamp, String toTimestamp) {
Date fromTime = null, toTime = null;
-
- if(fromTimestamp != null && !fromTimestamp.isEmpty()) {
+
+ if (fromTimestamp != null && !fromTimestamp.isEmpty()) {
fromTime = DateUtil.stringToDate(fromTimestamp);
}
-
- if(toTimestamp != null && !toTimestamp.isEmpty()) {
+
+ if (toTimestamp != null && !toTimestamp.isEmpty()) {
toTime = DateUtil.stringToDate(toTimestamp);
}
List<LogMessage> messagesToRemove = new ArrayList<LogMessage>();
- for(LogMessage logMessage : logMessages) {
+ for (LogMessage logMessage : logMessages) {
Date logTimestamp = logMessage.getTimestamp();
- if(fromTime != null && logTimestamp.before(fromTime)) {
+ if (fromTime != null && logTimestamp.before(fromTime)) {
messagesToRemove.add(logMessage);
continue;
}
-
- if(toTime != null && logTimestamp.after(toTime)) {
+
+ if (toTime != null && logTimestamp.after(toTime)) {
messagesToRemove.add(logMessage);
}
}
@@ -365,13 +370,13 @@ public class VolumesResource {
}
private void filterLogsBySeverity(List<LogMessage> logMessages, String severity) {
- if(severity == null || severity.isEmpty()) {
+ if (severity == null || severity.isEmpty()) {
return;
}
-
+
List<LogMessage> messagesToRemove = new ArrayList<LogMessage>();
- for(LogMessage logMessage : logMessages) {
- if(!logMessage.getSeverity().equals(severity)) {
+ for (LogMessage logMessage : logMessages) {
+ if (!logMessage.getSeverity().equals(severity)) {
messagesToRemove.add(logMessage);
}
}
@@ -385,7 +390,7 @@ public class VolumesResource {
for (String brick : volume.getBricks()) {
logMessages.addAll(getBrickLogs(volume, brick, lineCount));
}
-
+
// Sort the log messages based on log timestamp
Collections.sort(logMessages, new Comparator<LogMessage>() {
@Override
@@ -393,31 +398,43 @@ public class VolumesResource {
return message1.getTimestamp().compareTo(message2.getTimestamp());
}
});
-
+
return logMessages;
}
-
+
@POST
@Path("{" + QUERY_PARAM_VOLUME_NAME + "}/" + SUBRESOURCE_DISKS)
- public Status addDisks(@PathParam(QUERY_PARAM_VOLUME_NAME) String volumeName, @FormParam(QUERY_PARAM_DISKS) String disks) {
-
- List<String> diskList = Arrays.asList( disks.split(",") ); // Convert from comma separated sting (query parameter) to list
+ public Status addDisks(@PathParam(QUERY_PARAM_VOLUME_NAME) String volumeName,
+ @FormParam(QUERY_PARAM_DISKS) String disks) {
+
+ List<String> diskList = Arrays.asList(disks.split(",")); // Convert from comma separated sting (query parameter)
+ // to list
Status status = createDirectories(diskList, volumeName);
if (status.isSuccess()) {
List<String> bricks = Arrays.asList(status.getMessage().split(" "));
status = glusterUtil.addBricks(volumeName, bricks);
if (!status.isSuccess()) {
- Status cleanupStatus = cleanupDirectories(diskList, volumeName, diskList.size(), "-d"); // Remove the directories if created
+ Status cleanupStatus = cleanupDirectories(diskList, volumeName, diskList.size(), "-d"); // Remove the
+ // directories
+ // if created
if (!cleanupStatus.isSuccess()) {
// append cleanup error to prepare brick error
status.setMessage(status.getMessage() + CoreConstants.NEWLINE + cleanupStatus.getMessage());
}
}
- }
+ }
return status;
}
+ @PUT
+ @Path("{" + QUERY_PARAM_VOLUME_NAME + "}/" + SUBRESOURCE_DISKS)
+ public Status replaceDisk(@PathParam(QUERY_PARAM_VOLUME_NAME) String volumeName,
+ @FormParam(FORM_PARAM_VALUE_SOURCE) String diskFrom, @FormParam(FORM_PARAM_VALUE_TARGET) String diskTo,
+ @FormParam(FORM_PARAM_OPERATION) String operation) {
+ return glusterUtil.migrateDisk(volumeName, diskFrom, diskTo, operation);
+ }
+
private String getBrickForDisk(Volume volume, String diskName) {
int index = volume.getDisks().indexOf(diskName);
return volume.getBricks().get(index);
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 30f73595..3ca11069 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
@@ -26,6 +26,7 @@ import java.util.Map;
import java.util.Map.Entry;
import com.gluster.storage.management.core.constants.CoreConstants;
+import com.gluster.storage.management.core.constants.RESTConstants;
import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
import com.gluster.storage.management.core.model.GlusterServer;
import com.gluster.storage.management.core.model.GlusterServer.SERVER_STATUS;
@@ -468,8 +469,11 @@ public class GlusterUtil {
logFileName = logFileName.replaceAll(CoreConstants.FILE_SEPARATOR, "-") + ".log";
return logFileName;
}
-
-
+
+ public Status migrateDisk( String volumeName, String diskFrom, String diskTo, String operation ) {
+ return new Status(processUtil.executeCommand("gluster", "volume", "replace-brick", volumeName, diskFrom, diskTo, operation));
+ }
+
public static void main(String args[]) {
// List<String> names = new GlusterUtil().getGlusterServerNames();
// System.out.println(names);
@@ -479,4 +483,6 @@ public class GlusterUtil {
Status status = new GlusterUtil().addBricks("Volume3", disks);
System.out.println(status);
}
+
+
}