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