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. Jim -- Jim Fulton _______________________________________________ For more information about ZODB, see the ZODB Wiki: http://www.zope.org/Wikis/ZODB/ ZODB-Dev mailing list - ZODB-Dev@zope.org https://mail.zope.org/mailman/listinfo/zodb-dev