1. 08 Jul, 2016 1 commit
  2. 07 Jul, 2016 24 commits
  3. 06 Jul, 2016 8 commits
  4. 05 Jul, 2016 1 commit
  5. 03 Jul, 2016 2 commits
  6. 02 Jul, 2016 2 commits
  7. 01 Jul, 2016 2 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