0c7ef56 Ticket 49008 v2: aborted operation can leave RUV in incorrect state

Authored and Committed by lkrispen 7 years ago
        Ticket 49008 v2: 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