summaryrefslogtreecommitdiffstats
path: root/src/com.gluster.storage.management.server
diff options
context:
space:
mode:
authorSelvam <selvam@gluster.com>2011-04-29 15:04:18 +0530
committerSelvam <selvam@gluster.com>2011-04-29 15:04:18 +0530
commit3149b18d24539f5680848c25064f447c15bbbcc4 (patch)
tree4f6b3ef9fcb7a8951511324697752528191fc49e /src/com.gluster.storage.management.server
parente4b86192d443e968cf2ad417a46c203ab2751418 (diff)
parent276118b6d207bb49905d1e9c19a7f08c33f9ed8d (diff)
Merge remote branch 'upstream/master'
Conflicts: src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/VolumesResource.java src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java
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.java56
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java73
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java2
3 files changed, 87 insertions, 44 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 73d2eee4..d3bdec8b 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
@@ -74,7 +74,7 @@ import com.sun.jersey.spi.resource.Singleton;
public class VolumesResource {
private static final String PREPARE_BRICK_SCRIPT = "create_volume_directory.py";
private static final String VOLUME_DIRECTORY_CLEANUP_SCRIPT = "clear_volume_directory.py";
- private static final String VOLUME_DISK_LOG_SCRIPT = "get_volume_disk_log.py";
+ private static final String VOLUME_BRICK_LOG_SCRIPT = "get_volume_brick_log.py";
@InjectParam
private static ServerUtil serverUtil;
@@ -268,28 +268,32 @@ public class VolumesResource {
return new Status(Status.STATUS_CODE_SUCCESS, "Directories cleaned up successfully!");
}
- private List<LogMessage> getDiskLogs(String volumeName, String diskName, Integer lineCount)
+ private List<LogMessage> getBrickLogs(Volume volume, String brickName, Integer lineCount)
throws GlusterRuntimeException {
- String[] diskParts = diskName.split(":");
- String server = diskParts[0];
- String disk = diskParts[1];
+ // brick name format is <serverName>:<brickDirectory>
+ 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>
- Status logStatus = (Status) serverUtil.executeOnServer(true, server, VOLUME_DISK_LOG_SCRIPT + " " + volumeName
- + " " + disk + " " + lineCount, Status.class);
- if (!logStatus.isSuccess()) {
- throw new GlusterRuntimeException(logStatus.toString());
+ LogMessageListResponse response = ((LogMessageListResponse) serverUtil.executeOnServer(true, serverName, VOLUME_BRICK_LOG_SCRIPT
+ + " " + logFilePath + " " + lineCount, LogMessageListResponse.class));
+ Status status = response.getStatus();
+ if (!response.getStatus().isSuccess()) {
+ throw new GlusterRuntimeException(status.toString());
}
- return extractLogMessages(logStatus.getMessage());
- }
-
- private List<LogMessage> extractLogMessages(String logContent) {
- List<LogMessage> logMessages = new ArrayList<LogMessage>();
- for (String logMessage : logContent.split(CoreConstants.NEWLINE)) {
- logMessages.add(new LogMessage(logMessage));
+ // populate disk and trim other fields
+ List<LogMessage> logMessages = response.getLogMessages();
+ for(LogMessage logMessage : logMessages) {
+ logMessage.setDisk(getDiskForBrick(volume, brickName));
+ logMessage.setMessage(logMessage.getMessage().trim());
+ logMessage.setSeverity(logMessage.getSeverity().trim());
}
-
return logMessages;
}
@@ -300,16 +304,16 @@ public class VolumesResource {
List<LogMessage> logMessages = null;
try {
+ Volume volume = getVolume(volumeName);
if (diskName == null || diskName.isEmpty()) {
logMessages = new ArrayList<LogMessage>();
// fetch logs for every brick of the volume
- Volume volume = getVolume(volumeName);
- for (String volumeDisk : volume.getDisks()) {
- logMessages.addAll(getDiskLogs(volumeName, volumeDisk, lineCount));
+ for (String brick : volume.getBricks()) {
+ logMessages.addAll(getBrickLogs(volume, brick, lineCount));
}
} else {
// fetch logs for given brick of the volume
- logMessages = getDiskLogs(volumeName, diskName, lineCount);
+ logMessages = getBrickLogs(volume, getBrickForDisk(volume, diskName), lineCount);
}
} catch (Exception e) {
return new LogMessageListResponse(new Status(e), null);
@@ -338,6 +342,16 @@ public class VolumesResource {
return status;
}
+ private String getBrickForDisk(Volume volume, String diskName) {
+ int index = volume.getDisks().indexOf(diskName);
+ return volume.getBricks().get(index);
+ }
+
+ private String getDiskForBrick(Volume volume, String brickName) {
+ int index = volume.getBricks().indexOf(brickName);
+ return volume.getDisks().get(index);
+ }
+
public static void main(String[] args) throws ClassNotFoundException {
VolumesResource vr = new VolumesResource();
// VolumeListResponse response = vr.getAllVolumes();
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 8b2e13f1..aaedb3d4 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
@@ -53,6 +53,7 @@ public class GlusterUtil {
private static final String VOLUME_BRICKS_GROUP_PFX = "Bricks";
private static final String VOLUME_OPTIONS_RECONFIG_PFX = "Options Reconfigured";
private static final String VOLUME_OPTION_AUTH_ALLOW = "auth.allow:";
+ private static final String VOLUME_LOG_LOCATION_PFX = "log file location:";
private static final ProcessUtil processUtil = new ProcessUtil();
@@ -261,10 +262,10 @@ public class GlusterUtil {
volume.setVolumeType(VOLUME_TYPE.PLAIN_DISTRIBUTE);
} else if (volumeType.equals("Replicate")) {
volume.setVolumeType(VOLUME_TYPE.DISTRIBUTED_MIRROR);
- volume.setReplicaCount(Volume.DEFAULT_REPLICA_COUNT );
+ volume.setReplicaCount(Volume.DEFAULT_REPLICA_COUNT);
} else {
volume.setVolumeType(VOLUME_TYPE.DISTRIBUTED_STRIPE);
- volume.setStripeCount(Volume.DEFAULT_STRIPE_COUNT );
+ volume.setStripeCount(Volume.DEFAULT_STRIPE_COUNT);
}
return true;
}
@@ -276,12 +277,11 @@ public class GlusterUtil {
int count = Integer.parseInt(line.split("x")[1].split("=")[0].trim());
if (volume.getVolumeType() == VOLUME_TYPE.DISTRIBUTED_STRIPE) {
volume.setStripeCount(count);
- }
- else if ( volume.getVolumeType() == VOLUME_TYPE.DISTRIBUTED_MIRROR) {
- volume.setReplicaCount( count );
+ } else if (volume.getVolumeType() == VOLUME_TYPE.DISTRIBUTED_MIRROR) {
+ volume.setReplicaCount(count);
volume.setStripeCount(0);
} else {
- volume.setStripeCount(0);
+ volume.setStripeCount(0);
volume.setReplicaCount(0);
}
}
@@ -312,26 +312,32 @@ public class GlusterUtil {
String[] brickParts = line.split(":");
String serverName = brickParts[1].trim();
String brickDir = brickParts[2].trim();
- // brick directory should be of the form /export/<diskname>/volume-name
- try {
- volume.addDisk(serverName + ":" + brickDir.split("/")[2].trim());
- } catch (ArrayIndexOutOfBoundsException e) {
- // brick directory of a different form, most probably created manually
- // connect to the server and get disk for the brick directory
- Status status = new ServerUtil().getDiskForDir(serverName, brickDir);
- if (status.isSuccess()) {
- volume.addDisk(serverName + ":" + status.getMessage());
- } else {
- // Couldn't fetch disk for the brick directory. Log error and add "unknown" as disk name.
- System.out.println("Couldn't fetch disk name for brick [" + serverName + ":" + brickDir + "]");
- volume.addDisk(serverName + ":unknown");
- }
- }
+
+ volume.addBrick(serverName + ":" + brickDir);
+ detectAndAddDiskToVolume(volume, serverName, brickDir);
return true;
}
return false;
}
+ private void detectAndAddDiskToVolume(Volume volume, String serverName, String brickDir) {
+ // brick directory should be of the form /export/<diskname>/volume-name
+ try {
+ volume.addDisk(serverName + ":" + brickDir.split("/")[2].trim());
+ } catch (ArrayIndexOutOfBoundsException e) {
+ // brick directory of a different form, most probably created manually
+ // connect to the server and get disk for the brick directory
+ Status status = new ServerUtil().getDiskForDir(serverName, brickDir);
+ if (status.isSuccess()) {
+ volume.addDisk(serverName + ":" + status.getMessage());
+ } else {
+ // Couldn't fetch disk for the brick directory. Log error and add "unknown" as disk name.
+ System.out.println("Couldn't fetch disk name for brick [" + serverName + ":" + brickDir + "]");
+ volume.addDisk(serverName + ":unknown");
+ }
+ }
+ }
+
private boolean readBrickGroup(String line) {
return extractToken(line, VOLUME_BRICKS_GROUP_PFX) != null;
}
@@ -433,6 +439,31 @@ public class GlusterUtil {
return new Status(processUtil.executeCommand(command));
}
+ public String getLogLocation(String volumeName, String brickName) {
+ ProcessResult result = new ProcessUtil().executeCommand("gluster", "volume", "log", "locate", volumeName,
+ brickName);
+ if (!result.isSuccess()) {
+ throw new GlusterRuntimeException("Command [gluster volume info] failed with error: ["
+ + result.getExitValue() + "][" + result.getOutput() + "]");
+ }
+ String output = result.getOutput();
+ if (output.startsWith(VOLUME_LOG_LOCATION_PFX)) {
+ return output.substring(VOLUME_LOG_LOCATION_PFX.length()).trim();
+ }
+
+ throw new GlusterRuntimeException("Couldn't parse output of [volume log locate] command. [" + output
+ + "] doesn't start with prefix [" + VOLUME_LOG_LOCATION_PFX + "]");
+ }
+
+ public String getLogFileNameForBrickDir(String brickDir) {
+ String logFileName = brickDir;
+ if (logFileName.startsWith(CoreConstants.FILE_SEPARATOR)) {
+ logFileName = logFileName.replaceFirst(CoreConstants.FILE_SEPARATOR, "");
+ }
+ logFileName = logFileName.replaceAll(CoreConstants.FILE_SEPARATOR, "-") + ".log";
+ return logFileName;
+ }
+
public static void main(String args[]) {
// List<String> names = new GlusterUtil().getGlusterServerNames();
// System.out.println(names);
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java
index 47657c2a..5e423f1c 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java
@@ -93,8 +93,6 @@ public class ServerUtil {
}
connection.close();
- System.out.println("The ouput string is : " + output.toString());
-
return unmarshal(expectedClass, output.toString(), expectedClass != Status.class);
} catch(Exception e) {
// any other exception means unexpected error. return status with error from exception.