[openstack-dev] [Neutron] Race condition between DB layer and plugin back-end implementation

Chris Friesen chris.friesen at windriver.com
Mon Nov 18 21:01:16 UTC 2013


On 11/18/2013 02:25 PM, Edgar Magana wrote:

> The problem that we are experiencing is when concurrent calls to the
> same API are sent, the number of operation at the plug-in back-end are
> long enough to make the next concurrent API call to get stuck at the DB
> transaction level, which creates a hung state for the Neutron Server to
> the point that all concurrent API calls will fail.
>
> This can be fixed if we include some "locking" system such as calling:
>
> from neutron.common import utile
>>
> @utils.synchronized('any-name', external=True)
> def create_port(self, context, port):
>>
> Obviously, this will create a serialization of all concurrent calls
> which will ends up in having a really bad performance. Does anyone has a
> better solution?

Can you break it up into smaller independent transactions so that the 
number of operations is reasonable?

Can you use finer-grained serialization?

Is there a way (possibly involving changing the API) that you can do as 
much as possible (hopefully including all the stuff that is likely to 
fail) before starting the database transaction?

Chris





More information about the OpenStack-dev mailing list