[Freeipa-devel] [patch 0011] Temporary workaround for [patch 0010] Python list comprehension leak breaking the test execution

Martin Basti mbasti at redhat.com
Thu Aug 20 14:56:49 UTC 2015



On 08/17/2015 09:53 AM, Milan Kubík wrote:
> On 08/11/2015 03:23 PM, Milan Kubík wrote:
>> On 08/11/2015 09:53 AM, Jan Cholasta wrote:
>>> On 11.8.2015 09:46, Milan Kubík wrote:
>>>> On 08/11/2015 09:08 AM, Jan Cholasta wrote:
>>>>> On 11.8.2015 09:00, Milan Kubík wrote:
>>>>>
>>>>>> On 08/10/2015 06:22 PM, Milan Kubík wrote:
>>>>>>
>>>>>>> On 08/10/2015 06:02 PM, Milan Kubík wrote:
>>>>>>>
>>>>>>>> On 08/10/2015 05:54 PM, Jan Cholasta wrote:
>>>>>>>>
>>>>>>>>> On 10.8.2015 17:43, Milan Kubík wrote:
>>>>>>>>>
>>>>>>>>>> Hi all,
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> this patch fixes problem described in the ticket [1]
>>>>>>>>>>
>>>>>>>>>> that caused the test run to fail completely at every other or so
>>>>>>>>>> run.
>>>>>>>>>>
>>>>>>>>>> I took the liberty to fix most of the pep8 issues while I was 
>>>>>>>>>> at it.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Thanks to Jan Cholasta for help with identifying this one.
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> IMO this would be more robust:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>     t = None
>>>>>>>>>
>>>>>>>>>     try:
>>>>>>>>>
>>>>>>>>>         ...
>>>>>>>>>
>>>>>>>>>     finally:
>>>>>>>>>
>>>>>>>>>         del t
>>>>>>>>>
>>>>>>>>>         nss.nss_shutdown()
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> By assigning a value to the variable at the beginning you make 
>>>>>>>>> sure
>>>>>>>>>
>>>>>>>>> that the del statement will not fail.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Honza
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>> Thanks for the idea. It also removed the version check.
>>>>>>>>
>>>>>>>> Updated patch attached.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Milan
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>> Self NACK.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> I have updated the fix for all of the leaks in that class. It 
>>>>>>> seems to
>>>>>>>
>>>>>>> corrupt the database even when no init/shutdown was called. Just 
>>>>>>> not
>>>>>>>
>>>>>>> so often.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Milan
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> NACK again. The problem is the reference counting. Even with this 
>>>>>> patch,
>>>>>>
>>>>>> there seems to be at least one reference left after 't' is 
>>>>>> deleted and
>>>>>>
>>>>>> nss.nss_shutdown races with the garbage collector.
>>>>>>
>>>>>
>>>>>
>>>>> Doesn't the PKCDDocument object also reference some NSS objects? It
>>>>> might be worth trying to delete it manually before nss_shutdown as 
>>>>> well.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>> Yes, this patch doesn't work. There are still some references left.
>>>>
>>>> The problem may be on multiple places in here [1].
>>>>
>>>> There may be a reference still bound to the doc label.
>>>> Another problem is that python 2 code:
>>>>
>>>> [x for x in [123, 456]]
>>>>
>>>> creates 2 references to 456 as the list used in the assert lives for
>>>> some time
>>>> before it is garbage collected even though it is not reachable,
>>>> holding a reference to the object labeled as t.
>>>>
>>>> I don't know how nss counts the references to its objects but I 
>>>> think we
>>>> should ow I think
>>>> delete all the objects that use/are used by nss explicitly. This means
>>>> assigning the list
>>>> produced by the list comprehension a name as well and the delete it 
>>>> when
>>>> it is not needed.
>>>>
>>>> I'll send the patch shortly.
>>>>
>>>> [1]: https://paste.fedoraproject.org/253748/92783071/
>>>
>>> Given an assumption that all objects referenced only by local 
>>> variables are deleted when a function returns, maybe this can be 
>>> solved with:
>>>
>>>     def nss_initialized(func):
>>>         def decorated(*args, **kwargs):
>>>             nss.nss_init_nodb()
>>>             try:
>>>                 func(*args, **kwargs)
>>>             finally:
>>>                 nss.nss_shutdown()
>>>         return decorated
>>>
>>>     ...
>>>
>>>     class test_class(...):
>>>         @nss_initialized
>>>         def test_method(self):
>>>             ...
>>>
>>> (OTOH and untested)
>>>
>> It seems that NSS decided the assumption doesn't hold. [1]
>> Plus, the decorator seems to change the execution order of the test 
>> cases.
>>
>> [1]: https://paste.fedoraproject.org/253846/39299083/
>>
>> Milan
>>
> Hi list,
>
> since I wasn't successful at solving this problem, I revert to the 
> original plan
> and propose to take the otp import test out of the execution. The 
> attached patch
> does this.
>
> By no means is this a solution to the problem. Therefore, I think the 
> ticket should remain open.
> The priority of blocker can be dropped, though. I think 'critical' 
> should be used.
>
> Cheers,
> Milan
>
>
>
ACK

Pushed to:
master: d8b9125895758cbc33821c176f3e5a05654dbee4
ipa-4-2: 57b07070f0b16f7e0099282d6a78f22c6af00793

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/freeipa-devel/attachments/20150820/3ad33083/attachment.htm>


More information about the Freeipa-devel mailing list