/*******************************************************************************
* Copyright (c) 2006-2011 Gluster, Inc. <http://www.gluster.com>
* This file is part of Gluster Management Gateway.
*
* Gluster Management Gateway is free software; you can redistribute
* it and/or modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* Gluster Management Gateway is distributed in the hope that it
* will be useful, but WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see
* <http://www.gnu.org/licenses/>.
*******************************************************************************/
package org.gluster.storage.management.gateway.services;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.gluster.storage.management.core.model.TaskStatus;
import org.gluster.storage.management.core.model.Volume;
import org.gluster.storage.management.core.response.VolumeOptionInfoListResponse;
import org.springframework.stereotype.Component;
@Component
public class GlusterInterfaceService extends AbstractGlusterInterface {
private HashMap<String, GlusterInterface> glusterInterfaces = new HashMap<String, GlusterInterface>();
/**
* Returns an instance of the Gluster Interface for given version of GlusterFS
* @param glusterFsVersion
* @return
*/
private GlusterInterface getGlusterInterfaceForVersion(String glusterFsVersion) {
GlusterInterface glusterInterface = glusterInterfaces.get(glusterFsVersion);
if(glusterInterface != null) {
return glusterInterface;
}
glusterInterface = serverUtil.getBean(Gluster323InterfaceService.class);
glusterInterfaces.put(glusterFsVersion, glusterInterface);
return glusterInterface;
}
/**
* Returns an instance of Gluster Interface for the version of GlusterFS installed on given server.
*
* @param serverName
* @return
*/
private GlusterInterface getGlusterInterface(String serverName) {
return getGlusterInterfaceForVersion(getVersion(serverName));
}
/* (non-Javadoc)
* @see org.gluster.storage.management.gateway.utils.GlusterInterface#addServer(java.lang.String, java.lang.String)
*/
@Override
public void addServer(String existingServer, String newServer) {
getGlusterInterface(existingServer).addServer(existingServer, newServer);
}
/* (non-Javadoc)
* @see org.gluster.storage.management.gateway.utils.GlusterInterface#startVolume(java.lang.String, java.lang.String)
*/
@Override
public void startVolume(String volumeName, String knownServer, Boolean force) {
getGlusterInterface(knownServer).startVolume(volumeName, knownServer, force);
}
/* (non-Javadoc)
* @see org.gluster.storage.management.gateway.utils.GlusterInterface#stopVolume(java.lang.String, java.lang.String)
*/
@Override
public void stopVolume(String volumeName, String knownServer, Boolean force) {
getGlusterInterface(knownServer).stopVolume(volumeName, knownServer, force);
}
public void logRotate(String volumeName, List<String> brickList, String knownServer) {
getGlusterInterface(knownServer).logRotate(volumeName, brickList, knownServer);
}
/* (non-Javadoc)
* @see org.gluster.storage.management.gateway.utils.GlusterInterface#resetOptions(java.lang.String, java.lang.String)
*/
@Override
public void resetOptions(String volumeName, String knownServer) {
getGlusterInterface(knownServer).resetOptions(volumeName, knownServer);
}
/* (non-Javadoc)
* @see org.gluster.storage.management.gateway.utils.GlusterInterface#createVolume(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Integer, java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public void createVolume(String knownServer, String volumeName, String volumeTypeStr, String transportTypeStr,
Integer count, String bricks, String accessProtocols, String options) {
getGlusterInterface(knownServer).createVolume(knownServer, volumeName, volumeTypeStr, transportTypeStr, count,
bricks, accessProtocols, options);
}
/* (non-Javadoc)
* @see org.gluster.storage.management.gateway.utils.GlusterInterface#createOptions(java.lang.String, java.util.Map, java.lang.String)
*/
@Override
public void createOptions(String volumeName, Map<String, String> options, String knownServer) {
getGlusterInterface(knownServer).createOptions(volumeName, options, knownServer);
}
/* (non-Javadoc)
* @see org.gluster.storage.management.gateway.utils.GlusterInterface#setOption(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public void setOption(String volumeName, String key, String value, String knownServer) {
getGlusterInterface(knownServer).setOption(volumeName, key, value, knownServer);
}
/* (non-Javadoc)
* @see org.gluster.storage.management.gateway.utils.GlusterInterface#deleteVolume(java.lang.String, java.lang.String)
*/
@Override
public void deleteVolume(String volumeName, String knownServer) {
getGlusterInterface(knownServer).deleteVolume(volumeName, knownServer);
}
/* (non-Javadoc)
* @see org.gluster.storage.management.gateway.utils.GlusterInterface#getVolume(java.lang.String, java.lang.String)
*/
@Override
public Volume getVolume(String volumeName, String knownServer) {
return getGlusterInterface(knownServer).getVolume(volumeName, knownServer);
}
/* (non-Javadoc)
* @see org.gluster.storage.management.gateway.utils.GlusterInterface#getAllVolumes(java.lang.String)
*/
@Override
public List<Volume> getAllVolumes(String knownServer) {
return getGlusterInterface(knownServer).getAllVolumes(knownServer);
}
/* (non-Javadoc)
* @see org.gluster.storage.management.gateway.utils.GlusterInterface#addBricks(java.lang.String, java.util.List, java.lang.String)
*/
@Override
public void addBricks(String volumeName, List<String> bricks, String knownServer) {
getGlusterInterface(knownServer).addBricks(volumeName, bricks, knownServer);
}
/* (non-Javadoc)
* @see org.gluster.storage.management.gateway.utils.GlusterInterface#getLogLocation(java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public String getLogLocation(String volumeName, String brickName, String knownServer) {
return getGlusterInterface(knownServer).getLogLocation(volumeName, brickName, knownServer);
}
/* (non-Javadoc)
* @see org.gluster.storage.management.gateway.utils.GlusterInterface#getLogFileNameForBrickDir(java.lang.String)
*/
@Override
public String getLogFileNameForBrickDir(String serverName, String brickDir) {
return getGlusterInterface(serverName).getLogFileNameForBrickDir(serverName, brickDir);
}
/* (non-Javadoc)
* @see org.gluster.storage.management.gateway.utils.GlusterInterface#removeBricks(java.lang.String, java.util.List, java.lang.String)
*/
@Override
public void removeBricks(String volumeName, List<String> bricks, String knownServer) {
getGlusterInterface(knownServer).removeBricks(volumeName, bricks, knownServer);
}
/* (non-Javadoc)
* @see org.gluster.storage.management.gateway.utils.GlusterInterface#removeServer(java.lang.String, java.lang.String)
*/
@Override
public void removeServer(String existingServer, String serverName) {
getGlusterInterface(serverName).removeServer(existingServer, serverName);
}
/* (non-Javadoc)
* @see org.gluster.storage.management.gateway.utils.GlusterInterface#checkRebalanceStatus(java.lang.String, java.lang.String)
*/
@Override
public TaskStatus checkRebalanceStatus(String serverName, String volumeName) {
return getGlusterInterface(serverName).checkRebalanceStatus(serverName, volumeName);
}
/* (non-Javadoc)
* @see org.gluster.storage.management.gateway.utils.GlusterInterface#stopRebalance(java.lang.String, java.lang.String)
*/
@Override
public void stopRebalance(String serverName, String volumeName) {
getGlusterInterface(serverName).stopRebalance(serverName, volumeName);
}
/* (non-Javadoc)
* @see org.gluster.storage.management.gateway.utils.GlusterInterface#executeBrickMigration(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public void startBrickMigration(String onlineServerName, String volumeName, String fromBrick, String toBrick) {
getGlusterInterface(onlineServerName).startBrickMigration(onlineServerName, volumeName, fromBrick, toBrick);
}
/*
* (non-Javadoc)
* @see org.gluster.storage.management.gateway.services.GlusterInterface#pauseBrickMigration(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public void pauseBrickMigration(String serverName, String volumeName, String fromBrick, String toBrick) {
getGlusterInterface(serverName).pauseBrickMigration(serverName, volumeName, fromBrick, toBrick);
}
/*
* (non-Javadoc)
* @see org.gluster.storage.management.gateway.services.GlusterInterface#stopBrickMigration(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public void stopBrickMigration(String serverName, String volumeName, String fromBrick, String toBrick) {
getGlusterInterface(serverName).stopBrickMigration(serverName, volumeName, fromBrick, toBrick);
}
/*
* (non-Javadoc)
* @see org.gluster.storage.management.gateway.services.GlusterInterface#commitBrickMigration(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public void commitBrickMigration(String serverName, String volumeName, String fromBrick, String toBrick) {
getGlusterInterface(serverName).commitBrickMigration(serverName, volumeName, fromBrick, toBrick);
}
/*
* (non-Javadoc)
* @see org.gluster.storage.management.gateway.services.GlusterInterface#checkBrickMigrationStatus(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public TaskStatus checkBrickMigrationStatus(String serverName, String volumeName, String fromBrick, String toBrick) {
return getGlusterInterface(serverName).checkBrickMigrationStatus(serverName, volumeName, fromBrick, toBrick);
}
/* (non-Javadoc)
* @see org.gluster.storage.management.gateway.utils.GlusterInterface#getVolumeOptionsInfo(java.lang.String)
*/
@Override
public VolumeOptionInfoListResponse getVolumeOptionsInfo(String serverName) {
return getGlusterInterface(serverName).getVolumeOptionsInfo(serverName);
}
}