BUG: lock deletion fix

pull/684/head
Piero Toffanin 2019-06-19 10:31:51 -04:00
rodzic abc555cba9
commit 06c570ad7a
1 zmienionych plików z 10 dodań i 7 usunięć

Wyświetl plik

@ -18,7 +18,7 @@ from webodm import settings
from .celery import app
import redis
logger = get_task_logger(__name__)
logger = get_task_logger("app.logger")
redis_client = redis.Redis.from_url(settings.CELERY_BROKER_URL)
@app.task
@ -74,6 +74,7 @@ def setInterval(interval, func, *args):
def process_task(taskId):
lock_id = 'task_lock_{}'.format(taskId)
cancel_monitor = None
delete_lock = True
try:
task_lock_last_update = redis_client.getset(lock_id, time.time())
@ -81,6 +82,7 @@ def process_task(taskId):
# Check if lock has expired
if time.time() - float(task_lock_last_update) <= 30:
# Locked
delete_lock = False
return
else:
# Expired
@ -89,7 +91,7 @@ def process_task(taskId):
# Set lock
def update_lock():
redis_client.set(lock_id, time.time())
cancel_monitor = setInterval(10, update_lock)
cancel_monitor = setInterval(5, update_lock)
try:
task = Task.objects.get(pk=taskId)
@ -108,11 +110,12 @@ def process_task(taskId):
if cancel_monitor is not None:
cancel_monitor()
try:
redis_client.delete(lock_id)
except redis.exceptions.RedisError:
# Ignore errors, the lock will expire at some point
pass
if delete_lock:
try:
redis_client.delete(lock_id)
except redis.exceptions.RedisError:
# Ignore errors, the lock will expire at some point
pass