I haven't fully dug into testing this, but I got wondering about this question from reviewing a change [1] which would make the unshelve operation start to check the volume AZ compared to the instance AZ when the compute manager calls _prep_block_device.

That change is attempting to remove the check_attach() method in nova.volume.cinder.API since it's mostly redundant with state checks that Cinder does when reserving the volume. The only other thing that Nova does in there right now is compare the AZs.

What I'm wondering is, with that change, will things break because of a scenario like this:

1. Create volume in AZ 1.
2. Create server in AZ 1.
3. Attach volume to server (or boot server from volume in step 2).
4. Shelve (offload) server.
5. Unshelve server - nova-scheduler puts it into AZ 2.
6. _prep_block_device compares instance AZ 2 to volume AZ 1 and unshelve fails with InvalidVolume.

If unshelving a server in AZ 1 can't move it outside of AZ 1, then we're fine and the AZ check when unshelving is redundant but harmless.

[1] https://review.openstack.org/#/c/335358/38/nova/virt/block_device.py@249

--

Thanks,

Matt Riedemann

__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to