Comment 0 for bug 1016650

Revision history for this message
msinhore (msinhore) wrote :

Selecting a flavor different of m1.tiny for an instance, this operation isn't supported when XCP is used. The XCP is related of XenServer described on table below:
XenServer 5.5 == XCP 0.5
XenServer 5.6 == XCP 1.0
XenServer 5.6sp2 == XCP 1.1
XenServer 6.0 == XCP 1.5

Based on this, the operation to resize the VHD is not supported as is showed in the backtrace below:

from 5GB to 20GB from (pid=1358) _resize_instance /usr/lib/python2.6/site-packages/nova/virt/xenapi/vmops.py:899
2012-06-21 16:14:50 ERROR nova.utils [req-f499f181-efc0-4ed1-abed-f3a5c644b5a7 afae889ca8c84479b8195e8b0e462320 faa2e7d479914529bfceda68c8ca33df] Instance eba99f3d-cf50-4f07-b75b-969922daa7b3: Failed to spawn, r
olling back.
2012-06-21 16:14:50 TRACE nova.utils Traceback (most recent call last):
2012-06-21 16:14:50 TRACE nova.utils File "/usr/lib/python2.6/site-packages/nova/virt/xenapi/vmops.py", line 346, in spawn
2012-06-21 16:14:50 TRACE nova.utils vdis = create_disks_step(undo_mgr)
2012-06-21 16:14:50 TRACE nova.utils File "/usr/lib/python2.6/site-packages/nova/virt/xenapi/vmops.py", line 138, in inner
2012-06-21 16:14:50 TRACE nova.utils rv = f(*args, **kwargs)
2012-06-21 16:14:50 TRACE nova.utils File "/usr/lib/python2.6/site-packages/nova/virt/xenapi/vmops.py", line 265, in create_disks_step
2012-06-21 16:14:50 TRACE nova.utils vdis = self._create_disks(context, instance, image_meta)
2012-06-21 16:14:50 TRACE nova.utils File "/usr/lib/python2.6/site-packages/nova/virt/xenapi/vmops.py", line 246, in _create_disks
2012-06-21 16:14:50 TRACE nova.utils self._resize_instance(instance, vdi["vdi_uuid"])
2012-06-21 16:14:50 TRACE nova.utils File "/usr/lib/python2.6/site-packages/nova/virt/xenapi/vmops.py", line 905, in _resize_instance
2012-06-21 16:14:50 TRACE nova.utils str(new_disk_size))
2012-06-21 16:14:50 TRACE nova.utils File "/usr/lib/python2.6/site-packages/nova/virt/xenapi_conn.py", line 574, in call_xenapi
2012-06-21 16:14:50 TRACE nova.utils return tpool.execute(f, *args)
2012-06-21 16:14:50 TRACE nova.utils File "/usr/lib/python2.6/site-packages/eventlet/tpool.py", line 76, in tworker
2012-06-21 16:14:50 TRACE nova.utils rv = meth(*args,**kwargs)
2012-06-21 16:14:50 TRACE nova.utils File "/usr/lib/python2.6/site-packages/XenAPI.py", line 229, in __call__
2012-06-21 16:14:50 TRACE nova.utils return self.__send(self.__name, args)
2012-06-21 16:14:50 TRACE nova.utils File "/usr/lib/python2.6/site-packages/XenAPI.py", line 133, in xenapi_request
2012-06-21 16:14:50 TRACE nova.utils result = _parse_result(getattr(self, methodname)(*full_params))
2012-06-21 16:14:50 TRACE nova.utils File "/usr/lib/python2.6/site-packages/XenAPI.py", line 203, in _parse_result
2012-06-21 16:14:50 TRACE nova.utils raise Failure(result['ErrorDescription'])
2012-06-21 16:14:50 TRACE nova.utils Failure: ['SR_OPERATION_NOT_SUPPORTED', 'OpaqueRef:81ae5ebc-399b-afbb-e406-057cbcdb0388']
2012-06-21 16:14:50 TRACE nova.utils
2012-06-21 16:14:50 ERROR nova.compute.manager [req-f499f181-efc0-4ed1-abed-f3a5c644b5a7 afae889ca8c84479b8195e8b0e462320 faa2e7d479914529bfceda68c8ca33df] [instance: eba99f3d-cf50-4f07-b75b-969922daa7b3] Instan
ce failed to spawn

Below the part of code mentioned in the backtrace:

        if virtual_size < new_disk_size:
            # Resize up. Simple VDI resize will do the trick
            LOG.debug(_("Resizing up VDI %(vdi_uuid)s from %(old_gb)dGB to "
                        "%(new_gb)dGB") % locals())
            if self._product_version[0] > 5:
                resize_func_name = 'VDI.resize'
            else:
         resize_func_name = 'VDI.resize_online'
            self._session.call_xenapi(resize_func_name, vdi_ref,
                    str(new_disk_size))
            LOG.debug(_("Resize instance %s complete") % (instance.uuid))

To fix this, is need to get the variable product_band and, since all XCP versions are larger than XenServer 5.x, add it to use only VDI.resize.

I attach a path for the Folsom.