Changement dans les locks
darcs-hash:20040907173017-41617-08936952494ae0d19ea5725ae2e0e5c9ca95d0cd.gz
This commit is contained in:
parent
90dfa26aec
commit
d8491177be
1 changed files with 26 additions and 8 deletions
|
@ -217,19 +217,37 @@ class crans_ldap :
|
|||
"""
|
||||
if not self.conn : self.connect()
|
||||
r=[]
|
||||
ret = self.conn.search_s(self.base_dn,2,arg)
|
||||
ret += self.conn.search_s(self.base_lock,1,arg)
|
||||
|
||||
# Premier test : dans les objets déja inscrits
|
||||
ret = self.conn.search_s(self.base_dn,2,arg)
|
||||
for res in ret :
|
||||
# C'est peut être l'objet courant
|
||||
try : # Si ce n'est pas une classe fille avec l'attribu dn => erreur
|
||||
if res[0] == self.dn or res[1]['lockid'][0] == '%s-%s' % (hostname, os.getpid()) :
|
||||
return []
|
||||
if res[0] == self.dn :
|
||||
continue
|
||||
except :
|
||||
None
|
||||
pass
|
||||
r.append(res[0])
|
||||
|
||||
return r
|
||||
# Deuxième test : lock ?
|
||||
ret = self.conn.search_s(self.base_lock,1,arg)
|
||||
lockid = '%s-%s' % (hostname, os.getpid() )
|
||||
for res in ret :
|
||||
# Lock encore actif ?
|
||||
l = res[1]['lockid'][0]
|
||||
if l == lockid : continue
|
||||
# C'est locké par un autre process que le notre
|
||||
# il tourne encore ?
|
||||
try :
|
||||
if l.split('-')[0] == hostname and os.system('ps %s > /dev/null 2>&1' % l.split('-')[1] ) :
|
||||
# Il ne tourne plus
|
||||
self.remove_lock(res[0]) # delock
|
||||
continue
|
||||
except :
|
||||
pass
|
||||
r.append(res[0])
|
||||
|
||||
return []
|
||||
|
||||
def lock(self,item,valeur) :
|
||||
""" Lock un item avec la valeur valeur, les items possibles peuvent être :
|
||||
|
@ -259,7 +277,7 @@ class crans_ldap :
|
|||
# C'est locké par un autre process que le notre
|
||||
# il tourne encore ?
|
||||
try :
|
||||
if os.system('ps %s > /dev/null 2>&1' % l.split('-')[1] ) :
|
||||
if l.split('-')[0] == hostname and os.system('ps %s > /dev/null 2>&1' % l.split('-')[1] ) :
|
||||
# Il ne tourne plus
|
||||
self.remove_lock(res[0]) # delock
|
||||
return self.lock(item,valeur) # relock
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue