[Checkins] [zopefoundation/ZODB] c4fccb: Make all classes new-style.

GitHub noreply at github.com
Fri Apr 14 21:42:37 CEST 2017


  Branch: refs/heads/only-new-style
  Home:   https://github.com/zopefoundation/ZODB
  Commit: c4fccbce8fb85251504eafbf6623e439840d8b81
      https://github.com/zopefoundation/ZODB/commit/c4fccbce8fb85251504eafbf6623e439840d8b81
  Author: Jason Madden <jamadden at gmail.com>
  Date:   2017-04-14 (Fri, 14 Apr 2017)

  Changed paths:
    M CHANGES.rst
    M src/ZODB/ActivityMonitor.py
    M src/ZODB/ConflictResolution.py
    M src/ZODB/Connection.py
    M src/ZODB/DB.py
    M src/ZODB/ExportImport.py
    M src/ZODB/FileStorage/FileStorage.py
    M src/ZODB/FileStorage/fsdump.py
    M src/ZODB/MappingStorage.py
    M src/ZODB/UndoLogCompatible.py
    M src/ZODB/blob.py
    M src/ZODB/broken.py
    M src/ZODB/config.py
    M src/ZODB/conversionhack.py
    M src/ZODB/fstools.py
    M src/ZODB/scripts/analyze.py
    M src/ZODB/scripts/fstest.py
    M src/ZODB/scripts/migrate.py
    M src/ZODB/scripts/repozo.py
    M src/ZODB/scripts/tests/test_repozo.py
    M src/ZODB/scripts/zodbload.py
    M src/ZODB/serialize.py
    M src/ZODB/tests/BasicStorage.py
    M src/ZODB/tests/ConflictResolution.py
    M src/ZODB/tests/HistoryStorage.py
    M src/ZODB/tests/IteratorStorage.py
    M src/ZODB/tests/MTStorage.py
    M src/ZODB/tests/PackableStorage.py
    M src/ZODB/tests/PersistentStorage.py
    M src/ZODB/tests/ReadOnlyStorage.py
    M src/ZODB/tests/RevisionStorage.py
    M src/ZODB/tests/Synchronization.py
    M src/ZODB/tests/TransactionalUndoStorage.py
    M src/ZODB/tests/hexstorage.py
    M src/ZODB/tests/testActivityMonitor.py
    M src/ZODB/tests/testBroken.py
    M src/ZODB/tests/testCache.py
    M src/ZODB/tests/testConnection.py
    M src/ZODB/tests/testDemoStorage.py
    M src/ZODB/tests/testMVCCMappingStorage.py
    M src/ZODB/tests/testPersistentList.py
    M src/ZODB/tests/testSerialize.py
    M src/ZODB/tests/testZODB.py
    M src/ZODB/tests/test_cache.py
    M src/ZODB/tests/testconflictresolution.py
    M src/ZODB/tests/testpersistentclass.py
    M src/ZODB/tests/util.py
    M src/ZODB/tests/warnhook.py
    M src/ZODB/utils.py
    M src/ZODB/valuedoc.py

  Log Message:
  -----------
  Make all classes new-style.

On PyPy, it's documented (http://pypy.org/performance.html#id3) that
old-style classes are slow, and classes that derive from both old and
new are especially slow. I checked with the PyPy devs on IRC today and
they confirmed that's still true with the latest PyPy2 releases.

Unfortunately, FileStorage was one such mixed class, as was Connection.

Moving to new-style classes seems to have a positive impact in the
benchmarks. Here's zodbshootout on PyPy2 5.7.1 against a
FileStorage (running in --threads and with 5 reps to be sure we get
warmed up). First, current ZODB:

"Transaction",                fs
"Add 1000 Objects",            31,738
"Update 1000 Objects",         42,444
"Read 1000 Cold Objects",      51,894
"Read 1000 Hot Objects",       53,187
"Read 1000 Steamin' Objects", 835,877

And with this PR:

"Transaction",                fs
"Add 1000 Objects",             35,651
"Update 1000 Objects",          54,906
"Read 1000 Cold Objects",      103,484
"Read 1000 Hot Objects",        84,721
"Read 1000 Steamin' Objects", 2,112,095

The tests that hit the storage extensively are notably faster, as are
steamin and hot, Connection having been a mixed class.

I ran all tests multiple times. The data files were removed between
runs. There's some variation, but the new-style classes always seem
better.

For comparison, here's CPython 2.7.13:

"Transaction",                fs
"Add 1000 Objects",            19,531
"Update 1000 Objects",         16,201
"Read 1000 Cold Objects",      22,111
"Read 1000 Hot Objects",       21,851
"Read 1000 Steamin' Objects", 880,582

Locally I've run the tests under 2.7 and they all passed.


  Commit: c99973442931d8c1b792b988fc5e201fa57b5467
      https://github.com/zopefoundation/ZODB/commit/c99973442931d8c1b792b988fc5e201fa57b5467
  Author: Jason Madden <jamadden at gmail.com>
  Date:   2017-04-14 (Fri, 14 Apr 2017)

  Changed paths:
    M CHANGES.rst

  Log Message:
  -----------
  correct PR


  Commit: 69b580aab69bbb79a22c86608feb62c0d3f6e454
      https://github.com/zopefoundation/ZODB/commit/69b580aab69bbb79a22c86608feb62c0d3f6e454
  Author: Jason Madden <jamadden at gmail.com>
  Date:   2017-04-14 (Fri, 14 Apr 2017)

  Changed paths:
    M src/ZODB/serialize.py

  Log Message:
  -----------
  Remove one spurious change in a comment in serialize.py


Compare: https://github.com/zopefoundation/ZODB/compare/e37eba90fd2c...69b580aab69b


More information about the checkins mailing list