[ldap_locks, objets] Juste avant d'écrire dans la base ldap, on vérifie les locks

ils existent toujours et n'ont pas expiré, sinon, il ne faut pas faire
l'enregistrement.
This commit is contained in:
Valentin Samir 2014-11-08 18:14:12 +01:00
parent 3a3d51e408
commit 494cd42d83
2 changed files with 20 additions and 3 deletions

View file

@ -47,6 +47,12 @@ class LockError(exceptions.StandardError):
"""
pass
class LockExpired(LockError):
"""
Classe d'erreur pour les locks non libéré avant
la durée d'expiration du lock
"""
pass
class LdapLockedByYou(LockError):
"""
Classe d'erreur pour les locks par le process courant
@ -164,6 +170,14 @@ class LdapLockHolder:
# S'il a été libéré, banzai, sinon, ça lèvera une exception
return self.addlock(item, value, Id)
def check(self, Id='default', delai=0):
"""Vérifie que l'on a toujours tous nos locks"""
for item, value in self.locks[Id]:
host, pid, begin = self.getlock(item, value)
time_left = self.timeout - (time.time() - begin)
if time_left <= delai:
raise LockExpired("Le lock sur la donnée %r=%r à expiré" % (item, value, time_left))
def removelock(self, item, value, Id='default', force=False):
"""
Libère le lock "$item=$value,$LOCKS_DN".