dace0f1 Ticket #47392 - ldbm errors when adding/modifying/deleting entries

Authored and Committed by rmeggins 9 years ago
    Ticket #47392 - ldbm errors when adding/modifying/deleting entries
    
    https://fedorahosted.org/389/ticket/47392
    Reviewed by: lkrispenz (Thanks!)
    Branch: master
    Fix Description: The problem is caused by cache consistency issues with the
    RUV entry.  Before the txn starts, we grab a pointer to the RUV entry in
    the cache.  When DNA (or any betxnpreop plugin) updates the database, it
    will also grab a pointer to the cached RUV entry and modify it, out from
    under the parent txn.  This can also cause the max CSN in the RUV to go
    backwards - the nested txn will have a later CSN which will be
    overwritten by the earlier CSN from the parent txn.
    The fix is to move the ldbm_ruv_txn code inside the transaction loop after
    the betxnpreop plugins have been run.  Also have to add modify_term inside
    the retry logic to cancel the modify ruv txn stuff in order to retry.
    The other part of the fix is to tell the code that updates the max CSN
    in the RUV to skip changes that would cause the RUV to go backwards,
    and return a code to the caller that tells the caller that the CSN is
    already covered.  The code that updates the RUV for the txn will skip
    the modify operations in that case.
    Platforms tested: RHEL6 x86_64
    Flag Day: no
    Doc impact: no