[Zope] Sessions and Persistence

Dennis Allison allison at shasta.stanford.edu
Fri Nov 11 22:21:54 EST 2005


Current configuration:
   Linux RH7.3 
   Zope 2.8.4
   Python 2.4.2 (but the same is observed with Python 2.3.5)

I continue to observe occasional failures of the Zope session variable
mechanism.  The problem manifests itself by a KeyError when accessing data
in the session data container.  We have recently moved to Zope 2.8.4 from
Zope 2.7.6.  The frequency of these errors aooears to have increased
significantly; of late, we have occasionally seen error messages saying
that an entire SESSION data container is missing.

The session variable interface is very simple: a pair of Python Scripts,
one that gets a session variable and another that sets it.  Both use the 
copy-out/copy-in mechanism required for persistence.

## 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]


# 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 )

Most of the information we store in session variables are simple numbers
or strings.  In a few instances, we store python lists, python tuples, or
python dictionaries.

I am beginning to suspect the source of my bug is a persistence problem
perhaps triggered by a conflict error or garbage collection in the
temporary store used to hold the session variables.

I further suspect that lists and dictionaries stored in session variables
need to be instances of PersistentDict and PersistentList and not ordinary
python data structures.

I'd appreciate confirmation on these two issues from someone who knows the
persistence mechanism better than I.

Neither PersistentDict nor PersistentList are exposed in the restricted
namespace.  Advice as to how to expose them would be helpful as well.

If I have a complex data structure (a list of dictionaries) does all the 
substructure need to have persistence wrappers as well--that is, does it 
have to be turtles all the way down?

Thanks in advance.   -d



More information about the Zope mailing list