1. 31 Mar, 2017 13 commits
  2. 30 Mar, 2017 1 commit
  3. 23 Mar, 2017 9 commits
  4. 22 Mar, 2017 1 commit
  5. 21 Mar, 2017 1 commit
  6. 20 Mar, 2017 2 commits
  7. 18 Mar, 2017 1 commit
    • Julien Muchembled's avatar
      master: fix crash when a transaction begins while a storage node starts operation · 781b4eb5
      Julien Muchembled authored
      Traceback (most recent call last):
        ...
        File "neo/lib/handler.py", line 72, in dispatch
          method(conn, *args, **kw)
        File "neo/master/handlers/client.py", line 70, in askFinishTransaction
          conn.getPeerId(),
        File "neo/master/transactions.py", line 387, in prepare
          assert node_list, (ready, failed)
      AssertionError: (set([]), frozenset([]))
      
      Master log leading to the crash:
        PACKET    #0x0009 StartOperation                 > S1
        PACKET    #0x0004 BeginTransaction               < C1
        DEBUG     Begin <...>
        PACKET    #0x0004 AnswerBeginTransaction         > C1
        PACKET    #0x0001 NotifyReady                    < S1
      
      It was wrong to process BeginTransaction before receiving NotifyReady.
      
      The changes in the storage are cosmetics: the 'ready' attribute has become
      redundant with 'operational'.
      781b4eb5
  8. 17 Mar, 2017 3 commits
  9. 14 Mar, 2017 4 commits
  10. 07 Mar, 2017 1 commit
  11. 03 Mar, 2017 1 commit
    • Julien Muchembled's avatar
      qa: fix random failure of check_checkCurrentSerialInTransaction · fec9a3a5
      Julien Muchembled authored
      Generators are not thread-safe:
      
      Exception in thread T2:
      Traceback (most recent call last):
        ...
        File "ZODB/tests/StorageTestBase.py", line 157, in _dostore
          r2 = self._storage.tpc_vote(t)
        File "neo/client/Storage.py", line 95, in tpc_vote
          return self.app.tpc_vote(transaction)
        File "neo/client/app.py", line 507, in tpc_vote
          self.waitStoreResponses(txn_context)
        File "neo/client/app.py", line 500, in waitStoreResponses
          _waitAnyTransactionMessage(txn_context)
        File "neo/client/app.py", line 145, in _waitAnyTransactionMessage
          self._waitAnyMessage(queue, block=block)
        File "neo/client/app.py", line 128, in _waitAnyMessage
          conn, packet, kw = get(block)
        File "neo/lib/locking.py", line 203, in get
          self._lock()
        File "neo/tests/threaded/__init__.py", line 590, in _lock
          for i in TIC_LOOP:
      ValueError: generator already executing
      
      ======================================================================
      FAIL: check_checkCurrentSerialInTransaction (neo.tests.zodb.testBasic.BasicTests)
      ----------------------------------------------------------------------
      Traceback (most recent call last):
        File "neo/tests/zodb/testBasic.py", line 33, in check_checkCurrentSerialInTransaction
          super(BasicTests, self).check_checkCurrentSerialInTransaction()
        File "ZODB/tests/BasicStorage.py", line 294, in check_checkCurrentSerialInTransaction
          utils.load_current(self._storage, b'\0\0\0\0\0\0\0\xf4')[1])
      failureException: False is not true
      fec9a3a5
  12. 02 Mar, 2017 2 commits
    • Julien Muchembled's avatar
      storage: fix PT updates in case of late AnswerUnfinishedTransactions · a74937c8
      Julien Muchembled authored
      This is done by moving
              self.replicator.populate()
      after the switch to MasterOperationHandler, so that the latter is not delayed.
      
      This change comes with some refactoring of the main loop,
      to clean up app.checker and app.replicator properly (like app.tm).
      
      Another option could have been to process notifications with the last handler,
      instead of the first one. But if possible, cleaning up the whole code to not
      delay handlers anymore looks the best option.
      a74937c8
    • Julien Muchembled's avatar
      mysql: code clean up · 041a3eda
      Julien Muchembled authored
      041a3eda
  13. 27 Feb, 2017 1 commit
    • Julien Muchembled's avatar
      Fix oids remaining write-locked forever · 9b33b1db
      Julien Muchembled authored
      This happened in 2 cases:
      - Commit a4c06242 ("Review aborting of
        transactions") introduced a race condition causing oids to remain
        write-locked forever after that the transaction modifying them is aborted.
      - An unfinished transaction is not locked/unlocked during tpc_finish: oids
        must be unlocked when being notified that the transaction is finished.
      9b33b1db