1. 22 May, 2015 1 commit
  2. 20 May, 2015 1 commit
    • Jason Madden's avatar
      Optimizations for ClientCache, especially under PyPy. · 48c336d1
      Jason Madden authored
      - make the locked decorator easier to inline by not creating a new closure every time.
      - use builtin dicts instead of the pure-python BTrees (only under pypy)
      
      "Transaction",                  AFTER    BEFORE
      "Add 3000 Objects",             10014      8777
      "Update 3000 Objects",          12199      8805
      "Read 3000 Warm Objects",        4294      3699
      "Read 3000 Cold Objects",        4264      3676
      "Read 3000 Hot Objects",        79764     58732
      "Read 3000 Steamin' Objects", 2667283   2574508
      48c336d1
  3. 28 Apr, 2015 1 commit
  4. 11 Apr, 2015 1 commit
  5. 10 Apr, 2015 3 commits
  6. 06 Jan, 2015 1 commit
  7. 05 Jan, 2015 6 commits
  8. 04 Jan, 2015 1 commit
  9. 27 Dec, 2014 4 commits
  10. 18 Dec, 2014 3 commits
  11. 19 Nov, 2014 1 commit
  12. 13 Aug, 2014 2 commits
  13. 13 Jul, 2014 1 commit
  14. 21 Mar, 2014 2 commits
  15. 03 Oct, 2013 4 commits
  16. 18 Sep, 2013 1 commit
  17. 30 Aug, 2013 4 commits
  18. 28 Aug, 2013 1 commit
  19. 27 May, 2013 2 commits
    • Marius Gedminas's avatar
      Fix ClientStorage docstring · 1997818b
      Marius Gedminas authored
      1997818b
    • Marius Gedminas's avatar
      Don't triplicate connection attempts · c293082e
      Marius Gedminas authored
      The loop over all possible IPv4 and IPv6 addresses turns out to also
      loop through all possible socket types (SOCK_STREAM/IPPROTO_TCP,
      SOCK_DGRAM/IPPROTO_UDP, SOCK_RAW/IPPROTO_IP).  This meant that each
      connection attempt was repeated three times, serially.
      
      This fixes new_addr.test nondeterministic failures.  Here's a short
      reminder of what that test does:
      
        1. Starts a ZEO server on random port X
        2. Connects and creates some data
        3. Stops the ZEO server
        4. Starts a new ZEO server on random port Y
        5. Tells the old connection about the new address
        6. Makes a modification though a new connection
        7. Waits for the old connection to reconnect using the new address,
        8. Verifies that it sees the new data
      
      Here's why the test used to fail:
      
        * In step 3, when we stop the ZEO server, the client would notice a
          disconnect and immediately try to reconnect.
      
        * Due to this bug it would open three TCP connections to localhost:X
          and somehow succeed (I've no idea why -- ZEO server is supposed to
          close the listening socket before it drops client connections, so
          how can a new connection to the listening socket succeed?)
      
        * It would try handshaking each of the connection one after the other,
          timing out after 10 seconds each time (in ZEO.ServerStub.stub).
      
        * Only after all three connection attempts failed would it sleep for
          `max_disconnect_poll` seconds and then try to connect to localhost:Y
      
        * Three times 10 seconds is 30 seconds, which is by accident the same
          timeout the test uses in step 7 to wait for a successful
          reconnection.
      
      With this fix the test still does one unnecessary 10 second timeout
      before it passes.  I'd love to fix it, but I'm losing hope of
      understanding what's actually happening there.
      c293082e