jetzt bräuchte ich jemanden, der sich wirklich gut mit Zope's session-mechanismus auskennt.
Ich verwende eine ÜbersetzungsEngine die zur Optimierung der Zugriffszeiten alle Angefragten Begriffe in einem Dictionary in REQUEST.SESSION hält.
Nun habe ich das Problem, dass sporadisch der Fehler "duplicate key _irgendwas_" auftritt.
Dies führt dann dazu, dass man die komplette Browsersession beenden und ne neue aufmachen muss.
(Da dann die komplette Session am *rsch ist..)
Ich hab das Problem jetzt mal auf die folgenden Beiden Routinen aus Transience.py zurückverfolgt:
Code: Alles auswählen
security.declareProtected(CREATE_TRANSIENTS_PERM, 'new_or_existing')
def new_or_existing(self, k):
item = self.get(k, _notfound)
if item is _notfound: return self.new(k)
else: return item
...
security.declareProtected(CREATE_TRANSIENTS_PERM, 'new')
def new(self, k):
if type(k) is not type(''):
raise TypeError, (k, "key is not a string type")
if self.get(k, None) is not None:
raise KeyError, "duplicate key %s" % k # Not allowed to dup keys
item = TransientObject(k)
self[k] = item
self.notifyAdd(item)
return item.__of__(self)
Ablauf:
ÜbersetzungsEngine -> SessionDataManager -> Transience
Mit new_or_existing wird nachgesehen ob k vorhanden ist.
Dies ist scheinbar nicht der Fall, weshalb new_or_existing dann new aufruft.
new sieht dann nochmal nach und plötzlich gibt es k und schon kommt es zu dem Fehler.
Wie kann das sein?
Macht denn diese zweite Prüfung (self.get(k, None) is not None) überhaupt Sinn, wenn new von new_or_existing aufgerufen wird?
Danke für Eure Hilfe
Gruß
Jens