• Julien Muchembled's avatar
    storage: fix write-locking bug when a deadlock happens at the end of a replication · 7fff11f6
    Julien Muchembled authored
    During rebase, writes could stay lockless although the partition was
    replicated. Another transaction could then take locks prematurely, leading to
    the following crash:
    
      Traceback (most recent call last):
        File "neo/lib/handler.py", line 72, in dispatch
          method(conn, *args, **kw)
        File "neo/storage/handlers/master.py", line 36, in notifyUnlockInformation
          self.app.tm.unlock(ttid)
        File "neo/storage/transactions.py", line 329, in unlock
          self.abort(ttid, even_if_locked=True)
        File "neo/storage/transactions.py", line 573, in abort
          not self._replicated.get(self.getPartition(oid))), x
      AssertionError: ('\x00\x00\x00\x00\x00\x03\x03v', '\x03\xca\xb44J\x13\x99\x88', '\x03\xca\xb44J\xe0\xdcU', {}, set(['\x00\x00\x00\x00\x00\x03\x03v']))
    7fff11f6
transactions.py 27 KB