[ZODB-Dev] RFC: compatibility of ZEO clients and servers running different Python versions

Christian Theune ct at gocept.com
Tue Apr 20 12:17:08 EDT 2010


On 04/20/2010 05:47 PM, Jim Fulton wrote:
> Starting with Python 2.5, Python exception classes became new-style
> types, which led to changes in the way Exception pickles were
> constructed.  This primarily affects the ZEO protocol. Changes were
> made in ZODB 3.8 and later to accomidate this change.
>
> I realized recently that, while the changes made to ZODB cause ZEO to
> work with newer Python versions when clients and servers run the same
> version, there's still a problem when clients and servers run
> different Python versions.  A Python 2.4 client doesn't work properly
> with Python 2.5 or 2.6 servers. Also, if a server is running on Python
> 2.5 or 2.6, it won't work with clients older that ZODB 3.8, regardless
> of which Python version they use.
>
> Fortunately, clients running Python 2.5 or 2.6 will work with servers
> running 2.4, so there is a way to upgrade clients and servers without
> taking them all down at once.
>
> I've been pretty proud of the fact that modern ZEO servers work with
> ZEO clients as old as ZODB 3.2.  (We've had clients that old in
> production here at ZC until very recently.)  I'm a bit disappointed
> that will lose compatibility with older clients.
>
> Yesterday, I worked out an alternate exception pickling strategy that
> would support ZEO clients as old as 3.3:
>
>    http://svn.zope.org/?rev=111149&view=rev
>
> It does this at the cost of making pickling a little more brittle
> because different exception classes would have slightly different
> __reduce__ methods.
>
> Because of the complexity of the solution, I'm, sadly, inclined to
> leave things as they are:
>
> - Can't use Python 2.4 clients with Python 2.5 or 2.6 servers
> - Can use Python 2.6 clients with 2.4 servers.
> - Can't use Python 2.5 or 2.6 servers with clients running ZODB 3.7 or
>    earlier.
>
> I wonder what other people think.

Thanks for the effort, sounds like a rabbit hole. :)

I basically aim running ZEO servers and clients at the same Python 
version. For upgrading purposes it would be nice to have your conclusion 
available to developers/admins so they can figure out (or we can tell 
them) a reasonable upgrade path.

Christian

-- 
Christian Theune · ct at gocept.com
gocept gmbh & co. kg · forsterstraße 29 · 06112 halle (saale) · germany
http://gocept.com · tel +49 345 1229889 0 · fax +49 345 1229889 1
Zope and Plone consulting and development



More information about the ZODB-Dev mailing list