diff options
Diffstat (limited to 'src')
6 files changed, 177 insertions, 67 deletions
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java index 33791a50..33a93690 100644 --- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java +++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java @@ -32,6 +32,7 @@ import com.gluster.storage.management.core.model.Disk; import com.gluster.storage.management.core.model.Disk.DISK_STATUS; import com.gluster.storage.management.core.model.Status; import com.gluster.storage.management.core.model.Volume; +import com.gluster.storage.management.core.model.Volume.VOLUME_TYPE; import com.gluster.storage.management.core.response.LogMessageListResponse; import com.gluster.storage.management.core.response.VolumeListResponse; import com.gluster.storage.management.core.response.VolumeOptionInfoListResponse; @@ -162,6 +163,43 @@ public class VolumesClient extends AbstractClient { return queryParams; } + public Status startMigration( String volumeName, String diskFrom, String diskTo) { + Form form = new Form(); + form.add(RESTConstants.FORM_PARAM_VALUE_SOURCE, diskFrom); + form.add(RESTConstants.FORM_PARAM_VALUE_TARGET, diskTo); + form.add(RESTConstants.FORM_PARAM_OPERATION, RESTConstants.FORM_PARAM_VALUE_START); + + return (Status) putRequest( volumeName + "/" + RESTConstants.SUBRESOURCE_DISKS, Status.class, form); + } + + public Status stopMigration(String volumeName, String diskFrom, String diskTo) { + Form form = new Form(); + form.add(RESTConstants.FORM_PARAM_VALUE_SOURCE, diskFrom); + form.add(RESTConstants.FORM_PARAM_VALUE_TARGET, diskTo); + form.add(RESTConstants.FORM_PARAM_OPERATION, RESTConstants.FORM_PARAM_VALUE_STOP); + + return (Status) putRequest( volumeName + "/" + RESTConstants.SUBRESOURCE_DISKS, Status.class, form); + } + + public Status pauseMigration(String volumeName, String diskFrom, String diskTo) { + Form form = new Form(); + form.add(RESTConstants.FORM_PARAM_VALUE_SOURCE, diskFrom); + form.add(RESTConstants.FORM_PARAM_VALUE_TARGET, diskTo); + form.add(RESTConstants.FORM_PARAM_OPERATION, RESTConstants.FORM_PARAM_VALUE_PAUSE); + + return (Status) putRequest( volumeName + "/" + RESTConstants.SUBRESOURCE_DISKS, Status.class, form); + } + + public Status statusMigration(String volumeName, String diskFrom, String diskTo) { + Form form = new Form(); + form.add(RESTConstants.FORM_PARAM_VALUE_SOURCE, diskFrom); + form.add(RESTConstants.FORM_PARAM_VALUE_TARGET, diskTo); + form.add(RESTConstants.FORM_PARAM_OPERATION, RESTConstants.FORM_PARAM_VALUE_STATUS); + + return (Status) putRequest( volumeName + "/" + RESTConstants.SUBRESOURCE_DISKS, Status.class, form); + } + + public static void main(String[] args) { UsersClient usersClient = new UsersClient(); if (usersClient.authenticate("gluster", "gluster").isSuccess()) { diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java index 159c408e..5da9e6b1 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java @@ -35,8 +35,12 @@ public class RESTConstants { public static final String FORM_PARAM_OPERATION = "operation"; public static final String FORM_PARAM_VALUE_START = "start"; public static final String FORM_PARAM_VALUE_STOP = "stop"; + public static final String FORM_PARAM_VALUE_PAUSE = "pause"; + public static final String FORM_PARAM_VALUE_STATUS = "status"; public static final String FORM_PARAM_OPTION_KEY = "key"; public static final String FORM_PARAM_OPTION_VALUE = "value"; + public static final String FORM_PARAM_VALUE_SOURCE = "source"; + public static final String FORM_PARAM_VALUE_TARGET = "target"; public static final String PATH_PARAM_VOLUME_NAME = "volumeName"; public static final String FORM_PARAM_DELETE_OPTION = "value"; diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateDiskPage1.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateDiskPage1.java index f484a346..24f0fe5b 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateDiskPage1.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateDiskPage1.java @@ -36,9 +36,8 @@ import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Text; - +import com.gluster.storage.management.client.GlusterDataModelManager; import com.gluster.storage.management.core.model.Disk; -import com.gluster.storage.management.core.model.GlusterDummyModel; import com.gluster.storage.management.core.model.Volume; import com.gluster.storage.management.core.utils.NumberUtil; import com.gluster.storage.management.gui.TableLabelProviderAdapter; @@ -46,15 +45,21 @@ import com.gluster.storage.management.gui.utils.GUIHelper; public class MigrateDiskPage1 extends WizardPage { private static final String PAGE_NAME = "migrate.disk.page.1"; + private enum DISK_TABLE_COLUMN_INDICES { SERVER, DISK, SPACE, SPACE_IN_USE } + private static final String[] DISK_TABLE_COLUMN_NAMES = { "Server", "Disk", "Space (GB)", "Used Space (GB)" }; private Volume volume; private Disk fromDisk; private static final GUIHelper guiHelper = GUIHelper.getInstance(); + private TableViewer tableViewerTo; + + private TableViewer tableViewerFrom; + private ITableLabelProvider getDiskLabelProvider() { return new TableLabelProviderAdapter() { @@ -67,13 +72,14 @@ public class MigrateDiskPage1 extends WizardPage { Disk disk = (Disk) element; return (columnIndex == DISK_TABLE_COLUMN_INDICES.SERVER.ordinal() ? disk.getServerName() : columnIndex == DISK_TABLE_COLUMN_INDICES.DISK.ordinal() ? disk.getName() - : columnIndex == DISK_TABLE_COLUMN_INDICES.SPACE.ordinal() ? NumberUtil.formatNumber(disk.getSpace()) - : columnIndex == DISK_TABLE_COLUMN_INDICES.SPACE_IN_USE.ordinal() ? NumberUtil.formatNumber(disk.getSpaceInUse()) - : "Invalid"); + : columnIndex == DISK_TABLE_COLUMN_INDICES.SPACE.ordinal() ? NumberUtil + .formatNumber(disk.getSpace()) + : columnIndex == DISK_TABLE_COLUMN_INDICES.SPACE_IN_USE.ordinal() ? NumberUtil + .formatNumber(disk.getSpaceInUse()) : "Invalid"); } }; } - + private void setupDiskTable(Composite parent, Table table) { table.setHeaderVisible(true); table.setLinesVisible(false); @@ -103,7 +109,6 @@ public class MigrateDiskPage1 extends WizardPage { tableColumnLayout.setColumnData(column, new ColumnWeightData(weight)); } - /** * Create the wizard. */ @@ -112,11 +117,31 @@ public class MigrateDiskPage1 extends WizardPage { this.volume = volume; this.fromDisk = disk; setTitle("Migrate Disk [" + volume.getName() + "]"); -// setDescription("Migrate data from one disk to another for the chosen Volume. " + -// "This will copy all data present in the \"from disk\" of the volume " + -// "to \"to disk\", remove \"from disk\" from the volume, and " + -// "add \"to disk\" to the volume"); - setDescription("Migrate volume data from \"From Disk\" to \"To Disk\""); + // setDescription("Migrate data from one disk to another for the chosen Volume. " + + // "This will copy all data present in the \"from disk\" of the volume " + + // "to \"to disk\", remove \"from disk\" from the volume, and " + + // "add \"to disk\" to the volume"); + setPageDescription(null, null); + setPageComplete(false); + } + + private void setPageDescription(String source, String target) { + if (source == null || source == "") { + source = "From Disk"; + } + if (target == null || target == "") { + target = "To Disk"; + } + setDescription("Migrate volume data from \"" + source + "\" to \"" + target + "\""); + } + + private Disk getSelectedDisk(TableViewer tableViewer) { + TableItem[] selectedItems = tableViewer.getTable().getSelection(); + Disk selectedDisk = null; + for (TableItem item : selectedItems) { + selectedDisk = (Disk) item.getData(); + } + return selectedDisk; } private void setupPageLayout(Composite container) { @@ -128,7 +153,7 @@ public class MigrateDiskPage1 extends WizardPage { layout.marginRight = 10; container.setLayout(layout); } - + private Composite createTableViewerComposite(Composite parent) { Composite tableViewerComposite = new Composite(parent, SWT.NONE); tableViewerComposite.setLayout(new FillLayout(SWT.HORIZONTAL)); @@ -136,6 +161,14 @@ public class MigrateDiskPage1 extends WizardPage { return tableViewerComposite; } + public Disk getSourceDisk() { + return getSelectedDisk(tableViewerFrom); + } + + public Disk getTargetDisk() { + return getSelectedDisk(tableViewerTo); + } + /** * Create contents of the wizard. * @@ -164,40 +197,42 @@ public class MigrateDiskPage1 extends WizardPage { ITableLabelProvider diskLabelProvider = getDiskLabelProvider(); - GlusterDummyModel glusterDummyModel = GlusterDummyModel.getInstance(); - List<Disk> fromDisks = glusterDummyModel.getReadyDisksOfVolume(volume); - List<Disk> toDisks = glusterDummyModel.getReadyDisksOfAllServersExcluding( glusterDummyModel.getReadyDisksOfVolume(volume)); + GlusterDataModelManager glusterDataModelManager = GlusterDataModelManager.getInstance(); + List<Disk> fromDisks = glusterDataModelManager.getReadyDisksOfVolume(volume); + List<Disk> toDisks = glusterDataModelManager.getReadyDisksOfAllServersExcluding( glusterDataModelManager.getReadyDisksOfVolume(volume)); + + tableViewerFrom = createTableViewer(container, diskLabelProvider, fromDisks, txtFilterFrom); - TableViewer tableViewerFrom = createTableViewer(container, diskLabelProvider, fromDisks, txtFilterFrom); if(fromDisk != null) { setFromDisk(tableViewerFrom, fromDisk); } - - createTableViewer(container, diskLabelProvider, toDisks, txtFilterTo); + tableViewerTo = createTableViewer(container, diskLabelProvider, toDisks, txtFilterTo); } - + private void setFromDisk(TableViewer tableViewer, Disk diskToSelect) { Table table = tableViewer.getTable(); - for(int i = 0 ; i < table.getItemCount(); i++) { + for (int i = 0; i < table.getItemCount(); i++) { TableItem item = table.getItem(i); - if(item.getData() == diskToSelect) { + if (item.getData() == diskToSelect) { table.select(i); return; } } } - - private TableViewer createTableViewer(Composite container, ITableLabelProvider diskLabelProvider, List<Disk> fromDisks, Text txtFilterText) { + + private TableViewer createTableViewer(Composite container, ITableLabelProvider diskLabelProvider, + List<Disk> fromDisks, Text txtFilterText) { Composite tableViewerComposite = createTableViewerComposite(container); - + TableViewer tableViewer = new TableViewer(tableViewerComposite, SWT.SINGLE); tableViewer.setContentProvider(new ArrayContentProvider()); tableViewer.setLabelProvider(diskLabelProvider); - + setupDiskTable(tableViewerComposite, tableViewer.getTable()); guiHelper.createFilter(tableViewer, txtFilterText, false); - + tableViewer.setInput(fromDisks.toArray()); return tableViewer; - } + } + } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateDiskWizard.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateDiskWizard.java index 464abefa..70b4bbf6 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateDiskWizard.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateDiskWizard.java @@ -20,12 +20,15 @@ package com.gluster.storage.management.gui.dialogs; import org.eclipse.jface.wizard.Wizard; +import com.gluster.storage.management.client.GlusterDataModelManager; +import com.gluster.storage.management.client.VolumesClient; import com.gluster.storage.management.core.model.Disk; import com.gluster.storage.management.core.model.Volume; public class MigrateDiskWizard extends Wizard { private Volume volume; private Disk disk; + private MigrateDiskPage1 page; public MigrateDiskWizard(Volume volume, Disk disk) { setWindowTitle("Gluster Management Console - Migrate Disk [" + volume.getName() + "]"); @@ -36,13 +39,20 @@ public class MigrateDiskWizard extends Wizard { @Override public void addPages() { - addPage(new MigrateDiskPage1(volume, disk)); + page = new MigrateDiskPage1(volume, disk); + addPage(page); } @Override public boolean performFinish() { - System.out.println("Triggered Disk Migration!"); - // TODO: Add code to migrate disk + + Disk sourceDisk = page.getSourceDisk(); + Disk targetDisk = page.getTargetDisk(); + // TODO add custom confirm dialog + + VolumesClient volumesClient = new VolumesClient(GlusterDataModelManager.getInstance().getSecurityToken()); + volumesClient.startMigration(volume.getName(), sourceDisk.getQualifiedName(), targetDisk.getQualifiedName()); + return true; } } 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); } + + } |
