Re: Zope3 sessions and database conflicts

Christian Theune <[email protected]>
Newsgroups gmane.comp.web.zope.devel
Message-ID <[email protected]>
On 03/04/2010 11:08 PM, Ross Patterson wrote:
> Hermann Himmelbauer <[email protected]> writes:
> 
>> Hi,
>> For quite some time I see messages like this in my z3.log:
>>
>> 2010-03-02T16:27:14 WARNING ZopePublication Competing writes/reads 
>> at /BSPSite/act/++vh++http:zis.act.at:80/bankneu/++/images/sponsor_logo.png: 
>> database conflict error (oid 0x063f, class BTrees.OOBTree.OOBucket, serial 
>> this txn started with 0x038484dc7d5ac044 2010-03-02 14:52:29.379960, serial 
>> currently committed 0x038484ff3c6b5455 2010-03-02 15:27:14.160763)
> 
> I note the conflict happened when the request was just for an image.
> I've seen this before under Zope2 when a PAS plugin was mis-using the
> session machinery as a cache during authentication of the request.  When
> ever a session object is accessed it initiates a write transaction in
> the ZODB.  With most, if not all, authentication methods, when a user is
> logged-in the auth tokens are included in every request which means
> every request from the logged-in user invokes the authentication
> machinery, including requests for images.  Since every page load
> involves multiple requests for page resources, the database gets
> overwhelmed with write transactions which inevitably conflict.  When the
> write conflict occurs, the publisher appropriately retries the request
> which multiplies the number of requests which multiplies the load which
> increases the amount of time taken in processing requests which
> multiplies the likelihood of write conflicts and your off to the races
> in the wrong direction.
> 
> So I'd suggest you find out what in a request for a simple resource
> (images, non-dynamic CSS or JS) is initiating the write transaction by
> invoking sessions.  It's likely there's an inappropriate use of sessions
> there.

I remember one thing about sessions where just the access to the session
would create a new session even if it was never touched. The API
actually provides two invokations: one to get a session and create if
not existing, the other got get a session and raise a KeyError instead
of creating a new one.


-- 
Christian Theune · [email protected]
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

_______________________________________________
Zope-Dev maillist  -  [email protected]
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 )
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.