1. 27 Apr, 2015 2 commits
    • Jason Madden's avatar
    • Jason Madden's avatar
      Substantial performance gains for PyPy. · add499ab
      Jason Madden authored
      First, eliminate the use of the RingWrapper object and always delete
      by index. It was only necessary to allow use of ring.remove(). This
      had some performance impact, but mostly saves memory.
      
      Second, eliminate the use of `enumerate` in the hot mru() path. This was the big performance win.
      
      Current results:
      
      ** concurrency=2 **
      "Transaction",                mysql     before
      "Add 3000 Objects",             7424     5486
      "Update 3000 Objects",          5699     4141
      "Read 3000 Warm Objects",       4571     4003
      "Read 3000 Cold Objects",       4932     4204
      "Read 3000 Hot Objects",       17295     10416
      "Read 3000 Steamin' Objects", 346331     168983
      add499ab
  2. 24 Apr, 2015 1 commit
  3. 22 Apr, 2015 1 commit
    • Jason Madden's avatar
      Optimize the _p_accessed code path in pure-python for substantial performance improvements. · 6fa457df
      Jason Madden authored
      Some very minor tweaks to avoid going through the __getattribute__ path so much have large consequences for `zodbshootout`:
      
        Results show objects written or read per second. Best of 3. (before/after on pypy2.5.1)
        "Transaction",                before        after      cpython2.7
        "Add 3000 Objects",             534         2340        11711
        "Update 3000 Objects",          330         3035        11333
        "Read 3000 Warm Objects",      1168         1941         9086
        "Read 3000 Cold Objects",      1647         4161         9484
        "Read 3000 Hot Objects",       2647        11086        45220
        "Read 3000 Steamin' Objects", 30523       108138      5321032
      6fa457df
  4. 14 Apr, 2015 2 commits
  5. 13 Apr, 2015 1 commit
  6. 11 Apr, 2015 1 commit
    • Jason Madden's avatar
      The python _p_activate does state management like the C version does: set to... · 80e0c6ee
      Jason Madden authored
      The python _p_activate does state management like the C version does: set to changed during jar.setstate to prevent objects that set attributes in their __setstate__ from being registered with the jar, and unconditionally mark the object as saved when finished. This fixes problems with BTrees and DB churn, among other things. Test this.
      80e0c6ee
  7. 10 Apr, 2015 4 commits
    • Jason Madden's avatar
      Deleting the jar of a ghosted Python persistent object shouldn't try to... · 245f197c
      Jason Madden authored
      Deleting the jar of a ghosted Python persistent object shouldn't try to activate it. This was an error encountered testing ZEO:
      
      ```python
      File "//Projects/GithubSources/ZEO/src/ZEO/tests/testZEO.py", line 1566, in ZEO.tests.testZEO.gracefully_handle_abort_while_storing_many_blobs
      Failed example:
          c.tpc_abort(t)
      Exception raised:
          Traceback (most recent call last):
            File "//bin/pypy/lib-python/2.7/doctest.py", line 1315, in __run
              compileflags, 1) in test.globs
            File "<doctest ZEO.tests.testZEO.gracefully_handle_abort_while_storing_many_blobs[12]>", line 1, in <module>
              c.tpc_abort(t)
            File "//Projects/VirtualEnvs/ZODBpypy/site-packages/ZODB-4.2.0.dev0-py2.7.egg/ZODB/Connection.py", line 754, in tpc_abort
              self._invalidate_creating()
            File "//Projects/VirtualEnvs/ZODBpypy/site-packages/ZODB-4.2.0.dev0-py2.7.egg/ZODB/Connection.py", line 775, in _invalidate_creating
              del o._p_jar
            File "//Projects/VirtualEnvs/ZODBpypy/site-packages/persistent-4.0.10.dev0-py2.7.egg/persistent/persistence.py", line 287, in __delattr__
              object.__delattr__(self, name)
            File "//Projects/VirtualEnvs/ZODBpypy/site-packages/persistent-4.0.10.dev0-py2.7.egg/persistent/persistence.py", line 92, in _del_jar
              self.__setattr__('_Persistent__jar', None)
            File "//Projects/VirtualEnvs/ZODBpypy/site-packages/persistent-4.0.10.dev0-py2.7.egg/persistent/persistence.py", line 249, in __getattribute__
              oga(self, '_p_activate')()
            File "//Projects/VirtualEnvs/ZODBpypy/site-packages/persistent-4.0.10.dev0-py2.7.egg/persistent/persistence.py", line 358, in _p_activate
              jar.setstate(self)
            File "//Projects/VirtualEnvs/ZODBpypy/site-packages/ZODB-4.2.0.dev0-py2.7.egg/ZODB/Connection.py", line 869, in setstate
              self._setstate(obj)
            File "//Projects/VirtualEnvs/ZODBpypy/site-packages/ZODB-4.2.0.dev0-py2.7.egg/ZODB/Connection.py", line 910, in _setstate
              p, serial = self._storage.load(obj._p_oid, '')
            File "//Projects/GithubSources/ZEO/src/ZEO/ClientStorage.py", line 842, in load
              data, tid = self._server.loadEx(oid)
            File "//Projects/GithubSources/ZEO/src/ZEO/ServerStub.py", line 176, in loadEx
              return self.rpc.call("loadEx", oid)
            File "//Projects/GithubSources/ZEO/src/ZEO/zrpc/connection.py", line 781, in call
              raise inst # error raised by server
          POSKeyError: 0x02'')
      ```
      245f197c
    • Tres Seaver's avatar
      Merge pull request #23 from NextThought/issue21 · 7f673b53
      Tres Seaver authored
      Fix tests for TimeStamp hashcode under 32-bit Pythons.
      7f673b53
    • Jason Madden's avatar
    • Jason Madden's avatar
  8. 09 Apr, 2015 22 commits
  9. 08 Apr, 2015 6 commits