Commit 6c432605 authored by Florent Guillaume's avatar Florent Guillaume

Cleaner fix (end result is the same as previous patch though).

See http://mail.zope.org/pipermail/zodb-dev/2005-December/009662.html
for a fuller problem description.
Unit test included.
parent b3acf391
...@@ -142,16 +142,11 @@ class MountedObject(SimpleItem): ...@@ -142,16 +142,11 @@ class MountedObject(SimpleItem):
self.id = id self.id = id
def _getMountedConnection(self, anyjar): def _getMountedConnection(self, anyjar):
db_name = self._getDBName() # This creates the DB if it doesn't exist yet and adds it
try: # to the multidatabase
conn = anyjar.get_connection(db_name) self._getDB()
except KeyError: # Return a new or existing connection linked to the multidatabase set
conn = self._getDB().open() return anyjar.get_connection(self._getDBName())
# FIXME: The following should be done by ZODB's multidatabase
# code, it does it correctly for get_connection().
anyjar.connections.update(conn.connections)
conn.connections = anyjar.connections
return conn
def mount_error_(self): def mount_error_(self):
return self._v_connect_error return self._v_connect_error
......
...@@ -177,6 +177,21 @@ class MountingTests(unittest.TestCase): ...@@ -177,6 +177,21 @@ class MountingTests(unittest.TestCase):
'exists': 1}] 'exists': 1}]
self.assertEqual(expected, status) self.assertEqual(expected, status)
def test_close(self):
app = self.app
app.mount1.a1 = '1'
app.mount2.a2 = '2'
app.a3 = '3'
conn1 = app.mount1._p_jar
conn2 = app.mount2._p_jar
transaction.abort()
# Close the main connection
app._p_jar.close()
self.assertEqual(app._p_jar._opened, None)
# Check that secondary connections have been closed too
self.assertEqual(conn1._opened, None)
self.assertEqual(conn2._opened, None)
def test_suite(): def test_suite():
return unittest.makeSuite(MountingTests, 'test') return unittest.makeSuite(MountingTests, 'test')
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment