1. 07 Jul, 2016 4 commits
  2. 06 Jul, 2016 7 commits
  3. 05 Jul, 2016 1 commit
  4. 02 Jul, 2016 2 commits
  5. 01 Jul, 2016 4 commits
    • Jim Fulton's avatar
      Simplified error handling during vote · 020a9f8c
      Jim Fulton authored
      ZEO's vote error handling was extremely and weirdly complicated.
      There's a hysterical explanation: Originally, the ZEO protocol was
      synchronous and mirrored the storage API. That was too slow, so store
      was made asynchronous.  But then there was no way to return new
      serials, so we added a serialnos client API that the server called
      during TPC. This was used both to serials and errors.  Later, tpc_vote
      was added, which is a synchronous method. That would have been an
      execllent opportunity to fix this, but noooooooooo.
      
      I'd like the server vote logic to get simpler, and we also want to get rid
      of serialnos, as it makes it hard to commit multiple transactions at
      once on the client.  We can't get rid of serialnos now, because the
      client needs to work with old servers.
      
      Of course, nothing is easy. There was a special edge case where if the
      client saw an unhandled conflict error, it would invalidate it's cache
      for that object, allowing it to eventually recover when caches had
      missed invalidations. This required a change to ClientStorage, which
      meant that the server wouldn't work with older ZEO versions, which
      meant that the server could only support protocol Z5, which in tern
      affected protocol-negotiation tests....
      020a9f8c
    • Jim Fulton's avatar
      Make the cache thread safe again. :/ · 5e6fd05f
      Jim Fulton authored
      There are some cases where we want to touch the cache outside of the
      I/O thread. Including:
      
      - ClientStorage wants to to invalidata cache entries if it gets a
        conflict error in voting.
      
      - loadBefore can probably be optimized by checking the cache in the
        client thread. (This will be safe for loadBefore, because the intent
        in practice is never to load current data.
      5e6fd05f
    • Jim Fulton's avatar
      If vote fails with a conflict error, invalidate the corresponding cache entry · 062cbecc
      Jim Fulton authored
      This used to happen via the server calling serialnos, but ZEO 5
      servers no longer do this.  For the reason for invalidating the cache
      entry, see the new comment.
      062cbecc
    • Jim Fulton's avatar
      Added the mock test dependency · 48defe9f
      Jim Fulton authored
      It's a shame that Tox is unable (or unwilling) to get test
      dependencies from package meta data. :(
      48defe9f
  6. 29 Jun, 2016 2 commits
  7. 28 Jun, 2016 6 commits
  8. 27 Jun, 2016 6 commits
  9. 26 Jun, 2016 2 commits
    • Jim Fulton's avatar
      Awful hack to run the server multi-threaded · daca97cb
      Jim Fulton authored
      Because running it single-threaded was unstable, at least in the tests.
      
      See http://bugs.python.org/issue27392
      daca97cb
    • Jim Fulton's avatar
      Refactord the server to be single-threaded to make SSL work on Linux · da2e2281
      Jim Fulton authored
      SSL didn't work on Linux because of an incompatibility between
      non-blocking sockerts and SSL (which wasn't an issue on Mac OS X for
      some reason).
      
      I decided to try switching the server to use a single thread.  This
      led to a performance improvement for zodbshootout and a lower-level
      networking test.  I refactored the server listening logic and kept (at
      least for now) both the multi-threaded and the single-threaded
      version. (The multi-threaded logic can be used by changing a single
      import. Tests pass with both.).
      
      I'm a bit worried about the asyncio server. See
      
        http://bugs.python.org/issue27386
      
      Tests appear to be less stable using asyncio.server on my Mac. :(
      da2e2281
  10. 24 Jun, 2016 4 commits
  11. 23 Jun, 2016 1 commit
  12. 22 Jun, 2016 1 commit