[openstack-dev] [trove] timeouts in gate-trove-python34-db
vstinner at redhat.com
Mon May 16 13:38:29 UTC 2016
Le 16/05/2016 13:52, Amrith Kumar a écrit :
>> IMHO the strange mock detector code must be removed. It is very
>> slow and I don't understand its purpose.
> [amrith] It serves and has served a very useful purpose and that is
> to detect bad tests where code has (and we've had lots of trouble
> with this) established a Mock() but failed to delete it.
There are many options to disable (unregister, stop, call it as you
want) mocks automatically. As I wrote, fixtures & oslotest give you
tools to do that automatically. It's also a base feature of the mock
module: "with mock.patch(...): ...". Sorry, I don't know enough the
Trove code base (code of the unit tests) to say which option is the best.
> I'd rather figure out why it is slower in Python3 because it may be
> indicative of something that may impact other parts of the code as
> well. We're having this whole discussion about Python performance and
> the Go language, I think it is not a good idea to delete code which
> is performing poorly because it is performing slowly.
Sorry but Go doesn't solve badly designed functions :-) It's an
algorithmic complexity issue: the function has to iterate on *all* alive
Python objects: complexity of O(n). I propose to remove to code to
simplify the complexity to O(1) :-)
Ok, let's take an example with Python 2.7: the command "python -bb -m
testtools.run trove/tests/unittests/common/test_exception.py" takes 972
ms. Remove the mock workaround, the command now taks 1 ms: it's now 972x
=> removing the slow workaround makes test ~1000x faster!
IMHO it's worth to start here, instead of starting to investigate why
running tests on Python 3 seems slower.
I'm not aware of such huge performance difference between Python 2 and
Python 3 when running unit tests on other OpenStack services. The issue
is specific to Trove, and IMHO it comes from the mock workaround.
More information about the OpenStack-dev