Change in vdsm[master]: gluster: geo-replication pause and resume session
dnarayan at redhat.com
dnarayan at redhat.com
Tue Aug 5 11:00:29 UTC 2014
Darshan N has uploaded a new change for review.
Change subject: gluster: geo-replication pause and resume session
......................................................................
gluster: geo-replication pause and resume session
This patch adds two new verbs to pause and resume
geo-replication session between master and slave
volume. It returns a boolean output.
Change-Id: I024bcee148bab1e713e1bc5c73d288613c466656
Signed-off-by: ndarshan <dnarayan at redhat.com>
---
M client/vdsClientGluster.py
M vdsm/gluster/api.py
M vdsm/gluster/cli.py
M vdsm/gluster/exception.py
M vdsm/gluster/vdsmapi-gluster-schema.json
5 files changed, 157 insertions(+), 0 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/69/31069/1
diff --git a/client/vdsClientGluster.py b/client/vdsClientGluster.py
index 421c853..bd7e107 100644
--- a/client/vdsClientGluster.py
+++ b/client/vdsClientGluster.py
@@ -430,6 +430,34 @@
pp.pprint(status)
return status['status']['code'], status['status']['message']
+ def do_glusterVolumeGeoRepPause(self, args):
+ params = self._eqSplit(args)
+ volumeName = params.get('volumeName', '')
+ remoteHost = params.get('remoteHost', '')
+ remoteVolumeName = params.get('remoteVolumeName', '')
+ force = (params.get('force', 'no').upper() == 'YES')
+
+ status = self.s.glusterVolumeGeoRepPause(volumeName,
+ remoteHost,
+ remoteVolumeName,
+ force)
+ pp.pprint(status)
+ return status['status']['code'], status['status']['message']
+
+ def do_glusterVolumeGeoRepResume(self, args):
+ params = self._eqSplit(args)
+ volumeName = params.get('volumeName', '')
+ remoteHost = params.get('remoteHost', '')
+ remoteVolumeName = params.get('remoteVolumeName', '')
+ force = (params.get('force', 'no').upper() == 'YES')
+
+ status = self.s.glusterVolumeGeoRepResume(volumeName,
+ remoteHost,
+ remoteVolumeName,
+ force)
+ pp.pprint(status)
+ return status['status']['code'], status['status']['message']
+
def getGlusterCmdDict(serv):
return \
@@ -731,4 +759,26 @@
('volumeName=<volume name>',
'Returns total, free and used space(bytes) of gluster volume'
)),
+ 'glusterVolumeGeoRepPause': (
+ serv.do_glusterVolumeGeoRepPause,
+ ('volumeName=<master_volume_name> '
+ 'remoteHost=<slave_host_name> '
+ 'remoteVolumeName=<slave_volume_name> '
+ '[force={yes|no}]\n\t'
+ '<master_volume_name>existing volume name in the master node\n\t'
+ '<slave_host_name>is remote slave host name or ip\n\t'
+ '<slave_volume_name>existing volume name in the slave node',
+ 'Pause the geo-replication session'
+ )),
+ 'glusterVolumeGeoRepResume': (
+ serv.do_glusterVolumeGeoRepResume,
+ ('volumeName=<master_volume_name> '
+ 'remoteHost=<slave_host_name> '
+ 'remoteVolumeName=<slave_volume_name> '
+ '[force={yes|no}]\n\t'
+ '<master_volume_name>existing volume name in the master node\n\t'
+ '<slave_host_name>is remote slave host name or ip\n\t'
+ '<slave_volume_name>existing volume name in the slave node',
+ 'Resume the geo-replication session'
+ )),
}
diff --git a/vdsm/gluster/api.py b/vdsm/gluster/api.py
index 0e6c850..abe8ba0 100644
--- a/vdsm/gluster/api.py
+++ b/vdsm/gluster/api.py
@@ -322,6 +322,22 @@
data = self.svdsmProxy.glusterVolumeStatvfs(volumeName)
return self._computeVolumeStats(data)
+ @exportAsVerb
+ def volumeGeoRepPause(self, volumeName, remoteHost, remoteVolumeName,
+ force=False, options=None):
+ self.svdsmProxy.glusterVolumeGeoRepPause(volumeName,
+ remoteHost,
+ remoteVolumeName,
+ force)
+
+ @exportAsVerb
+ def volumeGeoRepResume(self, volumeName, remoteHost, remoteVolumeName,
+ force=False, options=None):
+ self.svdsmProxy.glusterVolumeGeoRepResume(volumeName,
+ remoteHost,
+ remoteVolumeName,
+ force)
+
def getGlusterMethods(gluster):
l = []
diff --git a/vdsm/gluster/cli.py b/vdsm/gluster/cli.py
index 2e1c9a9..7993b18 100644
--- a/vdsm/gluster/cli.py
+++ b/vdsm/gluster/cli.py
@@ -1054,3 +1054,33 @@
return _parseVolumeTasks(xmltree)
except _etreeExceptions:
raise ge.GlusterXmlErrorException(err=[etree.tostring(xmltree)])
+
+
+ at makePublic
+def volumeGeoRepPause(volumeName, remoteHost, remoteVolumeName, force=False):
+ command = _getGlusterVolCmd() + ["geo-replication", volumeName,
+ "%s::%s" % (remoteHost, remoteVolumeName),
+ "pause"]
+ if force:
+ command.append('force')
+ try:
+ _execGlusterXml(command)
+ return True
+ except ge.GlusterCmdFailedException as e:
+ raise ge.GlusterVolumeGeoRepPauseFailedException(rc=e.rc,
+ err=e.err)
+
+
+ at makePublic
+def volumeGeoRepResume(volumeName, remoteHost, remoteVolumeName, force=False):
+ command = _getGlusterVolCmd() + ["geo-replication", volumeName,
+ "%s::%s" % (remoteHost, remoteVolumeName),
+ "resume"]
+ if force:
+ command.append('force')
+ try:
+ _execGlusterXml(command)
+ return True
+ except ge.GlusterCmdFailedException as e:
+ raise ge.GlusterVolumeGeoRepResumeFailedException(rc=e.rc,
+ err=e.err)
diff --git a/vdsm/gluster/exception.py b/vdsm/gluster/exception.py
index 0205cb1..b7914c0 100644
--- a/vdsm/gluster/exception.py
+++ b/vdsm/gluster/exception.py
@@ -506,3 +506,19 @@
class GlfsFiniException(GlusterLibgfapiException):
code = 4573
message = "glfs fini failed"
+
+
+#geo-replication
+class GlusterGeoRepException(GlusterException):
+ code = 4560
+ message = "Gluster Geo-Replication Exception"
+
+
+class GlusterVolumeGeoRepPauseFailedException(GlusterVolumeException):
+ code = 4575
+ message = "Volume geo-replication pause failed"
+
+
+class GlusterVolumeGeoRepResumeFailedException(GlusterVolumeException):
+ code = 4576
+ message = "Volume geo-replication resume failed"
diff --git a/vdsm/gluster/vdsmapi-gluster-schema.json b/vdsm/gluster/vdsmapi-gluster-schema.json
index 4ddd182..47003e5 100644
--- a/vdsm/gluster/vdsmapi-gluster-schema.json
+++ b/vdsm/gluster/vdsmapi-gluster-schema.json
@@ -1238,3 +1238,48 @@
{'command': {'class': 'GlusterVolume', 'name': 'statsInfoGet'},
'data': {'volumeName': 'str'},
'returns': 'GlusterVolumeStatsInfo'}
+
+
+##
+# @GlusterVolume.geoRepSessionPause:
+#
+# Pauses the Geo Replication session
+#
+# @volName: Is an existing volume name in the master node
+#
+# @remoteHost: Is remote slave host name or ip
+#
+# @remoteVolumeName: Is an available existing volume name in the slave node
+#
+# @force: For pausing a geo-replication session forcefully
+#
+# Returns:
+# True if session is successfully Paused
+#
+# Since: 4.16.0
+##
+{'command': {'class': 'GlusterVolume', 'name': 'geoRepSessionStart'},
+ 'data': {'volName': 'str', 'remoteHost': 'str', 'remoteVolumeName': 'str', 'force': 'bool'},
+ 'returns': 'bool'}
+
+##
+# @GlusterVolume.geoRepSessionResume:
+#
+# Resumes the Geo Replication session
+#
+# @volName: Is an existing volume name in the master node
+#
+# @remoteHost: Is remote slave host name or ip
+#
+# @remoteVolumeName: Is an available existing volume name in the slave node
+#
+# @force: For resuming a georeplication session forcefully
+#
+# Returns:
+# True if session is successfully resumed
+#
+# Since: 4.16.0
+##
+{'command': {'class': 'GlusterVolume', 'name': 'geoRepSessionStop'},
+ 'data': {'volName': 'str', 'remoteHost': 'str', 'remoteVolumeName': 'str', 'force': 'bool'},
+ 'returns': 'bool'}
--
To view, visit http://gerrit.ovirt.org/31069
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I024bcee148bab1e713e1bc5c73d288613c466656
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Darshan N <dnarayan at redhat.com>
More information about the vdsm-patches
mailing list