From a9bea38ca0e61250289764fd0d50c0e47a99b841 Mon Sep 17 00:00:00 2001 From: Jorrit Schaap <schaap@astron.nl> Date: Tue, 28 Feb 2017 11:28:43 +0000 Subject: [PATCH] Task #10339: remove task from radb when setting status in otdb does not succeed do to delete task --- .../lib/webservice.py | 35 ++++++++++--------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/webservice.py b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/webservice.py index d2a3e20f1fd..82d06b101c9 100755 --- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/webservice.py +++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/webservice.py @@ -40,6 +40,7 @@ from flask import request from flask import abort from flask import url_for from lofar.common.flask_utils import gzipped +from lofar.messaging.RPC import RPCException from lofar.sas.resourceassignment.resourceassignmenteditor.fakedata import * from lofar.sas.resourceassignment.resourceassignmenteditor.changeshandler import ChangesHandler, CHANGE_DELETE_TYPE from lofar.sas.datamanagement.common.config import DEFAULT_DM_NOTIFICATION_BUSNAME, DEFAULT_DM_NOTIFICATION_SUBJECTS @@ -403,27 +404,29 @@ def putTask(task_id): if not task: abort(404, "unknown task %s" % str(updatedTask)) - otdbrpc.taskSetStatus(task['otdb_id'], updatedTask['status']) - - #block until radb and mom task status are equal to otdb task status (with timeout) - start_wait = datetime.utcnow() - - while True: - task = radb().getTask(task_id) - details = momqueryrpc.getProjectDetails(task['mom_id']).get(task['mom_id']) + try: + otdbrpc.taskSetStatus(task['otdb_id'], updatedTask['status']) - if task['status'] == updatedTask['status'] and details['object_status'] == updatedTask['status']: - break + #block until radb and mom task status are equal to otdb task status (with timeout) + start_wait = datetime.utcnow() - if datetime.utcnow() - start_wait > timedelta(seconds=10): - break + while True: + task = radb().getTask(task_id) + details = momqueryrpc.getProjectDetails(task['mom_id']).get(task['mom_id']) - time.sleep(0.2) + if task['status'] == updatedTask['status'] and details['object_status'] == updatedTask['status']: + break + if datetime.utcnow() - start_wait > timedelta(seconds=10): + break - #radb().updateTaskAndResourceClaims(task_id, - #starttime=updatedTask.get('starttime', None), - #endtime=updatedTask.get('endtime', None)) + time.sleep(0.2) + except RPCException as e: + if 'does not exist' in e.message: + # task does not exist (anymore) in otdb + #so remove it from radb as well (with cascading deletes on specification) + logger.warn('task with otdb_id %s does not exist anymore in OTDB. removing task radb_id %s from radb', task['otdb_id'], task['id']) + radb().deleteSpecification(task['specification_id']) if 'data_pinned' in updatedTask: task = radb().getTask(task_id) -- GitLab