ZODB 4.x -- possible?

Has anyone tested Plone 5.0 or Plone 5.1 with ZODB 4.x (via ZODB 3.11.0)?

I would like to use RelStorage 2.0, which might support ZODB 3.10.x, but does not promise to (e.g. not tested). My rationale for RelStorage 2.0 is that it has a contribution I made of commit-lock timeout support for PostgreSQL 9.3+.

Right now, my builds are maintaining my old fork of RelStorage 1.6.0ish cloned from GitHub repos by mr.developer. Avoiding my fork and preferring a regular release requires using a newer ZODB than Plone 5 is necessarily advertised to work with.



In the Plone 5 on Zope 4 effort we are using ZODB 4.something.



Watch out for this:

  • ZODB 4 runs on Python 3 and thus uses a different pickle format by default. IIRC you still can use the old one, but the two formats are not compatible. (someone worked on a migration script, also IIRC).

  • You likely need BTree >= 4, which cannot insert None values into the tree because it has no defined sorting. Products.ZCatalog > 3.1.1 and up deals with that nicely (3.1 just threw an error). There is still a lot of Plone code, which has to be updated to not index None.

I do not believe that you can use it as a drop-in replacement on Plone 5. You're likely to run into all sorts of dependency problems. But I'm not sure, you have to try it out and let me know!

I was under the impression that ZODB 4 running exclusively on Python 2.7 would be compatible with existing pickle format -- e.g. you could not run a Python 3 based ZEO and a Python 2.7 running ClientStorage, but you could run (with backward compatibility) ZODB 4 on exclusively Python 2.7 environment? Maybe I am misunderstanding.


The picke format did not change between ZODB 3 and ZODB 4. You can run your database on both versions.
But you cannot use Python 3 on the same database. See https://pythonhosted.org/zodb.py3migrate/ about the package mentioned by @thet and the discussion of the problems.