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 <[email protected]> --- 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)]) + + +@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) + + +@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 <[email protected]> _______________________________________________ vdsm-patches mailing list [email protected] https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches
