[openstack-dev] [neutron][all] switch from mysqldb to another eventlet aware mysql client

Ihar Hrachyshka ihrachys at redhat.com
Fri Jul 18 11:45:39 UTC 2014


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

On 14/07/14 17:03, Ihar Hrachyshka wrote:
> On 14/07/14 15:54, Clark Boylan wrote:
>> On Sun, Jul 13, 2014 at 9:20 AM, Ihar Hrachyshka 
>> <ihrachys at redhat.com> wrote: On 11/07/14 19:20, Clark Boylan 
>> wrote:
>>>>> Before we get too far ahead of ourselves mysql-connector
>>>>> is not hosted on pypi. Instead it is an external package
>>>>> link. We recently managed to remove all packages that are
>>>>> hosted as external package links from openstack and will
>>>>> not add new ones in. Before we can use mysql-connector in
>>>>> the gate oracle will need to publish mysql-connector on
>>>>> pypi properly.
> 
>> There is misunderstanding in our community on how we deploy db 
>> client modules. No project actually depends on any of them. We 
>> assume deployers will install the proper one and configure 
>> 'connection' string to use it. In case of devstack, we install
>> the appropriate package from distribution packages, not pip.
> 
>>> Correct, but for all of the other test suites (unittests) we 
>>> install the db clients via pip because tox runs them and 
>>> virtualenvs allowing site packages cause too many problems. See
>>>  
>>> https://git.openstack.org/cgit/openstack/nova/tree/test-requirements.txt#n8.
>>>
>>>
>
>>> 
So we do actually depend on these things being pip installable.
>>> Basically this allows devs to run `tox` and it works.
> 
> Roger that, and thanks for clarification. I'm trying to reach the 
> author and the maintainer of mysqlconnector-python to see whether
> I'll be able to convince him to publish the packages on
> pypi.python.org.
> 

I've reached the maintainer of the module, he told me he is currently
working on uploading releases directly to pypi.python.org.

> 
>>> I would argue that we should have devstack install via pip too 
>>> for consistency, but that is a different issue (it is already 
>>> installing all of the other python dependencies this way so
>>> why special case?).
> 
>> What we do is recommending a module for our users in our 
>> documentation.
> 
>> That said, I assume the gate is a non-issue. Correct?
> 
>>>>> 
>>>>> That said there is at least one other pure python 
>>>>> alternative, PyMySQL. PyMySQL supports py3k and pypy. We 
>>>>> should look at using PyMySQL instead if we want to start
>>>>> with a reasonable path to getting this in the gate.
> 
>> MySQL Connector supports py3k too (not sure about pypy though).
> 
>>>>> 
>>>>> Clark
>>>>> 
>>>>> On Fri, Jul 11, 2014 at 10:07 AM, Miguel Angel Ajo Pelayo 
>>>>> <mangelajo at redhat.com> wrote:
>>>>>> +1 here too,
>>>>>> 
>>>>>> Amazed with the performance gains, x2.4 seems a lot, and 
>>>>>> we'd get rid of deadlocks.
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> ----- Original Message -----
>>>>>>> +1
>>>>>>> 
>>>>>>> I'm pretty excited about the possibilities here.  I've 
>>>>>>> had this mysqldb/eventlet contention in the back of my 
>>>>>>> mind for some time now. I'm glad to see some work
>>>>>>> being done in this area.
>>>>>>> 
>>>>>>> Carl
>>>>>>> 
>>>>>>> On Fri, Jul 11, 2014 at 7:04 AM, Ihar Hrachyshka 
>>>>>>> <ihrachys at redhat.com> wrote:
>>>>> On 09/07/14 13:17, Ihar Hrachyshka wrote:
>>>>>>>>>> Hi all,
>>>>>>>>>> 
>>>>>>>>>> Multiple projects are suffering from db lock 
>>>>>>>>>> timeouts due to deadlocks deep in mysqldb
>>>>>>>>>> library that we use to interact with mysql
>>>>>>>>>> servers. In essence, the problem is due to
>>>>>>>>>> missing eventlet support in mysqldb module,
>>>>>>>>>> meaning when a db lock is encountered, the
>>>>>>>>>> library does not yield to the next green thread,
>>>>>>>>>> allowing other threads to eventually unlock the
>>>>>>>>>> grabbed lock, and instead it just blocks the main
>>>>>>>>>> thread, that eventually raises timeout exception
>>>>>>>>>> (OperationalError).
>>>>>>>>>> 
>>>>>>>>>> The failed operation is not retried, leaving 
>>>>>>>>>> failing request not served. In Nova, there is a 
>>>>>>>>>> special retry mechanism for deadlocks, though I 
>>>>>>>>>> think it's more a hack than a proper fix.
>>>>>>>>>> 
>>>>>>>>>> Neutron is one of the projects that suffer from 
>>>>>>>>>> those timeout errors a lot. Partly it's due to
>>>>>>>>>> lack of discipline in how we do nested calls in
>>>>>>>>>> l3_db and ml2_plugin code, but that's not
>>>>>>>>>> something to change in foreseeable future, so we
>>>>>>>>>> need to find another solution that is applicable
>>>>>>>>>> for Juno. Ideally, the solution should be
>>>>>>>>>> applicable for Icehouse too to allow distributors
>>>>>>>>>> to resolve existing deadlocks without waiting for
>>>>>>>>>> Juno.
>>>>>>>>>> 
>>>>>>>>>> We've had several discussions and attempts to 
>>>>>>>>>> introduce a solution to the problem. Thanks to 
>>>>>>>>>> oslo.db guys, we now have more or less clear
>>>>>>>>>> view on the cause of the failures and how to
>>>>>>>>>> easily fix them. The solution is to switch
>>>>>>>>>> mysqldb to something eventlet aware. The best
>>>>>>>>>> candidate is probably MySQL Connector module that
>>>>>>>>>> is an official MySQL client for Python and that
>>>>>>>>>> shows some (preliminary) good results in terms
>>>>>>>>>> of performance.
>>>>> 
>>>>> I've made additional testing, creating 2000 networks in 
>>>>> parallel (10 thread workers) for both drivers and
>>>>> comparing results.
>>>>> 
>>>>> With mysqldb: 215.81 sec With mysql-connector: 88.66
>>>>> 
>>>>> ~2.4 times performance boost, ok? ;)
>>>>> 
>>>>> I think we should switch to that library *even* if we
>>>>> forget about all the nasty deadlocks we experience now.
>>>>> 
>>>>>>>>>> 
>>>>>>>>>> I've posted a Neutron spec for the switch to the 
>>>>>>>>>> new client in Juno at [1]. Ideally, switch is
>>>>>>>>>> just a matter of several fixes to oslo.db that
>>>>>>>>>> would enable full support for the new driver
>>>>>>>>>> already supported by SQLAlchemy, plus
>>>>>>>>>> 'connection' string modified in service
>>>>>>>>>> configuration files, plus documentation updates
>>>>>>>>>> to refer to the new official way to configure
>>>>>>>>>> services for MySQL. The database code won't,
>>>>>>>>>> ideally, require any major changes, though some
>>>>>>>>>> adaptation for the new client library may be
>>>>>>>>>> needed. That said, Neutron does not seem to 
>>>>>>>>>> require any changes, though it was revealed that 
>>>>>>>>>> there are some alembic migration rules in
>>>>>>>>>> Keystone or Glance that need (trivial)
>>>>>>>>>> modifications.
>>>>>>>>>> 
>>>>>>>>>> You can see how trivial the switch can be
>>>>>>>>>> achieved for a service based on example for
>>>>>>>>>> Neutron [2].
>>>>>>>>>> 
>>>>>>>>>> While this is a Neutron specific proposal, there
>>>>>>>>>> is an obvious wish to switch to the new library 
>>>>>>>>>> globally throughout all the projects, to reduce 
>>>>>>>>>> devops burden, among other things. My vision is 
>>>>>>>>>> that, ideally, we switch all projects to the new 
>>>>>>>>>> library in Juno, though we still may leave
>>>>>>>>>> several projects for K in case any issues arise,
>>>>>>>>>> similar to the way projects switched to
>>>>>>>>>> oslo.messaging during two cycles instead of one.
>>>>>>>>>> Though looking at how easy Neutron can be
>>>>>>>>>> switched to the new library, I wouldn't expect
>>>>>>>>>> any issues that would postpone the switch till
>>>>>>>>>> K.
>>>>>>>>>> 
>>>>>>>>>> It was mentioned in comments to the spec
>>>>>>>>>> proposal that there were some discussions at the
>>>>>>>>>> latest summit around possible switch in context
>>>>>>>>>> of Nova that revealed some concerns, though they
>>>>>>>>>> do not seem to be documented anywhere. So if you
>>>>>>>>>> know anything about it, please comment.
>>>>>>>>>> 
>>>>>>>>>> So, we'd like to hear from other projects what's 
>>>>>>>>>> your take on that move, whether you see any
>>>>>>>>>> issues or have concerns about it.
>>>>>>>>>> 
>>>>>>>>>> Thanks for your comments, /Ihar
>>>>>>>>>> 
>>>>>>>>>> [1]: https://review.openstack.org/#/c/104905/
>>>>>>>>>> [2]: https://review.openstack.org/#/c/105209/
>>>>>>>>>> 
>>>>>>>>>> _______________________________________________ 
>>>>>>>>>> OpenStack-dev mailing list 
>>>>>>>>>> OpenStack-dev at lists.openstack.org 
>>>>>>>>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>>>
>
>>>>>>>>>> 
>>>>>>>>>> 
> _______________________________________________
>>>>>>>> OpenStack-dev mailing list 
>>>>>>>> OpenStack-dev at lists.openstack.org 
>>>>>>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>>>>>>>
>>>>>>>
>>>>>>>>
>
>>>>>>>> 
>>>>>>>> 
> _______________________________________________
>>>>>>> OpenStack-dev mailing list 
>>>>>>> OpenStack-dev at lists.openstack.org 
>>>>>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>>>>>>>
>>>>>>
>>>>>>
>>>>>>>
>
>>>>>>> 
>>>>>>> 
> _______________________________________________
>>>>>> OpenStack-dev mailing list 
>>>>>> OpenStack-dev at lists.openstack.org 
>>>>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>>>>>
>>>>>>
>>>>>
>>>>>>
>
>>>>>> 
_______________________________________________ OpenStack-dev
>>>>> mailing list OpenStack-dev at lists.openstack.org 
>>>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>>>>>
>>>
>>>
>>>>>
>
>>>>> 
_______________________________________________
>>> OpenStack-dev mailing list OpenStack-dev at lists.openstack.org 
>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
>>> 
>>> 
>> _______________________________________________ OpenStack-dev 
>> mailing list OpenStack-dev at lists.openstack.org 
>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
>> 
> 
> _______________________________________________ OpenStack-dev
> mailing list OpenStack-dev at lists.openstack.org 
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
> 
-----BEGIN PGP SIGNATURE-----
Version: GnuPG/MacGPG2 v2.0.22 (Darwin)
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQEcBAEBCgAGBQJTyQjjAAoJEC5aWaUY1u57560IAIwMf37adTOww1xtMkMFqBo2
tXxvrJo+lhwF0B4CbEzaybNgCRd4N0UWpElDOkIU4Gqy4WLwp2Kf1+Qz8mUYAJEp
tGo9wiQjlHSlUUNWTci4to1+dHztNomJYLkVD+EQsbGjC7quZhVGXYQPZV9rOR1c
4V0h1vGvJoP4jLSE9KdAx8eQd81anAiKj+iPdWxiio2Xqcvjtt+qspoXzCpxRKlF
6ghtihKhswmeJZ6G2KjxXJGZwXOkgigKICT4AwgnF14B8ZgRP9txOp2Ofy9GtUf0
aYTPfRr5OyD80Cw+HNdOJw4haETNwTU9sBXI01Vv7WuqbDDVD1kIBVExgLMHw1g=
=ubL5
-----END PGP SIGNATURE-----



More information about the OpenStack-dev mailing list