> -----Original Message----- > From: Andrew Laski [mailto:andrew.la...@rackspace.com] > Sent: Tuesday, November 12, 2013 12:07 PM > To: OpenStack Development Mailing List (not for usage questions) > Subject: Re: [openstack-dev] [nova][api] Is this a potential issue > > 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.
Aha, didn't notice that's a guard. It's really cool. --jyh > > >> > >> --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 _______________________________________________ OpenStack-dev mailing list OpenStack-dev@lists.openstack.org http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev