<div dir="ltr"><div><div>This series is ready for review. As normal I've done my best to break it up into logically separate changes, so it's currently 15 patches long. I've also done my best to write commit messages with the reviewer in mind. If something looks weird, please check if I called it out in the commit message.<br><br></div>This email is an overview of the series to help see all 15 patches in context. The spec is here:</div><div><br></div><div><a href="https://specs.openstack.org/openstack/nova-specs/specs/queens/approved/local-disk-serial-numbers.html">https://specs.openstack.org/openstack/nova-specs/specs/queens/approved/local-disk-serial-numbers.html</a></div><div><br></div><div>The patch series is here:</div><div><br></div><div><a href="https://review.openstack.org/#/q/status:open+project:openstack/nova+branch:master+topic:bp/local-disk-serial-numbers">https://review.openstack.org/#/q/status:open+project:openstack/nova+branch:master+topic:bp/local-disk-serial-numbers</a><br></div><div><br></div>* Add a uuid to BlockDeviceMapping<br clear="all"><div><div><div><br></div>  <a href="https://review.openstack.org/242602">https://review.openstack.org/242602</a> Add uuid column to BlockDeviceMapping<br><div><div>  <a href="https://review.openstack.org/242603">https://review.openstack.org/242603</a> Make BlockDeviceMapping object support uuid<br>  <a href="https://review.openstack.org/525599">https://review.openstack.org/525599</a> Add an online migration for BDM.uuid</div><div><br></div></div><div>The first 2 were actually originally Dan Smith's patches from 2015, resurrected for the second time. I've cribbed heavily from the original patches and also the recent migration uuid patches. I've added a bunch of robustification to the potentially racy bits, though, so they differ in some details.</div><div><br></div><div>We want the libvirt driver to use this uuid as a serial number when creating a guest. We now need to expose it to the libvirt driver for all disks.<br></div><div><br></div><div>* Expose BlockDeviceMapping.uuid to drivers<br></div><div><br></div><div>  <a href="https://review.openstack.org/524167">https://review.openstack.org/524167</a> DriverBlockDevice: make subclasses inherit _proxy_as_attr<br>  <a href="https://review.openstack.org/529037">https://review.openstack.org/529037</a> Expose BDM uuid to drivers</div><div><br></div><div>Drivers don't consume BlockDeviceMapping directly. Instead, BlockDeviceMapping objects are translated to DriverBlockDevice objects and passed in the block_device_info struct. These 2 changes simply add uuid to existing DriverBlockDevice objects.<br></div><div><br></div><div>* Expose the local root disk BDM to drivers</div><div><br></div><div>  <a href="https://review.openstack.org/526346">https://review.openstack.org/526346</a> Give volume DriverBlockDevice classes a common prefix<br>  <a href="https://review.openstack.org/526347">https://review.openstack.org/526347</a> Add DriverLocalImageBlockDevice<br>  <a href="https://review.openstack.org/529028">https://review.openstack.org/529028</a> Rename block_device_info_get_root<br>  <a href="https://review.openstack.org/529029">https://review.openstack.org/529029</a> Add local_root to block_device_info</div><div><br></div><div>Unfortunately, for reasons I'm still not entirely clear on block_device_info has never contained a DriverBlockDevice object representing a local root disk. The patches create a new DriverBlockDevice class for a local root disk, and add it to block_device_info. We do this in such a way that drivers which don't expect it to be there will never notice it.<br></div><div><br></div><div>At this point in the series, drivers have access to BDM.uuid for all of an instance's disks.<br></div><div><br></div><div>* Fix an array of incorrect uses of DriverBlockDevice and block_device_info<br></div><div><br></div><div>  <a href="https://review.openstack.org/528362">https://review.openstack.org/528362</a> Expose driver_block_device fields as attributes<br>  <a href="https://review.openstack.org/528363">https://review.openstack.org/528363</a> Pass DriverBlockDevice to driver.attach_volume<br>  <a href="https://review.openstack.org/527916">https://review.openstack.org/527916</a> Use real block_device_info data in libvirt tests</div><div><div>  <a href="https://review.openstack.org/529328">https://review.openstack.org/529328</a> Fix libvirt volume tests passing invalid disk_info</div><div><br></div></div><div>We're going to make changes which require BDM.uuid to be available. Unfortunately we hardcode BDM data all over the place. That's all going to break, even when the change isn't relevant to the test in question, which it isn't 95% of the time. This mini-series focuses on using real data everywhere we can. This reduces a ton of noise later.</div><div><br></div><div>The specific driver for the second patch in the series (to driver.attach_volume) is that the libvirt driver needs a DriverBlockDevice there, and was creating a fake one in non-test code.<br></div><div><br></div><div>At this point in the series all relevant test and non-test code is actually using the new data. This means we can make changes in the libvirt driver which require this new data without breaking everything.<br></div><div><br></div><div>* Implement local disk serial numbers for the libvirt driver</div><div><br></div>  <a href="https://review.openstack.org/529329">https://review.openstack.org/529329</a> Pass disk_info dict to libvirt_info<div>  <a href="https://review.openstack.org/529380">https://review.openstack.org/529380</a> Local disk serial numbers for the libvirt driver</div><div><br></div><div>Here we finally make the libvirt driver-specific changes to expose BDM uuid as a serial number for local disks.</div><div><br></div><div>Matt<br></div><div>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><span style="font-size:12.8px">Matthew Booth</span><br></div><div>Red Hat OpenStack Engineer, Compute DFG</div><div><br></div><div>Phone: +442070094448 (UK)</div><div><br></div></div></div></div></div></div></div>
</div></div></div></div>