While testing the retype code in a condition that forces a migration there seem to be some problems with the migration code.
Set up multi-backend LVM and a type for each, then create a volume of type lvm-1 and attach to an instance. Run retype to lvm-2, the new lv is created, and eventually the volumes type is updated.
The result however is that there are two LV's now, even though Cinder only knows about one of them. In addition, attempts to do a "nova volume-detach" now fail for resource not found. Also attempts to run a subsequent retype fail because of an internal status of migrating.
One of the bigger problems here is it's very difficult to detect what's going on and what volumes map to what. Even worse, now when I'm using for example "volume-xyz" what LV is it actually pointing to? This all depends on where we're at in the migration process wich makes things very confusing and difficult to debug.
The resource not found problem seems to be something else and may be completely unrelated. When the detach is issued we get a trace in nova-api crashing the n-api service and are unable to restart it.
2013-11-27 11:01:10.694 CRITICAL nova [-] [Errno 98] Address already in use bin/nova- api", line 10, in <module> nova/nova/ cmd/api. py", line 49, in main nova/nova/ service. py", line 318, in __init__ len=max_ url_len) nova/nova/ wsgi.py" , line 123, in __init__ listen( bind_addr, family, backlog=backlog) lib/python2. 7/dist- packages/ eventlet/ convenience. py", line 38, in listen python2. 7/socket. py", line 224, in meth self._sock, name)(* args)
2013-11-27 11:01:10.694 TRACE nova Traceback (most recent call last):
2013-11-27 11:01:10.694 TRACE nova File "/usr/local/
2013-11-27 11:01:10.694 TRACE nova sys.exit(main())
2013-11-27 11:01:10.694 TRACE nova File "/opt/stack/
2013-11-27 11:01:10.694 TRACE nova max_url_len=16384)
2013-11-27 11:01:10.694 TRACE nova File "/opt/stack/
2013-11-27 11:01:10.694 TRACE nova max_url_
2013-11-27 11:01:10.694 TRACE nova File "/opt/stack/
2013-11-27 11:01:10.694 TRACE nova self._socket = eventlet.
2013-11-27 11:01:10.694 TRACE nova File "/usr/local/
2013-11-27 11:01:10.694 TRACE nova sock.bind(addr)
2013-11-27 11:01:10.694 TRACE nova File "/usr/lib/
2013-11-27 11:01:10.694 TRACE nova return getattr(
2013-11-27 11:01:10.694 TRACE nova error: [Errno 98] Address already in use
2013-11-27 11:01:10.694 TRACE nova