SESSION duplicate key

Django, Flask, Bottle, WSGI, CGI…
Antworten
woolfy
User
Beiträge: 19
Registriert: Montag 6. Februar 2006, 15:14
Wohnort: Stuttgart

Freitag 5. Mai 2006, 17:29

Hallo zusammen,

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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 5. Mai 2006, 17:49

woolfy hat geschrieben:Nun habe ich das Problem, dass sporadisch der Fehler "duplicate key _irgendwas_" auftritt.
[...]
Ich hab das Problem jetzt mal auf die folgenden Beiden Routinen aus Transience.py zurückverfolgt:
[...]
Hi Jens!

Ich kann mich wage daran erinnern, dass dieser Fehler schon einmal Grund für eine Diskussion war. Ich habe mir eben das Modul **Transience.py** von Zope 2.9.0 angesehen. Da hat sich etwas getan. Ich würde also auf eine neuere Zope-Release updaten. Damit dürfte sich wahrscheinlich dein Problem erledigen.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
woolfy
User
Beiträge: 19
Registriert: Montag 6. Februar 2006, 15:14
Wohnort: Stuttgart

Freitag 12. Mai 2006, 14:03

Hi Gerod,

danke für die Info, die Änderungen an der new_or_existing-Methode in Zope 2.9.x sind sogar plausibel, auch wenn mir die Ursache für diesen Fehler dadurch immernoch ein Rätzel bleibt.

Jedenfalls werde ich demnächst auf 2.9.2 upgraden und dann sehen, ob der Fehler nochmal auftritt.

Gruß
Jens
Antworten