Is anyone using RAMSessionDataContainer?  I've a suspicion that it is
utterly broken with modern ZODB versions.

If I'm not mistaken, MVCC requires you to either call connection.sync()
or open a new connection for every request -- otherwise MVCC
invalidations don't get processed and you always see old versions of
cached objects.

RAMSessionDataContainer keeps an open connection for every thread, and
that connection is never closed, never synced.  This results in lots of
fun conflict errors, e.g.:

2011-01-05T10:42:21 WARNING ZopePublication Competing writes/reads at {URL}: 
database conflict error (oid 0x54, class BTrees.OOBTree.OOBTree, serial this 
txn started with 0x038b65ac32bee222 2011-01-05 15:40:11.893509, serial 
currently committed 0x038b65ae561f1999 2011-01-05 15:42:20.184723)
------
2011-01-05T10:42:21 WARNING ZopePublication Competing writes/reads at {URL}: 
database conflict error (oid 0x54, class BTrees.OOBTree.OOBTree, serial this 
txn started with 0x038b65ac32bee222 2011-01-05 15:40:11.893509, serial 
currently committed 0x038b65ae561f1999 2011-01-05 15:42:20.184723)
------
2011-01-05T10:42:21 WARNING ZopePublication Competing writes/reads at {URL}: 
database conflict error (oid 0x54, class BTrees.OOBTree.OOBTree, serial this 
txn started with 0x038b65ac32bee222 2011-01-05 15:40:11.893509, serial 
currently committed 0x038b65ae561f1999 2011-01-05 15:42:20.184723)
------
2011-01-05T10:42:21 WARNING ZopePublication Competing writes/reads at {URL}: 
database conflict error (oid 0x54, class BTrees.OOBTree.OOBTree, serial this 
txn started with 0x038b65ac32bee222 2011-01-05 15:40:11.893509, serial 
currently committed 0x038b65ae561f1999 2011-01-05 15:42:20.184723)
------
2011-01-05T10:42:21 ERROR SiteError {URL}
Traceback (most recent call last):
  File 
"/home/zope/eggs/zope.publisher-3.12.4-py2.6.egg/zope/publisher/publish.py", 
line 137, in publish
    publication.afterCall(request, obj)
  File 
"/home/zope/eggs/zope.app.publication-3.12.0-py2.6.egg/zope/app/publication/browser.py",
 line 48, in afterCall
    super(BrowserPublication, self).afterCall(request, ob)
  File 
"/home/zope/eggs/zope.app.publication-3.12.0-py2.6.egg/zope/app/publication/zopepublication.py",
 line 215, in afterCall
    txn.commit()
  File 
"/home/zope/eggs/transaction-1.1.1-py2.6.egg/transaction/_transaction.py", line 
329, in commit
    self._commitResources()
  File 
"/home/zope/eggs/transaction-1.1.1-py2.6.egg/transaction/_transaction.py", line 
443, in _commitResources
    rm.commit(self)
  File "/home/zope/eggs/ZODB3-3.9.7-py2.6-linux-i686.egg/ZODB/Connection.py", 
line 566, in commit
    self._commit(transaction)
  File "/home/zope/eggs/ZODB3-3.9.7-py2.6-linux-i686.egg/ZODB/Connection.py", 
line 614, in _commit
    self._store_objects(ObjectWriter(obj), transaction)
  File "/home/zope/eggs/ZODB3-3.9.7-py2.6-linux-i686.egg/ZODB/Connection.py", 
line 666, in _store_objects
    s = self._storage.store(oid, serial, p, '', transaction)
  File "/home/zope/eggs/ZODB3-3.9.7-py2.6-linux-i686.egg/ZODB/utils.py", line 
255, in __call__
    return func(*args, **kw)
  File 
"/home/zope/eggs/ZODB3-3.9.7-py2.6-linux-i686.egg/ZODB/MappingStorage.py", line 
258, in store
    oid=oid, serials=(old_tid, serial), data=data)
ConflictError: database conflict error (oid 0x54, class BTrees.OOBTree.OOBTree, 
serial this txn started with 0x038b65ac32bee222 2011-01-05 15:40:11.893509, 
serial currently committed 0x038b65ae561f1999 2011-01-05 15:42:20.184723)

Note how "serial this txn started with" doesn't change in all the
retries.

Does this sound plausible, or am I speaking nonsense?

Marius Gedminas
-- 
http://pov.lt/ -- Zope 3/BlueBream consulting and development

Attachment: signature.asc
Description: Digital signature

_______________________________________________
Zope-Dev maillist  -  Zope-Dev@zope.org
https://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 https://mail.zope.org/mailman/listinfo/zope-announce
 https://mail.zope.org/mailman/listinfo/zope )

Reply via email to