[objets] Correction du retour en arrière du commmit 629310d3
sur ressucite
On vérifier que l'objet de la base ldap n'avait pas été modifier entre le moment où on l'a récupéré etle moment où on acquière le lock. Bien sûr si l'objet n'existe pas dans la base ldap, il n'y a pas de problème. Dans le cas où on ressucieterai un objet qui existe déjà dans la base ldap, ça planterait sans doute. M'enfin, ce cas doit être extrèmement rare compte tenu du fait que les aid et mid sont croissant (mais hélas, pas strictement).
This commit is contained in:
parent
629310d356
commit
45c3f68635
1 changed files with 7 additions and 3 deletions
10
objets.py
10
objets.py
|
@ -602,9 +602,13 @@ class CransLdapObject(object):
|
||||||
cranslib.deprecated.usage("Des locks ne devrait être ajoutés que dans un context manager", level=2)
|
cranslib.deprecated.usage("Des locks ne devrait être ajoutés que dans un context manager", level=2)
|
||||||
self.conn.lockholder.addlock("dn", "%s_%s" % (self.dn.replace('=', '-').replace(',','_'), attr), self.lockId)
|
self.conn.lockholder.addlock("dn", "%s_%s" % (self.dn.replace('=', '-').replace(',','_'), attr), self.lockId)
|
||||||
locked.append(("dn", "%s_%s" % (self.dn.replace('=', '-').replace(',','_'), attr), self.lockId))
|
locked.append(("dn", "%s_%s" % (self.dn.replace('=', '-').replace(',','_'), attr), self.lockId))
|
||||||
# une fois le lock acquit, on vérifie que l'attribut n'a pas été édité entre temps
|
try:
|
||||||
if self.conn.search(dn=self.dn, scope=0)[0].get(attr, []) != self.attrs.get(attr, []):
|
# une fois le lock acquit, on vérifie que l'attribut n'a pas été édité entre temps
|
||||||
raise ldap_locks.LockError("L'attribut %s a été modifié dans la base ldap avant l'acquisition du lock" % attr)
|
if self.conn.search(dn=self.dn, scope=0)[0].get(attr, []) != self.attrs.get(attr, []):
|
||||||
|
raise ldap_locks.LockError("L'attribut %s a été modifié dans la base ldap avant l'acquisition du lock" % attr)
|
||||||
|
# L'objet n'existe pas dans la base ldap (resurection par exemple), donc pas de problème
|
||||||
|
except ldap.NO_SUCH_OBJECT:
|
||||||
|
pass
|
||||||
except ldap_locks.LockError:
|
except ldap_locks.LockError:
|
||||||
# Si on ne parvient pas à prendre le lock pour l'une des valeurs
|
# Si on ne parvient pas à prendre le lock pour l'une des valeurs
|
||||||
# on libère les locks pris jusque là et on propage l'erreur
|
# on libère les locks pris jusque là et on propage l'erreur
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue