From a4782c8356b7a5fb2addbebec2c228b3dedd76e7 Mon Sep 17 00:00:00 2001 From: Jorrit Schaap <schaap@astron.nl> Date: Wed, 14 Jun 2017 09:14:30 +0000 Subject: [PATCH] Task #10902: use local cache for task status/type and claim status --- .../ResourceAssignmentDatabase/radb.py | 36 ++++++++++++------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb.py b/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb.py index cdbec51e431..390343d49b2 100644 --- a/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb.py +++ b/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb.py @@ -45,8 +45,10 @@ class RADatabase: self.conn = None self.cursor = None self.log_queries = log_queries - self._taskStatusCache = {} - self._taskTypeCache = {} + self._taskStatusName2IdCache = {} + self._taskTypeName2IdCache = {} + self._claimStatusName2IdCache = {} + self._claimStatusId2NameCache = {} def _connect(self): self.conn = None @@ -119,16 +121,16 @@ class RADatabase: def getTaskStatusNames(self): return [x['name'] for x in self.getTaskStatuses()] - def getTaskStatusId(self, status_name, from_cache=False): - if from_cache and status_name in self._taskStatusCache: - return self._taskStatusCache[status_name] + def getTaskStatusId(self, status_name, from_cache=True): + if from_cache and status_name in self._taskStatusName2IdCache: + return self._taskStatusName2IdCache[status_name] query = '''SELECT id from resource_allocation.task_status WHERE name = %s;''' result = self._executeQuery(query, [status_name], fetch=_FETCH_ONE) if result: - self._taskStatusCache[status_name] = result['id'] + self._taskStatusName2IdCache[status_name] = result['id'] return result['id'] raise KeyError('No such status: %s Valid values are: %s' % (status_name, ', '.join(self.getTaskStatusNames()))) @@ -141,16 +143,16 @@ class RADatabase: def getTaskTypeNames(self): return [x['name'] for x in self.getTaskTypes()] - def getTaskTypeId(self, type_name, from_cache=False): - if from_cache and type_name in self._taskStatusCache: - return self._taskTypeCache[type_name] + def getTaskTypeId(self, type_name, from_cache=True): + if from_cache and type_name in self._taskTypeName2IdCache: + return self._taskTypeName2IdCache[type_name] query = '''SELECT id from resource_allocation.task_type WHERE name = %s;''' result = self._executeQuery(query, [type_name], fetch=_FETCH_ONE) if result: - self._taskTypeCache[type_name] = result['id'] + self._taskTypeName2IdCache[type_name] = result['id'] return result['id'] raise KeyError('No such type: %s Valid values are: %s' % (type_name, ', '.join(self.getTaskTypeNames()))) @@ -163,22 +165,32 @@ class RADatabase: def getResourceClaimStatusNames(self): return [x['name'] for x in self.getResourceClaimStatuses()] - def getResourceClaimStatusId(self, status_name): + def getResourceClaimStatusId(self, status_name, from_cache=True): + if from_cache and status_name in self._claimStatusName2IdCache: + return self._claimStatusName2IdCache[status_name] + query = '''SELECT id from resource_allocation.resource_claim_status WHERE name = %s;''' result = self._executeQuery(query, [status_name], fetch=_FETCH_ONE) if result: + self._claimStatusName2IdCache[status_name] = result['id'] + self._claimStatusId2NameCache[result['id']] = status_name return result['id'] raise KeyError('No such status: %s. Valid values are: %s' % (status_name, ', '.join(self.getResourceClaimStatusNames()))) - def getResourceClaimStatusName(self, status_id): + def getResourceClaimStatusName(self, status_id, from_cache=True): + if from_cache and status_id in self._claimStatusId2NameCache: + return self._claimStatusId2NameCache[status_id] + query = '''SELECT name from resource_allocation.resource_claim_status WHERE id = %s;''' result = self._executeQuery(query, [status_id], fetch=_FETCH_ONE) if result: + self._claimStatusId2NameCache[status_id] = result['name'] + self._claimStatusName2IdCache[result['name']] = status_id return result['name'] raise KeyError('No such status_id: %s. Valid values are: %s' % (status_id, ', '.join([x['id'] for x in self.getResourceClaimStatuses()]))) -- GitLab