rposudnevskiy / RBDSR

RBDSR - XenServer/XCP-ng Storage Manager plugin for CEPH
GNU Lesser General Public License v2.1
58 stars 23 forks source link

SR_BACKEND_FAILURE_90 with ceph jewel and xenserver 7 #2

Closed mhoffmann75 closed 8 years ago

mhoffmann75 commented 8 years ago

On XenServer 7 with Ceph Jewel we get the following error on xe pbd-plug attempt:

# xe pbd-plug uuid=xxxx
Error code: SR_BACKEND_FAILURE_90
Error parameters: , The request is missing the device parameter,

Any idea where to look at? The patch mentioned here https://github.com/rposudnevskiy/RBDSR/issues/1 does not seem to change anything....

rposudnevskiy commented 8 years ago

Hi Martin,

You can take a look at /var/log/SMlog file. There should be a more detailed description of the error.

If you send me the SMlog I can examine it.

mhoffmann75 commented 8 years ago

Thanks! Okay, this seems to be the relevant part:

Jul 22 16:06:17 pns-xen06 SM: [29543] Raising exception [90, The request is missing the device parameter]
Jul 22 16:06:17 pns-xen06 SM: [29543] ***** RBD: EXCEPTION <class 'SR.SROSError'>, The request is missing the device parameter
Jul 22 16:06:17 pns-xen06 SM: [29543]   File "/opt/xensource/sm/SRCommand.py", line 350, in run
Jul 22 16:06:17 pns-xen06 SM: [29543]     sr = driver(cmd, cmd.sr_uuid)
Jul 22 16:06:17 pns-xen06 SM: [29543]   File "/opt/xensource/sm/SR.py", line 147, in __init__
Jul 22 16:06:17 pns-xen06 SM: [29543]     self.load(sr_uuid)
Jul 22 16:06:17 pns-xen06 SM: [29543]   File "/opt/xensource/sm/RBDSR", line 172, in load
Jul 22 16:06:17 pns-xen06 SM: [29543]     raise xs_errors.XenError('ConfigDeviceMissing',)
Jul 22 16:06:17 pns-xen06 SM: [29543]   File "/opt/xensource/sm/xs_errors.py", line 52, in __init__
Jul 22 16:06:17 pns-xen06 SM: [29543]     raise SR.SROSError(errorcode, errormessage)

Please note that this is the aforementioned patched RBDSR.py. With your original File the same error occurred but corresponding line was 168.

After commenting out the following two lines (168,169) it seems to work:

#        if not self.dconf.has_key('monitors') or not self.dconf['monitors']:
#            raise xs_errors.XenError('ConfigDeviceMissing',)

But this only disables the error and is a very dirty hack. The question is why there is an error in the first place?

However this way the storage could be attached to XenServer 7 without any error. But currently i'm not able to put any data (VMs) on it. Still investigating ...

mhoffmann75 commented 8 years ago

It seems to fail on VDI creation, because ceph jewel uses some slightly different command line syntax: cephutils.py fails in create_vdi: cmd = ["rbd", "create", VDI_NAME, "--size", str(image_size), "--order", str(BLOCK_SIZE), "--pool", POOL_NAME, "--id", "xenserver", "--keyring", "/etc/ceph/ceph.client.xenserver.keyring"] rbd complains that --order is deprecated. One should use --object-size 2M instead....

So whats best from here ? Downgrade ceph jewel?

mhoffmann75 commented 8 years ago

So after removing the --order Statement from your rbd call (line 367 of cephutils.py) i am able to create disks on ceph jewel: cmd = ["rbd", "create", VDI_NAME, "--size", str(image_size), "--pool", POOL_NAME, "--id", "xenserver", "--keyring", "/etc/ceph/ceph.client.xenserver.keyring"]

Don't know if its safe to omit --object-size or what value is safe here. @rposudnevskiy Could you please test if rbd create ... --object-size is already implemented in infernalis? Then best would be to use it and drop --order. Otherwise we need two different calls depending on ceph version :-(

Another problem seems to be that creating a disk with no label or no description or label or description with space in it breaks the VDI creation :-) Missing some quoting here i guess, Did this work on infernalis?

However i see some good starting point here to get it to work with jewel.

rposudnevskiy commented 8 years ago

Hi Martin, Issues #1 and #2 have been fixed. In 'fuse' mode it should support all Jewel's features.