[Bug 1931004] Fix included in openstack/cinder train-eol
OpenStack Infra
1931004 at bugs.launchpad.net
Thu Feb 8 07:58:57 UTC 2024
This issue was fixed in the openstack/cinder train-eol release.
--
You received this bug notification because you are a member of Ubuntu
OpenStack, which is subscribed to glance in Ubuntu.
https://bugs.launchpad.net/bugs/1931004
Title:
Add support for Pacific to RBD driver
Status in Cinder:
Fix Released
Status in Ubuntu Cloud Archive:
New
Status in Ubuntu Cloud Archive wallaby series:
New
Status in Ubuntu Cloud Archive xena series:
New
Status in glance package in Ubuntu:
Confirmed
Status in glance source package in Hirsute:
Won't Fix
Status in glance source package in Impish:
Won't Fix
Bug description:
When using ceph pacific, volume-from-image operations where both
glance and cinder are configured to use RBD result in an exception
when calling clone():
rbd.InvalidArgument: [errno 22] RBD invalid argument (error
creating clone)
ERROR cinder.volume.manager Traceback (most recent call last):
ERROR cinder.volume.manager File "/usr/local/lib/python3.9/site-packages/taskflow/engines/action_engine/executor.py", line 53, in _execute_task
ERROR cinder.volume.manager result = task.execute(**arguments)
ERROR cinder.volume.manager File "/opt/stack/cinder/cinder/volume/flows/manager/create_volume.py", line 1132, in execute
ERROR cinder.volume.manager model_update = self._create_from_image(context,
ERROR cinder.volume.manager File "/opt/stack/cinder/cinder/utils.py", line 638, in _wrapper
ERROR cinder.volume.manager return r.call(f, *args, **kwargs)
ERROR cinder.volume.manager File "/usr/local/lib/python3.9/site-packages/tenacity/__init__.py", line 411, in call
ERROR cinder.volume.manager return self.__call__(*args, **kwargs)
ERROR cinder.volume.manager File "/usr/local/lib/python3.9/site-packages/tenacity/__init__.py", line 423, in __call__
ERROR cinder.volume.manager do = self.iter(retry_state=retry_state)
ERROR cinder.volume.manager File "/usr/local/lib/python3.9/site-packages/tenacity/__init__.py", line 360, in iter
ERROR cinder.volume.manager return fut.result()
ERROR cinder.volume.manager File "/usr/lib64/python3.9/concurrent/futures/_base.py", line 438, in result
ERROR cinder.volume.manager return self.__get_result()
ERROR cinder.volume.manager File "/usr/lib64/python3.9/concurrent/futures/_base.py", line 390, in __get_result
ERROR cinder.volume.manager raise self._exception
ERROR cinder.volume.manager File "/usr/local/lib/python3.9/site-packages/tenacity/__init__.py", line 426, in __call__
ERROR cinder.volume.manager result = fn(*args, **kwargs)
ERROR cinder.volume.manager File "/opt/stack/cinder/cinder/volume/flows/manager/create_volume.py", line 998, in _create_from_image
ERROR cinder.volume.manager model_update, cloned = self.driver.clone_image(context,
ERROR cinder.volume.manager File "/opt/stack/cinder/cinder/volume/drivers/rbd.py", line 1571, in clone_image
ERROR cinder.volume.manager volume_update = self._clone(volume, pool, image, snapshot)
ERROR cinder.volume.manager File "/opt/stack/cinder/cinder/volume/drivers/rbd.py", line 1023, in _clone
ERROR cinder.volume.manager self.RBDProxy().clone(src_client.ioctx,
ERROR cinder.volume.manager File "/usr/local/lib/python3.9/site-packages/eventlet/tpool.py", line 190, in doit
ERROR cinder.volume.manager result = proxy_call(self._autowrap, f, *args, **kwargs)
ERROR cinder.volume.manager File "/usr/local/lib/python3.9/site-packages/eventlet/tpool.py", line 148, in proxy_call
ERROR cinder.volume.manager rv = execute(f, *args, **kwargs)
ERROR cinder.volume.manager File "/usr/local/lib/python3.9/site-packages/eventlet/tpool.py", line 129, in execute
ERROR cinder.volume.manager six.reraise(c, e, tb)
ERROR cinder.volume.manager File "/usr/local/lib/python3.9/site-packages/six.py", line 719, in reraise
ERROR cinder.volume.manager raise value
ERROR cinder.volume.manager File "/usr/local/lib/python3.9/site-packages/eventlet/tpool.py", line 83, in tworker
ERROR cinder.volume.manager rv = meth(*args, **kwargs)
ERROR cinder.volume.manager File "rbd.pyx", line 698, in rbd.RBD.clone
ERROR cinder.volume.manager rbd.InvalidArgument: [errno 22] RBD invalid argument (error creating clone)
ERROR cinder.volume.manager
In Pacific a check was added to make sure during a clone operation
that the child's strip unit was not less than that of its parent.
Failing this condition returns -EINVAL, which is then raised by
python-rbd as an exception. This maps to the 'order' argument in
clone(), where order is log base 2 of the strip unit. Ceph's default
is 4 megabytes. The reason we're seeing EINVAL exceptions in the
Pacific CI is that: when Openstack is configured to use Ceph for both
cinder and glance, volume-from-image tests fail because Glance's
default stripe unit is 8 (distinctly larger than Cinder's 4). This
results in an order calculation of 22, which is invalid for clone()
(too small).
I see two possible solutions and have proposed patches:
1. Increase Cinder's default chunk size to match Glance's. I think
this makes sense for both consistency and performance.
2. When doing a clone(), consider the configured chunk size /and/ the
strip unit of the parent volume and choose the higher value.
Either of these approaches prevent the failures we're seeing, I think
they are both useful individually as well.
To manage notifications about this bug go to:
https://bugs.launchpad.net/cinder/+bug/1931004/+subscriptions
More information about the Ubuntu-openstack-bugs
mailing list