On 11/15/13 at 07:57pm, Isaku Yamahata wrote:
On Tue, Nov 12, 2013 at 03:07:19PM -0500,
Andrew Laski <andrew.la...@rackspace.com> wrote:

On 11/11/13 at 05:27pm, Jiang, Yunhong wrote:
>Resend after the HK summit, hope someone can give me hint on it.
>
>Thanks
>--jyh
>
>>-----Original Message-----
>>From: Jiang, Yunhong [mailto:yunhong.ji...@intel.com]
>>Sent: Thursday, November 07, 2013 5:39 PM
>>To: openstack-dev@lists.openstack.org
>>Subject: [openstack-dev] [nova][api] Is this a potential issue
>>
>>Hi, all
>>        I'm a bit confused of followed code in ./compute/api.py, which will be
>>invoked by api/openstack/compute/servers.py, _action_revert_resize().
>>        From the code seems there is a small windows between get the
>>migration object and update migration.status. If another API request
>>comes at this small window, it means two utility will try to revert resize at
>>same time. Is this a potential issue?
>>        Currently implementation already roll back the reservation if
>>something wrong, but not sure if we should update state to "reverting" as
>>a transaction in get_by_instance_and_status()?

The migration shouldn't end up being set to 'reverting' twice
because of the expected_task_state set and check in
instance.save(expected_task_state=None).  The quota reservation
could happen twice, so a rollback in the case of a failure in
instance.save could be good.

nova.objects.instance.Intance.save() seems like that expected_task_state=None
means don't care of task state instead of no-task going-on.
Am I missing anything?

You're not missing anything. But I think that's a bug, or at least an unexpected change in behaviour from how it used to work. If you follow instance_update() in nova.db.sqlalchemy.api just the presence of expected_task_state triggers the check. So we may need to find a way to pass that through with the save method.


thanks,



>>
>>--jyh
>>
>>    def revert_resize(self, context, instance):
>>        """Reverts a resize, deleting the 'new' instance in the process."""
>>        elevated = context.elevated()
>>        migration =
>>migration_obj.Migration.get_by_instance_and_status(
>>            elevated, instance.uuid, 'finished')
>>        >>>>>>>>>>>>>>>>>>>>>>Here we get the migration object
>>
>>        # reverse quota reservation for increased resource usage
>>        deltas = self._reverse_upsize_quota_delta(context, migration)
>>        reservations = self._reserve_quota_delta(context, deltas)
>>
>>        instance.task_state = task_states.RESIZE_REVERTING
>>        instance.save(expected_task_state=None)
>>
>>        migration.status = 'reverting'                  >>>>>>>>>>>>>>Here
>>we update the status.
>>        migration.save()
>>
>>_______________________________________________
>>OpenStack-dev mailing list
>>OpenStack-dev@lists.openstack.org
>>http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
>_______________________________________________
>OpenStack-dev mailing list
>OpenStack-dev@lists.openstack.org
>http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

_______________________________________________
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

--
Isaku Yamahata <isaku.yamah...@gmail.com>

_______________________________________________
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

_______________________________________________
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to