It writes and reads objects in the session, maybe the probleme comes from here ? Here's a little sinppet :

    def toutCompter(self):
        """
    xmlrpc methode, called from a web borwser.
        """
        documentXML = ComptageXML()
    #this reads and writes objects in the session
        dicoLignes  = self._fabriquerDicoLignes()
    #do things with dicoLignes
        for inumLigneCourante in xrange(borneInf,borneSup) :
            snumLigneCourante = str(inumLigneCourante)
            ligne = dicoLignes[snumLigneCourante]["requete"]
        #do things here
            self._ajouterAuDico(snumLigneCourante,ligne,comptage,arbre)

        if ligne :
            self._mettreEnSession(resultats)
       
        response = self.REQUEST.RESPONSE
        response.setHeader("Content-Type","text/xml")
        response.setHeader ("charset","utf-8")
        chaineXML = documentXML.formatXML()
        print "sending results to "+addresseIP
        return chaineXML

    def _fabriquerDicoLignes(self):
        formulaire = self.getForm()
        dicoLignes = self.getSession(self,"dicoLignes") or {}
        for key in formulaire.keys():
        #do things...
        self.setSession("dicoLignes", dicoLignes)
        return dicoLignes

    def _fabriquerListeLignes(self):
        dicoLignes = RacineAbstraite.getSession(self,"dicoLignes") or {}
        listeNumeros = dicoLignes.keys()
        listeNumeros.sort ( lambda x,y: cmp(int(x), int(y)) )
        return [ dicoLignes[str(inumeroLigne)]["requete"] for inumeroLigne in \
                sorted( [int(snumeroLigne) for snumeroLigne in dicoLignes.keys()] ) ]

    def _ajouterAuDico(self,p_snumeroCle,p_ligne,p_comptage,p_arbre):
        dicoLignes = RacineAbstraite.getSession(self,'dicoLignes') or {}
        dicoLignes[p_snumeroCle]  = {'requete':p_ligne,'comptage':p_comptage,'arbre':p_arbre}
        self.setSession('dicoLignes',dicoLignes)

    def _mettreEnSession(self,p_resultats):
        """
        Mettre en session les résultats d'un comptage.
        """
       
        # Initialise de la SESSION
        dicoResultatRecherche = {
            'listeCriteres'     : [self._fabriquerListeLignes(), self.getForm('numeroLigne')],
            'nombreEntreprises' : p_resultats[0][0],
            'listeComptage'     : p_resultats,
            'listeEntreprises'  : [],
            }
        #On conserve la requete et le resultat en session
        self.setSession('resultatRecherche', p_dicoResultatRecherche.copy())


When toutCompter is called by browser 1, then he will write and read, say, the dicoLignes object in the session.
When toutCompter is called by browser 2 parallely, is it the same dicoLignes object that it tries to access or another one is created ? can there be conflicts somehow ?

Y.Chaouche

2007/1/19, yacine chaouche <yacinechaouche@gmail.com>:
I mean triple couples of lines of code.

2007/1/19, yacine chaouche < yacinechaouche@gmail.com>:
The toutCompter methode does a lot of thing and it would take a triple couples of lines to describe what it does all.
Anyway, is there a way for me to detect ConflictErrors ? they don't appear on the console so i guess they are catched.

Y.Chaouche

2007/1/19, Gabriel Genellina <gagsl-zope@yahoo.com.ar >:
At Thursday 18/1/2007 16:30, Andreas Jung wrote:


><zope trace to the console>
>ip: 10.75.49.155 requests counting of lines 1 to 11
>ip: 10.75.49.51 requests counting of lines 1 to 11
>sending results to 10.75.49.155
>sending results to 10.75.49.51
>ip: 10.75.49.51 requests counting of lines 1 to 11
>sending results to 10.75.49.51
></zope trace>
>
>
>Zope says he got 2 requests form 10.75.49.51 and sent it the results 2
>times. Ok, let's check the tcpflow then for these supposed connections :
>[...]
>Allright, there is only ONE POST request. So zope didnt really got two
>requests. Now let's see if it sent the data two times as it presumes :
>[...]
>The results were sent just one time, not two.
>
>What is going on here ?

What does the toutCompter method really does? Does it modify some
object state? That might provoke a ConflictError, forcing a
transaction abort and the request to be re-tried (up to three times,
silently, then it goes logged).


--
Gabriel Genellina
Softlab SRL






__________________________________________________
Preguntá. Respondé. Descubrí.
Todo lo que querías saber, y lo que ni imaginabas,
está en Yahoo! Respuestas (Beta).
¡Probalo ya!
http://www.yahoo.com.ar/respuestas

_______________________________________________
Zope maillist  -  Zope@zope.org
http://mail.zope.org/mailman/listinfo/zope
**   No cross posts or HTML encoding!  **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope-dev )