Projet

Général

Profil

Lock24

Fonctionnement sur 2.3

Il existe plusieurs bibliothèques python de gestion des locks :

  • creole/eolelock.py
  • pyeole/lock.py
  • /usr/share/eole/eolelock.py
  • FonctionEoleNg : *Lock
  • /usr/lib/python2.6/dist-packages/zephir/lib_zephir.py

La première appelle la seconde. Elles font quasiment la même chose.

Le lock est mis avec la commande "touch".

Utilisations :

instance/reconfigure

Ne pas pouvoir faire d'instance/reconfigure si un autre lock connu est placé.

ead

Savoir si une sauvegarde est lancée.

zephir-client/data/scripts/import_aaf.zephir

A étudier.

Bacula :

Placer un lock si aucun lock placé.

Mise à jour 2.4

Objectif : supprimer toutes les bibliothèques pour utiliser pyeole/lock.py.

Niveau de lock

  • 'normal' : c'est un lock isolé pour une application simple ;
  • 'system' : un lock system est exclusif, dès qu'une application met un lock system, les autres applications pourront le savoir.

Pour place un lock

Il est possible de place un lock avec la fonction acquire.

>>> from pyeole.lock import acquire
>>> acquire('nom_du_lock')

Une exception AlreadyLocked est renvoyé si le lock est déjà placé.
Pour ne pas vérifié la présence d'un lock ultérieur faire :

>>> from pyeole.lock import acquire
>>> acquire('nom_du_lock', valid=False)

Enfin, il est possible de spécifier le level avec l'attribut "level".

Retirer un lock

Pour retirer un lock il faut utilise la fonction release.

>>> from pyeole.lock import release
>>> release('nom_du_lock')

Tout comme acquire, il est possible de ne pas faire d'erreur en cas de non présence du lock avec l'attribut valid.

Par contre, un lock placer par un autre thread/process ne pourra pas être retiré, sauf en faisant :

>>> from pyeole.lock import release
>>> release('nom_du_lock', force=True)

Enfin, il est possible de spécifier le level avec l'attribut "level".

Tester les locks

Pour tester si un fichier lock est placé au niveau 'normal' :

>>> from pyeole.lock import is_locked
>>> if is_locked('nom_du_lock'):
>>>     print "lock placé" 

Pour tester si un lock système existe :

>>> from pyeole.lock import is_locked, get_system_lock
>>> if is_locked(level='system'):
>>>     print "lock system placé ", get_system_lock()

Pour tester si un lock système a été placé par une autre application que la sienne :

>>> from pyeole.lock import is_locked, get_system_lock
>>> if is_locked(level='system', name='nom_du_lock'):
>>>     print "lock system placé autre que ", name, get_system_lock(name)