[. . .]
From what I understand, retype needs to be implemented on a per
driver
level, and that’s simply not the case for the rbd driver yet.
Below is a small patch to the rbd driver that “implements” the retype
function
and subsequently allows for QoS changes of Cinder volumes on Ceph.
(Not sure at all if that breaks things elsewhere :)
If you have time, you might want to submit an upstream review
request and let the CI infrastructure handle that for you.
--
/kashyap
—>
# diff -u /usr/lib/python2.6/site-packages/cinder/volume/drivers/rbd.py.orig
/usr/lib/python2.6/site-packages/cinder/volume/drivers/rbd.py
--- /usr/lib/python2.6/site-packages/cinder/volume/drivers/rbd.py.orig
2014-11-19 11:44:43.739979396 +0100
+++ /usr/lib/python2.6/site-packages/cinder/volume/drivers/rbd.py 2014-11-19
14:28:27.853345650 +0100
@@ -651,6 +651,29 @@
new_name = "%s.deleted" % (volume_name)
self.rbd.RBD().rename(client.ioctx, volume_name, new_name)
+ def retype(self, ctxt, volume, new_type, diff, host):
+ """Retype a volume, QoS change only."""
+ LOG.info('Retype volume request %(vol)s to be %(type)s '
+ '(host: %(host)s), diff %(diff)s.' %
+ {'vol': volume['name'],
+ 'type': new_type,
+ 'host': host,
+ 'diff': diff})
+
+ if volume['host'] != host['host']:
+ LOG.error('Retype with host migration not supported')
+ return False
+
+ if diff['encryption']:
+ LOG.error('Retype of encryption type not supported')
+ return False
+
+ if diff['extra_specs']:
+ LOG.error('Retype of extra_specs not supported')
+ return False
+
+ return True
+
<--
Cheers,
Arne
--
Arne Wiebalck
CERN IT