cgrzemba / 389-ds-base

Forked from 389-ds-base 5 years ago
Clone

79a3dea Ticket 49008 backport 1.3.5 : aborted operation can leave RUV in incorrect state

Authored and Committed by lkrispen 7 years ago
        Ticket 49008 backport 1.3.5 : aborted operation can leave RUV in incorrect state
    
            Bug description:
            If a plugin operation succeeded, but the operation itself fails and is aborted the RUV is in an incorrect state (rolled up to the succesful plugin op)
    
            Fix Decription:
            Introduce a "primary_csn", this is the csn of the main operation, either a client operation or a replicated operation.
            csns generated by internal operations, eg by plugins are secondary csn.
    
            Maintain the primary csn in thread local data, like it is used for the agreement name (or txn stack): prim_csn.
    
            Extend the data structure of the pending list to keep prim_csn for each inserted csn
    
            If a csn is created or received check prim_csn: if it exists use it, if it doesn't exist set it
    
            when inserting a csn to the pending list pass the prim_csn
    
            when cancelling a csn, if it is the prim_csn also cancell all secondary csns
    
            when committing a csn,
    
            if it is not the primary csn, do nothing
    
            if it is the prim_csn trigger the pending list rollup, stop at the first not committed csn
    
            if the RID of the prim_csn is not the local RID also rollup the pending list for the local RID.
    
            Reviewed by:  Thierry, Thanks
    
        
file modified
+15 -0