Skip to content
Snippets Groups Projects
Commit 72bb6af0 authored by Jorrit Schaap's avatar Jorrit Schaap
Browse files

Task #8887: faster update status for radb task given otdb_id

parent 283c3934
No related branches found
No related tags found
No related merge requests found
......@@ -38,15 +38,11 @@ class OTDBtoRATaskStatusPropagator(OTDBBusListener):
super(OTDBtoRATaskStatusPropagator, self).stop_listening(**kwargs)
def _update_radb_task_status(self, otdb_id, task_status):
task = self.radb.getTask(otdb_id=otdb_id)
logger.info("updating task with otdb_id %s to status %s" % (otdb_id, task_status))
result = self.radb.updateTaskStatusForOtdbId(otdb_id=otdb_id, status=task_status)
if not task:
logger.warning("Task with otdb_id %s in not present in the RADB" % otdb_id)
return
task_id = task['id']
logger.info("updating task %s with otdb_id %s to status %s" % (task_id, otdb_id, task_status))
self.radb.updateTask(task_id=task_id, status=task_status)
if not result or 'updated' not in result or not result['updated']:
logger.warning("could not update task with otdb_id %s to status %s" % (otdb_id, task_status))
def onObservationPrepared(self, treeId, modificationTime):
self._update_radb_task_status(treeId, 'prepared')
......
......@@ -223,6 +223,22 @@ class RADatabase:
self.commit()
return self.cursor.rowcount > 0
def updateTaskStatusForOtdbId(self, otdb_id, task_status, commit=True):
'''converts task_status and task_type to id's in case one and/or the other are strings'''
if task_status and isinstance(task_status, basestring):
#convert task_status string to task_status.id
task_status = self.getTaskStatusId(task_status)
query = '''UPDATE resource_allocation.task
SET (status_id) = (%s)
WHERE resource_allocation.task.otdb_id = %s;'''
self._executeQuery(query, [task_status, otdb_id])
if commit:
self.commit()
return self.cursor.rowcount > 0
def updateTask(self, task_id, mom_id=None, otdb_id=None, task_status=None, task_type=None, specification_id=None, commit=True):
task_status, task_type = self._convertTaskTypeAndStatusToIds(task_status, task_type)
......@@ -1310,6 +1326,7 @@ class RADatabase:
for resource in resources:
resource_id = resource['id']
if resource_id in all_usages:
resource_usages = all_usages[resource_id]
# copy resource capacities
for item in ['total_capacity', 'available_capacity', 'used_capacity']:
......
......@@ -169,6 +169,11 @@ class RARPC(RPCWrapper):
task_type=task_type,
specification_id=specification_id)
def updateTaskStatusForOtdbId(self, otdb_id, status):
return self.rpc('UpdateTaskStatusForOtdbId',
otdb_id=otdb_id,
status=status)
def getTasks(self):
tasks = self.rpc('GetTasks')
for task in tasks:
......
......@@ -61,6 +61,7 @@ class RADBHandler(MessageHandlerInterface):
'InsertTask': self._insertTask,
'DeleteTask': self._deleteTask,
'UpdateTask': self._updateTask,
'UpdateTaskStatusForOtdbId': self._updateTaskStatusForOtdbId,
'InsertTaskPredecessor': self._insertTaskPredecessor,
'insertTaskPredecessors': self._insertTaskPredecessors,
'GetTaskStatuses': self._getTaskStatuses,
......@@ -239,6 +240,13 @@ class RADBHandler(MessageHandlerInterface):
deleted = self.radb.deleteTask(id)
return {'id': id, 'deleted': deleted}
def _updateTaskStatusForOtdbId(self, **kwargs):
logger.info('UpdateTaskStatusForOtdbId: %s' % dict({k:v for k,v in kwargs.items() if v != None}))
otdb_id=kwargs.get('otdb_id')
updated = self.radb.updateTaskStatusForOtdbId(otdb_id=otdb_id,
task_status=kwargs.get('status_id', kwargs.get('status')))
return {'otdb_id': otdb_id, 'updated': updated}
def _updateTask(self, **kwargs):
logger.info('UpdateTask: %s' % dict({k:v for k,v in kwargs.items() if v != None}))
id = kwargs['id']
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment