We are trying to implement volume migration across different backend, making using of cinder retype along with --migration-policy on-demand. The volume manager (/opt/stack/cinder/cinder/volume/manager.py) invokes migrate_volume method for --migration-policy which internally invokes the method _can_use_driver_migration
where it compares the difference in the extra_specs of two volume types. Currently difference is calculated by copying the extra_specs to a list and poping off 'volume_backend_name' and 'RESKEY:availability_zones' keys. But the pool parameter is not considered, which brings the length of list to be greater than 0 and the same result is sent back. A check condition which relies on this result is preventing to enter the driver specific code and defaulting to the method _migrate_volume_generic , which is the default generic migration provided by cinder, which could not be used because of our requirement specific operations.