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