From 3f3ba062e26e48c80e1b221222efedfdbdae304f Mon Sep 17 00:00:00 2001
From: Alexander van Amesfoort <amesfoort@astron.nl>
Date: Tue, 21 Feb 2017 21:48:22 +0000
Subject: [PATCH] Task #9939: add RADB RPC getResourceAllocationConfig() to be
 able to apply max fill ratios in Resource Assigner

---
 .../ResourceAssignmentDatabase/radb.py                | 11 +++++++++++
 .../ResourceAssignmentService/rpc.py                  |  5 +++++
 .../ResourceAssignmentService/service.py              | 11 ++++++++---
 3 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb.py b/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb.py
index 0fa41e71630..046ea95a01b 100644
--- a/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb.py
+++ b/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb.py
@@ -1616,6 +1616,16 @@ class RADatabase:
         return all_usages_list
 
 
+    def getResourceAllocationConfig(self, sql_like_name_pattern=None):
+        ''' The argument sql_like_name_pattern is e.g. 'max_fill_ratio%'
+        '''
+        query = "SELECT name, value FROM resource_allocation.config"
+        if sql_like_name_pattern is not None:
+            query += " WHERE name LIKE '%s'" % sql_like_name_pattern
+
+        return list(self._executeQuery(query, fetch=_FETCH_ALL))
+
+
 if __name__ == '__main__':
     logging.basicConfig(format='%(asctime)s %(levelname)s %(message)s',
                         level=logging.INFO)
@@ -1658,4 +1668,5 @@ if __name__ == '__main__':
     resultPrint(db.getSpecifications)
     resultPrint(db.getResourceClaims)
     resultPrint(db.getResourceClaimProperties)
+    resultPrint(db.getResourceAllocationConfig)
 
diff --git a/SAS/ResourceAssignment/ResourceAssignmentService/rpc.py b/SAS/ResourceAssignment/ResourceAssignmentService/rpc.py
index 57ecfa458d8..13f7647a7a3 100644
--- a/SAS/ResourceAssignment/ResourceAssignmentService/rpc.py
+++ b/SAS/ResourceAssignment/ResourceAssignmentService/rpc.py
@@ -271,6 +271,10 @@ class RARPC(RPCWrapper):
     def getUnits(self):
         return self.rpc('GetUnits')
 
+    def getResourceAllocationConfig(self, sql_like_name_pattern=None):
+        return self.rpc('GetResourceAllocationConfig',
+                        sql_like_name_pattern=sql_like_name_pattern)
+
 def do_tests(busname=DEFAULT_BUSNAME, servicename=DEFAULT_SERVICENAME):
     with RARPC(busname=busname, servicename=servicename) as rpc:
         #for i in range(0, 10):
@@ -316,6 +320,7 @@ def do_tests(busname=DEFAULT_BUSNAME, servicename=DEFAULT_SERVICENAME):
 
         #print rpc.getTasks()
         #print rpc.getResourceClaims()
+        #print rpc.getResourceAllocationConfig()
 
 
 
diff --git a/SAS/ResourceAssignment/ResourceAssignmentService/service.py b/SAS/ResourceAssignment/ResourceAssignmentService/service.py
index 6eb039ebc2d..c8c5b470264 100644
--- a/SAS/ResourceAssignment/ResourceAssignmentService/service.py
+++ b/SAS/ResourceAssignment/ResourceAssignmentService/service.py
@@ -76,7 +76,8 @@ class RADBHandler(MessageHandlerInterface):
             'InsertSpecification': self._insertSpecification,
             'DeleteSpecification': self._deleteSpecification,
             'UpdateSpecification': self._updateSpecification,
-            'GetUnits': self._getUnits}
+            'GetUnits': self._getUnits,
+            'GetResourceAllocationConfig': self._getResourceAllocationConfig}
 
     def prepare_loop(self):
         self.radb = radb.RADatabase(dbcreds=self.dbcreds, log_queries=self.log_queries)
@@ -194,8 +195,8 @@ class RADBHandler(MessageHandlerInterface):
     def _getResourceGroups(self):
         return self.radb.getResourceGroups()
 
-    def _getResourceGroupNames(self, resourceGroupTypeName):
-        return self.radb.getResourceGroupNames(resourceGroupTypeName)
+    def _getResourceGroupNames(self, **kwargs):
+        return self.radb.getResourceGroupNames(resourceGroupTypeName=kwargs.get('resourceGroupTypeName'))
 
     def _getResourceGroupMemberships(self):
         rg_memberships = self.radb.getResourceGroupMemberships()
@@ -335,6 +336,10 @@ class RADBHandler(MessageHandlerInterface):
     def _getUnits(self):
         return self.radb.getUnits()
 
+    def _getResourceAllocationConfig(self, **kwargs):
+        return self.radb.getResourceAllocationConfig(sql_like_name_pattern=kwargs.get('sql_like_name_pattern'))
+
+
 def createService(busname=DEFAULT_BUSNAME, servicename=DEFAULT_SERVICENAME, broker=None, dbcreds=None, log_queries=False, verbose=False):
     return Service(servicename,
                    RADBHandler,
-- 
GitLab