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