Add debug logging to the lock manager.
Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
@@ -1,5 +1,9 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class LockingBackend(object):
|
class LockingBackend(object):
|
||||||
"""
|
"""
|
||||||
@@ -8,8 +12,11 @@ class LockingBackend(object):
|
|||||||
"""
|
"""
|
||||||
@classmethod
|
@classmethod
|
||||||
def acquire_lock(cls, name, timeout=None):
|
def acquire_lock(cls, name, timeout=None):
|
||||||
raise NotImplementedError
|
logger.debug('acquiring lock: %s, timeout: %s', name, timeout)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def purge_locks(cls):
|
def purge_locks(cls):
|
||||||
raise NotImplementedError
|
logger.debug('purging locks')
|
||||||
|
|
||||||
|
def release(self):
|
||||||
|
logger.debug('releasing lock: %s', self.name)
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ class FileLock(LockingBackend):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def acquire_lock(cls, name, timeout=None):
|
def acquire_lock(cls, name, timeout=None):
|
||||||
|
super(FileLock, cls).acquire_lock(name=name, timeout=timeout)
|
||||||
instance = FileLock(
|
instance = FileLock(
|
||||||
name=name, timeout=timeout or setting_default_lock_timeout.value
|
name=name, timeout=timeout or setting_default_lock_timeout.value
|
||||||
)
|
)
|
||||||
@@ -38,6 +39,7 @@ class FileLock(LockingBackend):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def purge_locks(cls):
|
def purge_locks(cls):
|
||||||
|
super(FileLock, cls).purge_locks()
|
||||||
lock.acquire()
|
lock.acquire()
|
||||||
with open(cls.lock_file, 'r+') as file_object:
|
with open(cls.lock_file, 'r+') as file_object:
|
||||||
locks.lock(f=file_object, flags=locks.LOCK_EX)
|
locks.lock(f=file_object, flags=locks.LOCK_EX)
|
||||||
@@ -92,6 +94,8 @@ class FileLock(LockingBackend):
|
|||||||
lock.release()
|
lock.release()
|
||||||
|
|
||||||
def release(self):
|
def release(self):
|
||||||
|
super(FileLock, self).release()
|
||||||
|
|
||||||
lock.acquire()
|
lock.acquire()
|
||||||
with open(self.__class__.lock_file, 'r+') as file_object:
|
with open(self.__class__.lock_file, 'r+') as file_object:
|
||||||
locks.lock(f=file_object, flags=locks.LOCK_EX)
|
locks.lock(f=file_object, flags=locks.LOCK_EX)
|
||||||
|
|||||||
@@ -8,10 +8,23 @@ from .base import LockingBackend
|
|||||||
class ModelLock(LockingBackend):
|
class ModelLock(LockingBackend):
|
||||||
@classmethod
|
@classmethod
|
||||||
def acquire_lock(cls, name, timeout=None):
|
def acquire_lock(cls, name, timeout=None):
|
||||||
|
super(ModelLock, cls).acquire_lock(name=name, timeout=timeout)
|
||||||
Lock = apps.get_model(app_label='lock_manager', model_name='Lock')
|
Lock = apps.get_model(app_label='lock_manager', model_name='Lock')
|
||||||
return Lock.objects.acquire_lock(name=name, timeout=timeout)
|
return ModelLock(
|
||||||
|
model_instance = Lock.objects.acquire_lock(
|
||||||
|
name=name, timeout=timeout
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def purge_locks(cls):
|
def purge_locks(cls):
|
||||||
|
super(ModelLock, cls).purge_locks()
|
||||||
Lock = apps.get_model(app_label='lock_manager', model_name='Lock')
|
Lock = apps.get_model(app_label='lock_manager', model_name='Lock')
|
||||||
Lock.objects.select_for_update().delete()
|
Lock.objects.select_for_update().delete()
|
||||||
|
|
||||||
|
def __init__(self, model_instance):
|
||||||
|
self.model_instance = model_instance
|
||||||
|
|
||||||
|
def release(self):
|
||||||
|
super(ModelLock, self).release()
|
||||||
|
self.model_instance.release()
|
||||||
|
|||||||
Reference in New Issue
Block a user