[Dieter Maurer]
Not true: Zope manages free connections in a stack and opens a new one only when the stack is empty.
[Chris Withers]
While I can believe that's the intent, the code is far from clear ;-)
...
I now see why Jim says the version code complicates ZODB more than is needed ;-) As I said, I can believe the intent is that, but there's so much room for optionality that I'm not convinced that's what actually happens...
These are the only lines that matter <0.5 wink>: c=pool[-1] del pool[-1] in Db.open(). If an appropriate pool is available, a connection is reused from the end by exactly those two lines. When a connection is returned (_closeConnection()), it's added to the end of the appropriate pool: pool.append(connection) So all pools are stack-like, until they're exhausted. There are a couple of good proposals to drastically simplify the Connection maze (even while retaining versions, if necessary -- Dieter's fondness for them notwithstanding, the primary thing that's been keeping versions alive is that they *so* complicate so much of the code that it's dangerous to take them out): http://zope.org/Wikis/ZODB/NotesOnPossibleNewZODBConnectionPool http://zope.org/Wikis/ZODB/SimplifyConnectionManagement