Le problème est apparu il y a une semaine environ, je suppose que c'est en
effet dû à la connexion simultanée du même utilisateur, et lié à la montée en
charge du site.
Il semblerait toutefois que ça arrive à chaque fois qu'un utilisateur se
connecte. Je doute qu'a chaque fois il y aune autre personne qui se connecte en
même temps... Serait-il possible qu'une transaction logged_in 'plantée' cause
ce problème sur toutes les autres connexions d'utilisateurs?
Une autre possibilité est que l'exploitant utilise approximativement le terme
'à chaque connexion' bien sur.
A supposer que le problème se situe à ce niveau (cela me semble tout de même
probable)
> 1. Donner plusieurs comptes aux utilisateurs
C'est une chose que l'on souhaite éviter.
> 2. Désactiver l'enregistrement du last_login_time
A priori la piste à explorer, je pense que nous n'utilisons pas cette
information.
En regardant le code, je trouve ceci:
####################
login_time = member.getProperty('login_time', '2000/01/01')
first_time = (str(login_time) == '2000/01/01')
if first_time and member.has_role('Member'):
mtool.createMemberArea()
now = context.ZopeTime()
member.setProperties(last_login_time=now, login_time=now)
####################
Donc en théorie, le member.setProperties( n'est executé que si le membre n'a
pas encore de propriété login_time (utilisation de '2000/01/01' comme valeur
magique)
Alors si le problème vient d'ici, ce traitement fonctionne-t'il correctement?
Ou est-ce que quelque-chose m'échappe?
> 3. Mettre un try/except autour du bloc de code gérant l'enregistrement du
> last_login_time
Sachant que l'erreur survient au moment du commit de transaction, ceci
aura-t'il le moindre effet?
Je dirais que non, puisque la transaction est comittée à la fin du traitement
du script, et pas lors de l'appel de member.setProperties(
Merci pour votre réponse rapide,
Jonathan Winterflood
-----Message d'origine-----
De : [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] De la part de M.-A. DARCHE
Envoyé : lundi 17 décembre 2007 10:26
À : [email protected]
Objet : Re: [CPS-users-fr] CPSDefault logged_in conflict error
Winterflood, Jonathan a écrit :
>
> Sur un site en production basé sur CPSDefault, nous rencontrons cette
> erreur:
>
> Type:
>
> ConflictError
>
> Error
>
> Value:
>
> database conflict error (oid 0x1f56, class
> Products.CPSDirectory.ZODBDirectory.ZODBDirectoryEntry, serial this txn
> started with 0x03720e71d0e53577 2007
>
> Traceback:
>
> Traceback (innermost last):
>
> _ Module Zope2.App.startup, line 173, in zpublisher_exception_hook
>
> _ Module ZPublisher.Publish, line 121, in publish
>
> _ Module Zope2.App.startup, line 240, in commit
>
> _ Module transaction._manager, line 96, in commit
>
> _ Module Products.CPSCompat.PatchZODBTransaction, line 175, in commit
>
> _ Module transaction._transaction, line 436, in _commitResources
>
> _ Module ZODB.Connection, line 665, in tpc_vote
>
> _ Module ZEO.ClientStorage, line 893, in tpc_vote
>
> _ Module ZEO.ClientStorage, line 877, in _check_serials
>
> ConflictError: database conflict error (oid 0x1f56, class
> Products.CPSDirectory.ZODBDirectory.ZODBDirectoryEntry, serial this txn
> started with 0x03720e71d0e53577 2007
>
> Celle-ci apparait à la connexion d'un utilisateur, lors de l'accès au
> script /logged_in/, mais n'empêche pas la connexion (ni le bon
> fonctionnement du reste du site)
>
> Un certain nombre de personnes partagent le même /user/ CPS, si cela
> peut être un indicateur...
>
> Je n'arrive pas à reproduire le problème en développement.
>
> Le script logged_in est celui de CPSDefault, sauf que l'URL de
> redirection est toujours portal_absolute_url.
>
> Je n'ai jamais rencontré de conflits auparavant... quelqu'un aurait-il une
> piste pour diriger mes recherches ? [Je me doute bien qu'il n'y a pas
> assez d'informations ici pour trouver le problème...]
>
Dans logged_in.py il y a une écriture qui est faite pour garder
la trace de la date de connexion de l'utilisateur :
member.setProperties(login_time=now, last_login_time=login_time)
Si plusieurs utilisateurs avec le même compte se connectent au portail
en même temps cela peut générer des conflits.
Solutions :
1. donner plusieurs comptes aux utilisateurs
2. désactiver l'enregistrement du last_login_time
3. mettre un try/except autour du bloc de code gérant l'enregistrement
du last_login_time
Bien cordialement,
--
Marc-Aurèle DARCHE
Open Source Enterprise Content Management (ECM) http://www.nuxeo.org/
NUXEO (Paris, France) http://nuxeo.com/
This message contains information that may be privileged or confidential and is
the property of the Capgemini Group. It is intended only for the person to whom
it is addressed. If you are not the intended recipient, you are not authorized
to read, print, retain, copy, disseminate, distribute, or use this message or
any part thereof. If you receive this message in error, please notify the
sender immediately and delete all copies of this message.
_______________________________________________
cps-users-fr
Adresse de la liste : [email protected]
Gestion de l'abonnement : <http://lists.nuxeo.com/mailman/listinfo/cps-users-fr>