Trimmed zodb-dev off the cc list.
On Dec 15, 2005, at 2:24 PM, Dennis Allison wrote:
The systems are running a Zope/ZEO combination with a store
configuration
of:
#
<zodb_db temporary>
# Temporary storage database (for sessions)
<temporarystorage>
name temporary storage for sessioning
</temporarystorage>
mount-point /temp_folder
container-class Products.TemporaryFolder.TemporaryContainer
</zodb_db>
OK, that's good. Having a nonzeo session database is a good thing.
Although the connection to ZEO is via a network port, it runs on
the same
physical hardware.
TemporaryStorage is not transactional. Does it need to be under MVCC?
I thought we sewed this one up. ;-) It is indeed transactional. See
our email conversations around 11/15/2005 and beyond.
TemporaryStorage does provide a conflict cache to do "rudimentary
conflict
resolution". There are several timing and scaling parameters that
need to
be considered:
CONFLICT_CACHE_MAXAGE = 60 (seconds)
CONFLICT_CACHE_GCEVERY = 60 (seconds)
RECENTLY_GC_OIDS_LEN = 200
Entries in the recently gc's oids list are those which may be
resolvable
by a retry.
These numbers may be too small given the loads we see and the
number of
accesses made to the session variables. I plan to incrase them to see
if there is any impact.
That's fine.
MAYBE CONFLICTS AND THEIR RESOLUTION ARE NOT THE ROOT CAUSE OF THE
SESSION
VARIABLE PROBLEM.
That's possible.
either all the session variables
are gone and only the container remains or most of the session
variables
are gone and a few remain.
The former sounds like the session may have expired. The second
sounds like it could be due to conflict resolution. You don't say
where the KeyError is raised from, that's important.
74769573A2H7SIH2AKo=id: 11343269231636975299, token:
74769573A2H7SIH2AKo,
contents keys: ['currentTab', 'calendarPage', 'currentCourse',
'currentTextbook']
and
77307574A2HTTdXCYYg=id: 11343267811075063138, token:
77307574A2HTTdXCYYg,
contents keys: []
Note that these are actually two different session objects (see the
"token"). I don't know if this is meaningful.
Access to the session variables are almost alwsys through a pair of
Scripts(Python). Occasionally a session variable is read with an
expression of the form REQUEST['SESSION']['key'].
## Script (Python) "getSessionVariable"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=varname
##title=
##
request=container.REQUEST
session=request['SESSION']
return session[varname]
How about session.get('varname') instead? What happens when the
session expires? Do you deal with that in your code in some way?
# Script (Python) "setSessionVariable"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=var, val
##title=
##
request = container.REQUEST
RESPONSE = request.RESPONSE
session=request['SESSION']
session[var]=val
request.set( 'SESSION', session )
This all seems right to me. Any suggestions as to how to localized
when
the session variables get lost? That might help localize the root
cause.
What is request.set('SESSION', session) supposed to do? Whatever
it's supposed to be doing is probably not what you think it's doing.
I actually don't know quite what the impact of doing that would be;
it would depend on your other code. Remove that, it can't do
anything good. ;-) If you're trying to make sure the session is "re-
stored" in the ZODB, you needn't. You only need to do this for
mutable variables *in* the session, eg.:
request.SESSION['a'] = {}
a = request.SESSION['a']
a['b'] = 'c'
# here it comes
request.SESSION['a'] = a
I also enumerated other knobs to you in previous emails that could
help reduce sessioning conflicts (like turning off inband
housekeeping -- see the Transience.py code for that -- and bumping up
transient object container timeout resolution via session-timeout-
resolution in zope.conf in your current config). Those are the
things I meant when I said that you hadn't told us whether you had
taken steps based on recommendations. I won't enumerate them here
again here as it should be reasonably easy to go look in the archives
or your mail history for those recommendations. I'd suggest trying
these recommendations before playing around with conflict resolution
code. Dunny also suggested trying to mess with the WRITEGRANULIARITY
in TransientObject.py, FWIW.
- C
_______________________________________________
Zope-Dev maillist - Zope-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )