• Julien Muchembled's avatar
    New algorithm for deadlock avoidance · 5e7f34d2
    Julien Muchembled authored
    The time complexity of previous one was too bad. With several tens of
    concurrent transactions, we saw commits take minutes to complete and
    the whole application looked frozen.
    
    This new algorithm is much simpler. Instead of asking the oldest
    transaction to somewhat restart (we used the "rebase" term because
    the concept was similar to what git-rebase does), the storage gives
    it priority and the newest is asked to relock (this request is ignored
    if vote already happened, which means there was actually no deadlock).
    
    testLocklessWriteDuringConflictResolution was initially more complex
    because Transaction.written (client) ignored KeyError (which is not the
    case anymore since commit 8ef1ddba).
    5e7f34d2
protocol.py 26.1 KB