As I understand things: yes.
 (I do not know if there is an explicit way to tells ldbm that a memory
block is no more needed, in which case we could do something about it ... )

On Fri, Jan 15, 2021 at 12:11 PM thierry bordaz <tbor...@redhat.com> wrote:

>
>
> On 1/15/21 11:53 AM, Pierre Rogier wrote:
>
> Hi Thierry,
>
> I was rather thinking about the key and value duplication when querying
> the DB:
>
> When using bdb functions that is done implicitly.
>   bdb either copies the values in the DBT buffer or it alloc/realloc it
> When mimicking bdb behavior with LDBM we will have to do that explicitly
> in the LDBM plugin:
>     LDMB returns a memory mapped address that may be ummapped
>    once the txn is ended. So we must copy the result before closing the
> txn.
> If we have a read txn that protects the full operation lifespan, then we
> could directly use the mapped address without needing to duplicate them.
>
> ah okay ! nice.
> Just a question, if we have a txn covering a search with large candidate
> list (unindexed), does that mean that by default each db key/value will
> remain mapped until txn commit ?
>
> thanks
> thierry
>
>
> Pierre
>
> On Fri, Jan 15, 2021 at 10:53 AM thierry bordaz <tbor...@redhat.com>
> wrote:
>
>>
>>
>> On 1/14/21 12:32 PM, Pierre Rogier wrote:
>>
>> Hi William,
>>
>> > It's a scenario we will need to fix via your BE work because of the
>> MVCC transaction model that
>> > LMDB will force us to adopt :)
>>
>> As I see things in the early phases the lmdb read txn will probably only
>> be managed at the db plugin level rather than at backend level. That
>> means that we will have the same inconsistency risk than today (i.e as if
>> using bdb and the implicit txn).
>> The txn model redesign you are speaking about should only occur in one of
>> the last phases (once bdb does no more coexists with lmdb).
>> It must be done because it could provide a serious performance boost for
>> read operations (IMHO, In most cases we could avoid to duplicate the db
>> data)
>>
>> Pierre, what duplicate are you thinking of ? str2entry ?
>>
>> But we should not do it while bdb is still around because of the risk of
>> lock issue and excessive retries.
>>
>> Note I put a phasing section in
>>
>> https://directory.fedoraproject.org/docs/389ds/design/backend-redesign-phase3.html#phasing
>> explaining that. But I guess I should move it within Ludwig's document
>> that englobs it.
>>
>>
>> Pierre
>>
>> On Thu, Jan 14, 2021 at 12:01 AM William Brown <wbr...@suse.de> wrote:
>>
>>>
>>>
>>> > On 13 Jan 2021, at 21:24, Pierre Rogier <prog...@redhat.com> wrote:
>>> >
>>> > Thank you Willian,
>>> > So far your scenario (entry found when reading base entry but no more
>>> existing when computing the candidates) is the only one that matches the
>>> symptoms.
>>>
>>> It's a scenario we will need to fix via your BE work because of the MVCC
>>> transaction model that LMDB will force us to adopt :)
>>>
>>> > And that triggered a thought:
>>> >  We cannot do anything for SUBTREE and ONE_LEVEL searches
>>> >   because the fact that the base entry id is not in the candidate may
>>> be normal
>>> >  but IMHO we should improve the BASE search case.
>>> > In this case the candidate list is directly set to the base entry id
>>> >  ==> if the candidate entry (in ldbm_back_next_search_entry) is not
>>> found and the scope is BASE then we should return a LDAP_NO_SUCH_ENTRY
>>> error ..
>>>
>>> I suspect that Mark has seen this email and submitted a PR to resolve
>>> this exact case :)
>>>
>>>
>>> >
>>> >        Pierre
>>> >
>>> >
>>> > On Wed, Jan 13, 2021 at 1:45 AM William Brown <wbr...@suse.de> wrote:
>>> > Hey there,
>>> >
>>> > https://github.com/389ds/389-ds-base/pull/4525/files
>>> >
>>> > I had a look and I can see a few possible contributing factors, but
>>> without a core and the exact state I can't be sure if this is correct. It's
>>> all just hypothetical from reading the code.
>>> >
>>> >
>>> > The crash is in deref_do_deref_attr() which is called as part of
>>> deref_pre_entry(). This is the SLAPI_PLUGIN_PRE_ENTRY_FN which is called by
>>> "./ldap/servers/slapd/result.c:1488:    rc = plugin_call_plugins(pb,
>>> SLAPI_PLUGIN_PRE_ENTRY_FN);"
>>> >
>>> >
>>> > I think what's important here is that the search is conducted in
>>> ./ldap/servers/slapd/opshared.c:818  rc = (*be->be_search)(pb);  Is *not*
>>> in a transaction. That means that while the single search in be_search() is
>>> consistent due to an implied transaction, the subsequent search in
>>> deref_pre_entry() is likely conducted in a seperate transaction. This
>>> allows for other operations to potentially interleave and cause changes -
>>> modrdn or delete would certainly be candidates to cause a DN to be remove
>>> between these two points. It would be extremely hard to reproduce as a race
>>> condition of course.
>>> >
>>> >
>>> > A question you asked is why don't we get a "no such entry" error or
>>> similar? I think that this is because build_candidate_list in ldbm_search.c
>>> doesn't actually create an error if the base_candidates list is empty,
>>> because an IDL is allocated with a value of 0 (no matching entries). this
>>> allows the search to proceed, and there are no errors, and the result set
>>> is set to NULL with size 0. I can't see where LDAP_NO_SUCH_OBJECT is set in
>>> this process, but without looking further into it, my suspicion is that
>>> entries of size 0 WONT return an error condition to internal_search_pb, so
>>> it's valid for this to be empty.
>>> >
>>> > Anyway, again, this is just reading the code for 20 minutes, and is
>>> not a complete in depth investigation, but maybe it's some ideas about what
>>> happened?
>>> >
>>> > Hope it helps :)
>>> >
>>> >
>>> >
>>> > —
>>> > Sincerely,
>>> >
>>> > William Brown
>>> >
>>> > Senior Software Engineer, 389 Directory Server
>>> > SUSE Labs, Australia
>>> > _______________________________________________
>>> > 389-devel mailing list -- 389-de...@lists.fedoraproject.org
>>> > To unsubscribe send an email to
>>> 389-devel-le...@lists.fedoraproject.org
>>> > Fedora Code of Conduct:
>>> https://docs.fedoraproject.org/en-US/project/code-of-conduct/
>>> > List Guidelines:
>>> https://fedoraproject.org/wiki/Mailing_list_guidelines
>>> > List Archives:
>>> https://lists.fedoraproject.org/archives/list/389-de...@lists.fedoraproject.org
>>> >
>>> >
>>> > --
>>> > --
>>> >
>>> > 389 Directory Server Development Team
>>> > _______________________________________________
>>> > 389-devel mailing list -- 389-de...@lists.fedoraproject.org
>>> > To unsubscribe send an email to
>>> 389-devel-le...@lists.fedoraproject.org
>>> > Fedora Code of Conduct:
>>> https://docs.fedoraproject.org/en-US/project/code-of-conduct/
>>> > List Guidelines:
>>> https://fedoraproject.org/wiki/Mailing_list_guidelines
>>> > List Archives:
>>> https://lists.fedoraproject.org/archives/list/389-de...@lists.fedoraproject.org
>>>
>>> —
>>> Sincerely,
>>>
>>> William Brown
>>>
>>> Senior Software Engineer, 389 Directory Server
>>> SUSE Labs, Australia
>>> _______________________________________________
>>> 389-devel mailing list -- 389-de...@lists.fedoraproject.org
>>> To unsubscribe send an email to 389-devel-le...@lists.fedoraproject.org
>>> Fedora Code of Conduct:
>>> https://docs.fedoraproject.org/en-US/project/code-of-conduct/
>>> List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
>>> List Archives:
>>> https://lists.fedoraproject.org/archives/list/389-de...@lists.fedoraproject.org
>>>
>>
>>
>> --
>> --
>>
>> 389 Directory Server Development Team
>>
>> _______________________________________________
>> 389-devel mailing list -- 389-de...@lists.fedoraproject.org
>> To unsubscribe send an email to 389-devel-le...@lists.fedoraproject.org
>> Fedora Code of Conduct: 
>> https://docs.fedoraproject.org/en-US/project/code-of-conduct/
>> List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
>> List Archives: 
>> https://lists.fedoraproject.org/archives/list/389-de...@lists.fedoraproject.org
>>
>>
>>
>
> --
> --
>
> 389 Directory Server Development Team
>
>
>

-- 
--

389 Directory Server Development Team
_______________________________________________
389-devel mailing list -- 389-de...@lists.fedoraproject.org
To unsubscribe send an email to 389-devel-le...@lists.fedoraproject.org
Fedora Code of Conduct: 
https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: 
https://lists.fedoraproject.org/archives/list/389-de...@lists.fedoraproject.org

Reply via email to