• Vincent Pelletier's avatar
    Allow multiple conflict resolutions for a single object and transaction. · fc514154
    Vincent Pelletier authored
    As we don't (and must not, otherwise it would deadlock) take a write lock
    on a storage node when detecting a conflict, it is possible that multiple
    conflicts get successively reported for a single object in a single
    transaction. To solve this, client must tolerate multiple conflict for a
    single object. The last resolved conflict being sent to all storage nodes,
    transaction data will be consistent at tpc_finish.
    
    - conflict_serial_dict and resolved_conflict_serial_dict become
      multivalued (sets instead of scalar)
    - each resolution only resolve conflict with highest serial if greater
      than previous resolutions for the same object
      NOTE: this assumes that ("r" being conflict resolution method, "Tn"
      being the TID on which object is based, and "Cn" being a conflict with
      transaction n) when r(T0, C1) generates T1 but triggers C2,
        r(T0, C1) + r(T1, C2) == r(T0, C2)
    
    git-svn-id: https://svn.erp5.org/repos/neo/trunk@2108 71dcc9de-d417-0410-9af5-da40c76e7ee4
    fc514154
storage.py 5.27 KB