[Freeipa-devel] Caching ldap limits for whole connection (performance)

Rob Crittenden rcritten at redhat.com
Mon Nov 16 19:18:23 UTC 2015


Martin Basti wrote:
>
>
> On 16.11.2015 18:57, Martin Basti wrote:
>> How does this code work (IMO it doesn't), ldap2.py
>>
>>     def find_entries(self, filter=None, attrs_list=None, base_dn=None,
>>                      scope=_ldap.SCOPE_SUBTREE, time_limit=None,
>>                      size_limit=None, search_refs=False,
>> paged_search=False):
>>
>>         def _get_limits():
>>             """Get configured global limits, caching them for more
>> calls"""
>>             if not _lims:
>>                 config = self.get_ipa_config()
>>                 _lims['time'] = int(config.get('ipasearchtimelimit',
>> [None])[0])
>>                 _lims['size'] =
>> int(config.get('ipasearchrecordslimit', [None])[0])
>>             return _lims
>>         _lims = {}
>>
>>         if time_limit is None:
>>             time_limit = _get_limits()['time']
>>         if size_limit is None:
>>             size_limit = _get_limits()['size']
>>
>> Code above is supposed to do caching, but it doesn't do it. This might
>> work if _lims were self._lims.
>> I tried similar code to test this behavior:
>>
>> class test:
>>     def __init__(self):
>>        pass
>>
>>     def cached_call(self):
>>        """configured global limits"""
>>        _lims = {}
>>        def _get_limits():
>>            if not _lims:
>>                _lims['t']='oujeee'
>>                print 'getting limits'
>>            return _lims
>>
>>        print "Limits:", _get_limits()['t']
>>
>> t = test()
>> t.cached_call()
>> t.cached_call()
>> t.cached_call()
>> t.cached_call()
>>
>> Output:
>> $ python testcaching.py
>> Limits: getting limits
>> oujeee
>> Limits: getting limits
>> oujeee
>> Limits: getting limits
>> oujeee
>> Limits: getting limits
>> oujeee
>>
>> So it does not do caching, or am I wrong?
>> Martin^2
>>
> That code works, the whole caching is just for the second call of
> _get_limits()
>
> Can we instead just caching limits for second use, do caching for whole
> connection?
> This may be effective for methods/commands that calls search and show
> several times.
>
> Is there something that prevents us to do that?
>

It already is cached. See get_ipa_config().

rob




More information about the Freeipa-devel mailing list