Add support for Pacific to RBD driver
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Cinder |
Fix Released
|
Low
|
Jon Bernard | ||
Ubuntu Cloud Archive |
New
|
Undecided
|
Unassigned | ||
Wallaby |
New
|
Undecided
|
Unassigned | ||
Xena |
New
|
Undecided
|
Unassigned | ||
glance (Ubuntu) |
Confirmed
|
Undecided
|
Unassigned | ||
Hirsute |
Won't Fix
|
Undecided
|
Unassigned | ||
Impish |
Won't Fix
|
Undecided
|
Unassigned |
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.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
ERROR cinder.
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.
Changed in cinder: | |
status: | New → In Progress |
Fix proposed: /review. opendev. org/c/openstack /cinder/ +/786260 /review. opendev. org/c/openstack /cinder/ +/786266
- https:/
- https:/