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,20 +217,38 @@ class crans_ldap :
|
||||||
"""
|
"""
|
||||||
if not self.conn : self.connect()
|
if not self.conn : self.connect()
|
||||||
r=[]
|
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 :
|
for res in ret :
|
||||||
# C'est peut être l'objet courant
|
# C'est peut être l'objet courant
|
||||||
try : # Si ce n'est pas une classe fille avec l'attribu dn => erreur
|
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()) :
|
if res[0] == self.dn :
|
||||||
return []
|
continue
|
||||||
except :
|
except :
|
||||||
None
|
pass
|
||||||
r.append(res[0])
|
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) :
|
def lock(self,item,valeur) :
|
||||||
""" Lock un item avec la valeur valeur, les items possibles peuvent être :
|
""" Lock un item avec la valeur valeur, les items possibles peuvent être :
|
||||||
aid $ chbre $ mail $ mailAlias $ cannonicalAlias $
|
aid $ chbre $ mail $ mailAlias $ cannonicalAlias $
|
||||||
|
@ -259,7 +277,7 @@ class crans_ldap :
|
||||||
# C'est locké par un autre process que le notre
|
# C'est locké par un autre process que le notre
|
||||||
# il tourne encore ?
|
# il tourne encore ?
|
||||||
try :
|
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
|
# Il ne tourne plus
|
||||||
self.remove_lock(res[0]) # delock
|
self.remove_lock(res[0]) # delock
|
||||||
return self.lock(item,valeur) # relock
|
return self.lock(item,valeur) # relock
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue