Change in vdsm[ovirt-3.5-gluster]: gluster: Patch adds geo-replication create and delete verbs.

dnarayan at redhat.com dnarayan at redhat.com
Thu Apr 16 10:14:12 UTC 2015


Hello Piotr Kliczewski, Dan Kenigsberg, Sahina Bose,

I'd like you to do a code review.  Please visit

    https://gerrit.ovirt.org/39932

to review the following change.

Change subject: gluster: Patch adds geo-replication create and delete verbs.
......................................................................

gluster: Patch adds geo-replication create and delete verbs.

This patch adds the feature geo-replication session create and delete.
It exposes two verbs:
*glusterVolumeGeoRepSessionCreate- This verb sets up session to remote
volume of remote gluster cluster for given volume name.
*glusterVolumeGeoRepSessionDelete- This verb deletes previously
created session.

Change-Id: If8c979a89ce11a1622819c474b59dcf088733594
Signed-off-by: Darshan N <dnarayan at redhat.com>
Reviewed-on: https://gerrit.ovirt.org/17644
Reviewed-by: Sahina Bose <sabose at redhat.com>
Reviewed-by: Piotr Kliczewski <piotr.kliczewski at gmail.com>
Reviewed-by: Dan Kenigsberg <danken at redhat.com>
---
M client/vdsClientGluster.py
M vdsm/gluster/api.py
M vdsm/gluster/apiwrapper.py
M vdsm/gluster/cli.py
M vdsm/gluster/exception.py
M vdsm/rpc/vdsmapi-gluster-schema.json
6 files changed, 185 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/32/39932/1

diff --git a/client/vdsClientGluster.py b/client/vdsClientGluster.py
index 6437d04..1be4664 100644
--- a/client/vdsClientGluster.py
+++ b/client/vdsClientGluster.py
@@ -701,6 +701,36 @@
         pp.pprint(status)
         return status['status']['code'], status['status']['message']
 
+    def do_glusterVolumeGeoRepSessionCreate(self, args):
+        params = self._eqSplit(args)
+        volumeName = params.get('volumeName', '')
+        remoteUserName = params.get('remoteUserName', '')
+        remoteHost = params.get('remoteHost', '')
+        remoteVolumeName = params.get('remoteVolumeName', '')
+        force = (params.get('force', 'no').upper() == 'YES')
+
+        status = self.s.glusterVolumeGeoRepSessionCreate(volumeName,
+                                                         remoteHost,
+                                                         remoteVolumeName,
+                                                         remoteUserName,
+                                                         force)
+        pp.pprint(status)
+        return status['status']['code'], status['status']['message']
+
+    def do_glusterVolumeGeoRepSessionDelete(self, args):
+        params = self._eqSplit(args)
+        volumeName = params.get('volumeName', '')
+        remoteUserName = params.get('remoteUserName', '')
+        remoteHost = params.get('remoteHost', '')
+        remoteVolumeName = params.get('remoteVolumeName', '')
+
+        status = self.s.glusterVolumeGeoRepSessionDelete(volumeName,
+                                                         remoteHost,
+                                                         remoteVolumeName,
+                                                         remoteUserName)
+        pp.pprint(status)
+        return status['status']['code'], status['status']['message']
+
 
 def getGlusterCmdDict(serv):
     return \
@@ -1194,5 +1224,28 @@
               'remoteVolumeName=remote_volume_name'
               'remoteGroupName=remote_group_name',
               'setup mount broker for geo replication'
+              )),
+         'glusterVolumeGeoRepSessionCreate': (
+             serv.do_glusterVolumeGeoRepSessionCreate,
+             ('volumeName=<master_volume_name> '
+              'remoteUserName=<remote_user_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',
+              'Create the geo-replication session'
+              )),
+         'glusterVolumeGeoRepSessionDelete': (
+             serv.do_glusterVolumeGeoRepSessionDelete,
+             ('volumeName=<master_volume_name> '
+              'remoteUserName=<remote_user_name>'
+              'remoteHost=<slave_host_name> '
+              'remoteVolumeName=<slave_volume_name> '
+              '<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',
+              'Delete the geo-replication session'
               ))
          }
diff --git a/vdsm/gluster/api.py b/vdsm/gluster/api.py
index b819b81..f27438f 100644
--- a/vdsm/gluster/api.py
+++ b/vdsm/gluster/api.py
@@ -602,6 +602,29 @@
         self.svdsmProxy.glusterExecuteMountBrokerUserAdd(remoteUserName,
                                                          remoteVolumeName)
 
+    @exportAsVerb
+    def volumeGeoRepSessionCreate(self, volumeName, remoteHost,
+                                  remotVolumeName, remoteUserName=None,
+                                  force=False, options=None):
+        self.svdsmProxy.glusterVolumeGeoRepSessionCreate(
+            volumeName,
+            remoteHost,
+            remotVolumeName,
+            remoteUserName,
+            force
+        )
+
+    @exportAsVerb
+    def volumeGeoRepSessionDelete(self, volumeName, remoteHost,
+                                  remoteVolumeName, remoteUserName=None,
+                                  options=None):
+        self.svdsmProxy.glusterVolumeGeoRepSessionDelete(
+            volumeName,
+            remoteHost,
+            remoteVolumeName,
+            remoteUserName
+        )
+
 
 def getGlusterMethods(gluster):
     l = []
diff --git a/vdsm/gluster/apiwrapper.py b/vdsm/gluster/apiwrapper.py
index 1b3b6fd..4f99259 100644
--- a/vdsm/gluster/apiwrapper.py
+++ b/vdsm/gluster/apiwrapper.py
@@ -275,6 +275,26 @@
                                                     remoteGroupName,
                                                     remoteVolumeName)
 
