Bonjour à tous,
Tout d'abord, Joyeux Noël, et Bonne Année!

Le problème évoqué ci-dessous s'est semble-t'il résolu de lui-même...
Des informations supplémentaires de l'exploitant du site ont établi que:

- Le site n'était en fait sous aucune charge.
- Le test n'avait été effectué qu'avec un utilisateur unique.

Pour essayer de mieux qualifier le problème une connexion a été effectuée avec 
un autre utilisateur.
Le problème n'a pas été reproduit par ce test, et les connexions avec 
l'utilisateur original se sont mises à marcher correctement.

Aucune modification n'a été apportée au site.

Cordialement,
Jonathan Winterflood
-----Message d'origine-----
De : Winterflood, Jonathan 
Envoyé : lundi 17 décembre 2007 11:58
À : 'M.-A. DARCHE'; [email protected]
Objet : RE: [CPS-users-fr] CPSDefault logged_in conflict error

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>

Répondre à