+    def geoRepSessionCreate(self, volumeName, remoteHost, remotVolumeName,
+                            remoteUserName=None, force=False):
+        return self._gluster.volumeGeoRepSessionCreate(
+            volumeName,
+            remoteHost,
+            remotVolumeName,
+            remoteUserName,
+            force
+        )
+
+    def geoRepSessionDelete(self, volumeName, remoteHost,
+                            remoteVolumeName,
+                            remoteUserName=None):
+        return self._gluster.volumeGeoRepSessionDelete(
+            volumeName,
+            remoteHost,
+            remoteVolumeName,
+            remoteUserName
+        )
+
 
 class GlusterSnapshot(GlusterApiBase):
     def __init__(self):
diff --git a/vdsm/gluster/cli.py b/vdsm/gluster/cli.py
index bf2a035..1c83232 100644
--- a/vdsm/gluster/cli.py
+++ b/vdsm/gluster/cli.py
@@ -1553,3 +1553,40 @@
         raise ge.GlusterGeoRepExecuteMountBrokerOptFailedException(rc,
                                                                    out, err)
     return True
+
+
+ at makePublic
+def volumeGeoRepSessionCreate(volumeName, remoteHost,
+                              remoteVolumeName,
+                              remoteUserName=None, force=False):
+    if remoteUserName:
+        userAtHost = "%s@%s" % (remoteUserName, remoteHost)
+    else:
+        userAtHost = remoteHost
+    command = _getGlusterVolCmd() + ["geo-replication", volumeName,
+                                     "%s::%s" % (userAtHost, remoteVolumeName),
+                                     "create", "no-verify"]
+    if force:
+        command.append('force')
+    try:
+        _execGlusterXml(command)
+        return True
+    except ge.GlusterCmdFailedException as e:
+        raise ge.GlusterGeoRepSessionCreateFailedException(rc=e.rc, err=e.err)
+
+
+ at makePublic
+def volumeGeoRepSessionDelete(volumeName, remoteHost, remoteVolumeName,
+                              remoteUserName=None):
+    if remoteUserName:
+        userAtHost = "%s@%s" % (remoteUserName, remoteHost)
+    else:
+        userAtHost = remoteHost
+    command = _getGlusterVolCmd() + ["geo-replication", volumeName,
+                                     "%s::%s" % (userAtHost, remoteVolumeName),
+                                     "delete"]
+    try:
+        _execGlusterXml(command)
+        return True
+    except ge.GlusterCmdFailedException as e:
+        raise ge.GlusterGeoRepSessionDeleteFailedException(rc=e.rc, err=e.err)
diff --git a/vdsm/gluster/exception.py b/vdsm/gluster/exception.py
index cd99250..339fe92 100644
--- a/vdsm/gluster/exception.py
+++ b/vdsm/gluster/exception.py
@@ -651,6 +651,16 @@
     message = "geo rep mount broker root create failed"
 
 
+class GlusterGeoRepSessionCreateFailedException(GlusterGeoRepException):
+    code = 4214
+    message = "Geo Rep session Creation failed"
+
+
+class GlusterGeoRepSessionDeleteFailedException(GlusterGeoRepException):
+    code = 4215
+    message = "Geo Rep session deletion failed"
+
+
 # Volume Snapshot
 class GlusterSnapshotException(GlusterException):
     code = 4700
diff --git a/vdsm/rpc/vdsmapi-gluster-schema.json b/vdsm/rpc/vdsmapi-gluster-schema.json
index 0c892cb..c078e9d 100644
--- a/vdsm/rpc/vdsmapi-gluster-schema.json
+++ b/vdsm/rpc/vdsmapi-gluster-schema.json
@@ -1651,6 +1651,48 @@
 {'type': 'SnapshotCreateDetail',
  'data': {'uuid': 'UUID', 'name': 'str'}}
 
+#
+# @GlusterVolume.geoRepSessionCreate:
+#
+# Creates a Geo Replication session
+#
+# @volumeName:         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
+#
+# @remoteUserName:     #optional Name of user in remote Machine
+#
+# @force:              #optional For creating a georeplication session
+#                      forcefully
+#
+# Since: 4.17.0
+##
+{'command': {'class': 'GlusterVolume', 'name': 'geoRepSessionCreate'},
+ 'data': {'volumeName': 'str', 'remoteHost': 'str',
+          'remoteVolumeName': 'str', '*remoteUserName': 'str',
+          '*force': 'bool'}}
+
+#
+# @GlusterVolume.geoRepSessionDelete:
+#
+# Deletes a Geo Replication session
+#
+# @volumeName:         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
+#
+# @remoteUserName:     #optional Name of user in remote Machine
+#
+# Since: 4.17.0
+##
+{'command': {'class': 'GlusterVolume', 'name': 'geoRepSessionDelete'},
+ 'data': {'volumeName': 'str', 'remoteHost': 'str',
+          'remoteVolumeName': 'str', '*remoteUserName': 'str'}}
+
 ##
 # @GlusterVolume.snapshotCreate:
 #


-- 
To view, visit https://gerrit.ovirt.org/39932
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: If8c979a89ce11a1622819c474b59dcf088733594
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: ovirt-3.5-gluster
Gerrit-Owner: Darshan N <dnarayan at redhat.com>
Gerrit-Reviewer: Dan Kenigsberg <danken at redhat.com>
Gerrit-Reviewer: Piotr Kliczewski <piotr.kliczewski at gmail.com>
Gerrit-Reviewer: Sahina Bose <sabose at redhat.com>


More information about the vdsm-patches mailing list