From 69e98a65b56e40daffacb337fd518482eb508ff0 Mon Sep 17 00:00:00 2001
From: Ruud Beukema <beukema@astron.nl>
Date: Mon, 15 May 2017 14:01:45 +0000
Subject: [PATCH] Task #10784: Renamed claim status "claimed" (ID 0) to
 "tentative" and claim status "allocated" (ID 1) to "claimed" in both Python
 code and  database creation/allocation scripts. Successfully verified that
 all unit tests that originally passed still pass, and that those that
 originally didn't pass, don't give new errors.

---
 .../lib/propagator.py                         |  2 +-
 .../ResourceAssigner/lib/assignment.py        | 24 +++++++++++--------
 .../test/t_resourceassigner.py                | 18 +++++++-------
 .../ResourceAssignmentDatabase/radb.py        | 10 ++++----
 .../sql/add_functions_and_triggers.sql        | 16 ++++++-------
 .../sql/add_resource_allocation_statics.sql   |  2 +-
 .../tests/fill_database.sql                   |  2 +-
 .../ResourceAssignmentEditor/lib/fakedata.py  |  6 ++---
 .../chartresourceusagecontroller.js           |  6 ++---
 .../static/app/controllers/datacontroller.js  |  4 ++--
 .../ResourceAssignmentService/rpc.py          |  6 ++---
 .../test/test_ra_service_and_rpc.py           |  4 ++--
 12 files changed, 53 insertions(+), 47 deletions(-)

diff --git a/SAS/ResourceAssignment/RAtoOTDBTaskSpecificationPropagator/lib/propagator.py b/SAS/ResourceAssignment/RAtoOTDBTaskSpecificationPropagator/lib/propagator.py
index 7856df6c962..9da356be480 100755
--- a/SAS/ResourceAssignment/RAtoOTDBTaskSpecificationPropagator/lib/propagator.py
+++ b/SAS/ResourceAssignment/RAtoOTDBTaskSpecificationPropagator/lib/propagator.py
@@ -151,7 +151,7 @@ class RAtoOTDBPropagator():
 
     def ParseStorageProperties(self, storage_claim):
         """input something like:
-        {u'username':u'anonymous', u'status': u'allocated', u'resource_name':
+        {u'username':u'anonymous', u'status': u'claimed', u'resource_name':
         u'CEP4_storage:/data', u'user_id': -1, u'resource_type_id': 5, u'task_id': 6349,
         u'status_id': 1, u'resource_id': 117, u'session_id': 1, u'id': 339,
         u'claim_size': 24000, u'starttime': datetime.datetime(2016, 6, 10, 16, 8, 15),
diff --git a/SAS/ResourceAssignment/ResourceAssigner/lib/assignment.py b/SAS/ResourceAssignment/ResourceAssigner/lib/assignment.py
index a03295e59ea..27ef796564b 100755
--- a/SAS/ResourceAssignment/ResourceAssigner/lib/assignment.py
+++ b/SAS/ResourceAssignment/ResourceAssigner/lib/assignment.py
@@ -134,9 +134,13 @@ class ResourceAssigner():
         logger.info('doAssignment: specification_tree=%s' % (specification_tree))
 
         otdb_id = specification_tree['otdb_id']
+
+        assignable_task_states = ['approved', 'prescheduled']
         status = specification_tree.get('state', '').lower()
-        if status not in ['approved', 'prescheduled']:  # For approved we only do a few checks and put it in the RADB
-            logger.warn('skipping specification for task otdb_id=%s, because status=%s (not prescheduled)', otdb_id, status)
+        if status not in assignable_task_states:
+            assignable_task_states_str = ', '.join(assignable_task_states)
+            logger.warn('skipping specification for task otdb_id=%s, because status=%s (not one of %s)', otdb_id,
+                        status, assignable_task_states_str)
             return
 
         try:
@@ -338,8 +342,8 @@ class ResourceAssigner():
                     raise Exception('doAssignment: Task cannot be scheduled, because of %d conflicting claims: %s' %
                                     (len(conflictingClaims), conflictingClaims))
 
-                logger.info('doAssignment: all resources for task %s were succesfully claimed. Setting claim statuses to allocated' % (taskId,))
-                self.radbrpc.updateTaskAndResourceClaims(taskId, claim_status='allocated')
+                logger.info('doAssignment: all resources for task %s were succesfully claimed. Setting claim statuses to claimed' % (taskId,))
+                self.radbrpc.updateTaskAndResourceClaims(taskId, claim_status='claimed')
             except Exception as e:
                 logger.error(str(e))
                 self._sendStateChange(task, 'conflict')
@@ -587,8 +591,8 @@ class ResourceAssigner():
                                                                    ignore_type_ids=[db_rcu_type_id])
 
                     if is_claimable:
-                        claim = self.makeClaim(db_resource_prop_types, db_storage_type_id, db_rcu_type_id, task,
-                                               properties, needed_resources_by_type_id, claimable_resources_dict)
+                        claim = self.makeTentativeClaim(db_resource_prop_types, db_storage_type_id, db_rcu_type_id, task,
+                                                        properties, needed_resources_by_type_id, claimable_resources_dict)
                         logger.debug('getClaimsForTask: created claim: %s', claim)
                         claims.extend(claim)
                         break
@@ -664,8 +668,8 @@ class ResourceAssigner():
 
         return is_claimable
 
-    def makeClaim(self, db_resource_prop_types, db_storage_type_id, db_rcu_type_id, task, properties,
-                   needed_resources, claimable_resources):
+    def makeTentativeClaim(self, db_resource_prop_types, db_storage_type_id, db_rcu_type_id, task, properties,
+                           needed_resources, claimable_resources):
         """ Returns list of claims for a data product (one for each needed resource type).
             Note: this function also updates claimable_resources.
             Format needed_resources:    {resource_type_id: size, ...}
@@ -674,7 +678,7 @@ class ResourceAssigner():
         claims = []
 
         for res_type, claim_size in needed_resources.items():
-            claim = {'starttime': task['starttime'], 'endtime': task['endtime'], 'status': 'claimed'}
+            claim = {'starttime': task['starttime'], 'endtime': task['endtime'], 'status': 'tentative'}
             claim['resource_id'] = claimable_resources[res_type]['id']
 
             # RCU claim size as returned by the ResourceEstimator is actually a bit pattern (encoding which of a
@@ -693,7 +697,7 @@ class ResourceAssigner():
 
             if res_type == db_storage_type_id:
                 # FIXME: find proper way to extend storage time with a year
-                # 2016-09-27 scisup would like to be involved in chosing these kind of defaults
+                # 2016-09-27 scisup would like to be involved in choosing these kind of defaults
                 # and what to do after the claim expires
                 # we now choose a default period of a year, and do nothing if the claim expires
                 claim['endtime'] += timedelta(days=365)
diff --git a/SAS/ResourceAssignment/ResourceAssigner/test/t_resourceassigner.py b/SAS/ResourceAssignment/ResourceAssigner/test/t_resourceassigner.py
index 9fae3f23edb..201b07c58c3 100755
--- a/SAS/ResourceAssignment/ResourceAssigner/test/t_resourceassigner.py
+++ b/SAS/ResourceAssignment/ResourceAssigner/test/t_resourceassigner.py
@@ -319,7 +319,7 @@ class ResourceAssignerTest(unittest.TestCase):
         'starttime': task_start_time,
         'used_rcus': None,
         'endtime': task_end_time + datetime.timedelta(days=365),
-        'status': 'claimed',
+        'status': 'tentative',
         'claim_size': rerpc_needed_claim_for_storage_size,
         'properties': [
             {'io_type': 'output', 'type': 15, 'sap_nr': 0, 'value': 0},
@@ -333,7 +333,7 @@ class ResourceAssignerTest(unittest.TestCase):
         'starttime': task_start_time,
         'used_rcus': None,
         'endtime': task_end_time,
-        'status': 'claimed',
+        'status': 'tentative',
         'claim_size': rerpc_needed_claim_for_bandwidth_size
     }
 
@@ -1608,9 +1608,11 @@ class ResourceAssignerTest(unittest.TestCase):
     def test_do_assignment_log_non_approved_or_prescheduled_states(self):
         self.resourceAssigner.doAssignment(self.non_approved_or_prescheduled_specification_tree)
 
+        assignable_task_states_str = "approved, prescheduled"
         self.logger_mock.warn.assert_any_call(
-            'skipping specification for task otdb_id=%s, because status=%s (not prescheduled)',
-            self.non_approved_or_prescheduled_otdb_id, self.non_approved_or_prescheduled_status)
+            'skipping specification for task otdb_id=%s, because status=%s (not one of %s)',
+            self.non_approved_or_prescheduled_otdb_id, self.non_approved_or_prescheduled_status,
+            assignable_task_states_str)
 
     def test_do_assignment_non_approved_or_prescheduled_states_should_be_skipped(self):
         self.resourceAssigner.doAssignment(self.non_approved_or_prescheduled_specification_tree)
@@ -1955,7 +1957,7 @@ class ResourceAssignerTest(unittest.TestCase):
     def test_do_assignment_logs_amount_of_claims_inserted_in_radb(self):
         self.resourceAssigner.doAssignment(self.specification_tree)
 
-        storage_claim = {'status': 'claimed', 'resource_id': 117, 'claim_size': 2,
+        storage_claim = {'status': 'tentative', 'resource_id': 117, 'claim_size': 2,
                          'starttime': datetime.datetime(2016, 3, 25, 21, 47, 31),
                          'used_rcus': None,
                          'endtime': datetime.datetime(2017, 3, 25, 22, 47, 31),
@@ -1983,7 +1985,7 @@ class ResourceAssignerTest(unittest.TestCase):
             'starttime': self.task_start_time,
             'used_rcus': None,
             'endtime': self.task_end_time,
-            'status': 'claimed',
+            'status': 'tentative',
             'used_rcus': used_rcus,
             'claim_size': used_rcus.count('1')
         }
@@ -2067,13 +2069,13 @@ class ResourceAssignerTest(unittest.TestCase):
         self.resourceAssigner.doAssignment(self.specification_tree)
 
         self.logger_mock.info.assert_any_call(
-            'doAssignment: all resources for task %s were succesfully claimed. Setting claim statuses to allocated' %
+            'doAssignment: all resources for task %s were succesfully claimed. Setting claim statuses to claimed' %
             self.task_id)
 
     def test_do_assignment_updates_task_and_resources_as_claimed_in_radb(self):
         self.resourceAssigner.doAssignment(self.specification_tree)
 
-        self.rarpc_mock.updateTaskAndResourceClaims.assert_any_call(self.task_id, claim_status='allocated')
+        self.rarpc_mock.updateTaskAndResourceClaims.assert_any_call(self.task_id, claim_status='claimed')
 
     def test_do_assignment_logs_task_data_removal_if_task_is_pipeline(self):
         self.sqrpc_mock.getDiskUsageForOTDBId.return_value = {'found': True, 'disk_usage': 10}
diff --git a/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb.py b/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb.py
index 0f831abe5d1..c5ffee4149f 100644
--- a/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb.py
+++ b/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb.py
@@ -1358,14 +1358,14 @@ class RADatabase:
 
         logger.info("validating status of %d resource claim(s) for task_id(s) %s" % (len(claims), to_csv_string(task_ids)))
 
-        # cache status_id's for conflift and claimed
+        # cache status_id's for conflict and tentative
         claimsStatuses = self.getResourceClaimStatuses()
         conflistStatusId = next(cs['id'] for cs in claimsStatuses if cs['name'] == 'conflict')
+        tentativeStatusId = next(cs['id'] for cs in claimsStatuses if cs['name'] == 'tentative')
         claimedStatusId = next(cs['id'] for cs in claimsStatuses if cs['name'] == 'claimed')
-        allocatedStatusId = next(cs['id'] for cs in claimsStatuses if cs['name'] == 'allocated')
 
         # 'result' dict for new statuses for claims
-        newClaimStatuses = {conflistStatusId:[], claimedStatusId:[]}
+        newClaimStatuses = {conflistStatusId: [], tentativeStatusId: []}
 
         #get all resources including availability
         #convert to id->resource dict
@@ -1406,8 +1406,8 @@ class RADatabase:
                     #logger.info("totalOtherClaimSize (%s) + claimSize (%s) >= resource_available_capacity %s for claim %s on resource %s %s for task %s",
                                 #totalOtherClaimSize, claimSize, resource['available_capacity'], claim_id, resource_id, resource['name'], task_id)
                     #newClaimStatuses[conflistStatusId].append(claim_id)
-                #elif claim['status_id'] != allocatedStatusId:
-                    #newClaimStatuses[claimedStatusId].append(claim_id)
+                #elif claim['status_id'] != claimedStatusId:
+                    #newClaimStatuses[tentativeStatusId].append(claim_id)
 
         if newClaimStatuses:
             for status_id, claim_ids in newClaimStatuses.items():
diff --git a/SAS/ResourceAssignment/ResourceAssignmentDatabase/sql/add_functions_and_triggers.sql b/SAS/ResourceAssignment/ResourceAssignmentDatabase/sql/add_functions_and_triggers.sql
index c27bb9cd8d2..cd48ab4aa09 100644
--- a/SAS/ResourceAssignment/ResourceAssignmentDatabase/sql/add_functions_and_triggers.sql
+++ b/SAS/ResourceAssignment/ResourceAssignmentDatabase/sql/add_functions_and_triggers.sql
@@ -464,12 +464,12 @@ CREATE OR REPLACE FUNCTION resource_monitoring.get_resource_claimable_capacity_b
   RETURNS bigint AS
 $$
 DECLARE
-    allocated_status_id int := 1; --beware: hard coded instead of lookup for performance
+    claimed_status_id int := 1; --beware: hard coded instead of lookup for performance
     max_resource_usage resource_monitoring.resource_usage;
     max_resource_usage_value int;
     available_capacity bigint;
 BEGIN
-    SELECT * FROM resource_monitoring.get_max_resource_usage_between(_resource_id, allocated_status_id, _lower, _upper) INTO max_resource_usage;
+    SELECT * FROM resource_monitoring.get_max_resource_usage_between(_resource_id, claimed_status_id, _lower, _upper) INTO max_resource_usage;
 
     IF max_resource_usage IS NULL THEN
         max_resource_usage_value := 0;
@@ -494,12 +494,12 @@ CREATE OR REPLACE FUNCTION resource_monitoring.check_new_claim_for_conflicts(new
   RETURNS void AS
 $$
 DECLARE
-claimed_status_id int := 0; --beware: hard coded instead of lookup for performance
+tentative_status_id int := 0; --beware: hard coded instead of lookup for performance
 conflict_status_id int := 2; --beware: hard coded instead of lookup for performance
 free_claimable_capacity bigint;
 BEGIN
-    --only check claimes in claimed status
-    IF new_claim.status_id = claimed_status_id THEN
+    --only check claims in tentative status
+    IF new_claim.status_id = tentative_status_id THEN
         -- get the free free_claimable_capacity for this resource for this claim's time window
         SELECT * FROM resource_monitoring.get_resource_claimable_capacity_between(new_claim.resource_id, new_claim.starttime, new_claim.endtime) INTO free_claimable_capacity;
 
@@ -564,10 +564,10 @@ CREATE OR REPLACE FUNCTION resource_monitoring.before_claim_insertupdatedelete()
   RETURNS trigger AS
 $BODY$
 DECLARE
-    claimed_status_id int := 0; --beware: hard coded instead of lookup for performance
+    tentative_status_id int := 0; --beware: hard coded instead of lookup for performance
 BEGIN
-    IF NEW.status_id != claimed_status_id THEN
-        RAISE EXCEPTION 'newly inserted claims should not have status other than claimed; claim: %', NEW;
+    IF NEW.status_id != tentative_status_id THEN
+        RAISE EXCEPTION 'newly inserted claims should not have status other than tentative; claim: %', NEW;
     END IF;
     RETURN NEW;
 END;
diff --git a/SAS/ResourceAssignment/ResourceAssignmentDatabase/sql/add_resource_allocation_statics.sql b/SAS/ResourceAssignment/ResourceAssignmentDatabase/sql/add_resource_allocation_statics.sql
index 28d92092c1f..9031269c24d 100644
--- a/SAS/ResourceAssignment/ResourceAssignmentDatabase/sql/add_resource_allocation_statics.sql
+++ b/SAS/ResourceAssignment/ResourceAssignmentDatabase/sql/add_resource_allocation_statics.sql
@@ -6,7 +6,7 @@ INSERT INTO resource_allocation.task_status VALUES (200, 'prepared'), (300, 'app
 (350, 'prescheduled'), (400, 'scheduled'), (500, 'queued'), (600, 'active'), (900, 'completing'), (1000, 'finished'), (1100, 'aborted'),
 (1150, 'error'), (1200, 'obsolete'); -- This is the list from OTDB, we'll need to merge it with the list from MoM in the future, might use different indexes?
 INSERT INTO resource_allocation.task_type VALUES (0, 'observation'),(1, 'pipeline'),(2, 'reservation'); -- We'll need more types
-INSERT INTO resource_allocation.resource_claim_status VALUES (0, 'claimed'), (1, 'allocated'), (2, 'conflict');
+INSERT INTO resource_allocation.resource_claim_status VALUES (0, 'tentative'), (1, 'claimed'), (2, 'conflict');
 INSERT INTO resource_allocation.resource_claim_property_type VALUES (0, 'nr_of_is_files'),(1, 'nr_of_cs_files'),(2, 'nr_of_uv_files'),(3, 'nr_of_im_files'),(4, 'nr_of_img_files'),(5, 'nr_of_pulp_files'),(6, 'nr_of_cs_stokes'),(7, 'nr_of_is_stokes'),(8, 'is_file_size'),(9, 'cs_file_size'),(10, 'uv_file_size'),(11, 'im_file_size'),(12, 'img_file_size'),(13, 'nr_of_pulp_files'),(14, 'nr_of_cs_parts'),(15, 'start_sb_nr'),(16,'uv_otdb_id'),(17,'cs_otdb_id'),(18,'is_otdb_id'),(19,'im_otdb_id'),(20,'img_otdb_id'),(21,'pulp_otdb_id'),(22, 'is_tab_nr'),(23, 'start_sbg_nr'),(24, 'pulp_file_size');
 INSERT INTO resource_allocation.resource_claim_property_io_type VALUES (0, 'output'),(1, 'input');
 INSERT INTO resource_allocation.config VALUES (0, 'max_fill_ratio_CEP4_storage', '0.85'), (1, 'claim_timeout', '172800'), (2, 'min_inter_task_delay', '60'), (3, 'max_fill_ratio_CEP4_bandwidth', '0.75'); -- Just some values 172800 is two days in seconds
diff --git a/SAS/ResourceAssignment/ResourceAssignmentDatabase/tests/fill_database.sql b/SAS/ResourceAssignment/ResourceAssignmentDatabase/tests/fill_database.sql
index be1e21bca93..b4c49d30efa 100644
--- a/SAS/ResourceAssignment/ResourceAssignmentDatabase/tests/fill_database.sql
+++ b/SAS/ResourceAssignment/ResourceAssignmentDatabase/tests/fill_database.sql
@@ -15,7 +15,7 @@ INSERT INTO resource_allocation.specification VALUES (0, '2015-11-05 12:00:00',
 INSERT INTO resource_allocation.task VALUES (0, 654321, 12345, 0, 0, 0),(1, 765432, 2654321, 1, 1, 1);
 INSERT INTO resource_allocation.claim_session VALUES (0, 'renting', 0, '2015-11-05 12:00:00', 'renting-token'),
 (1, 'paulus', 1, '2015-11-05 14:00:00', 'paulus-token');
-INSERT INTO resource_allocation.resource_claim_status VALUES (0, 'CLAIMED'),(1, 'ALLOCATED');
+INSERT INTO resource_allocation.resource_claim_status VALUES (0, 'TENTATIVE'),(1, 'CLAIMED');
 INSERT INTO resource_allocation.resource_claim VALUES (0, 0, 0, '2015-11-05 12:00:00', '2015-11-05 12:30:00', 0, 0, 1),
 (1, 2, 1, '2015-11-05 13:00:00', '2015-11-05 14:00:00', 1, 1, 1234);
 INSERT INTO resource_monitoring.resource_capacity VALUES (0, 0, 1, 1), (1, 1, 1,1 ), (2, 2, 15000, 100000);
diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/fakedata.py b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/fakedata.py
index 052ce4fd1c4..9b45c712f59 100644
--- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/fakedata.py
+++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/fakedata.py
@@ -128,15 +128,15 @@ for task in tasks.values():
         taskResources = ingestnodes
 
     for resource in taskResources:
-        claim = {'id': len(resourceClaims), 'resourceId': resource['id'], 'taskId': task['id'], 'startTime': task['from'], 'endTime': task['to'], 'status': 'allocated'}
+        claim = {'id': len(resourceClaims), 'resourceId': resource['id'], 'taskId': task['id'], 'startTime': task['from'], 'endTime': task['to'], 'status': 'claimed'}
         resourceClaims.append(claim)
 
         groupIds = [rg['id'] for rg in resourceGroups if resource['id'] in rg['resourceIds']]
         taskResourceGroupIds |= set(groupIds)
 
-    claim = {'id': len(resourceClaims), 'resourceId': cep4storage['id'], 'taskId': task['id'], 'startTime': task['from'], 'endTime': task['from'] + timedelta(days=1), 'status': 'allocated'}
+    claim = {'id': len(resourceClaims), 'resourceId': cep4storage['id'], 'taskId': task['id'], 'startTime': task['from'], 'endTime': task['from'] + timedelta(days=1), 'status': 'claimed'}
     resourceClaims.append(claim)
 
     for groupId in taskResourceGroupIds:
-        groupClaim = {'id': len(resourceGroupClaims), 'resourceGroupId': groupId, 'taskId': task['id'], 'startTime': task['from'], 'endTime': task['to'], 'status': 'allocated'}
+        groupClaim = {'id': len(resourceGroupClaims), 'resourceGroupId': groupId, 'taskId': task['id'], 'startTime': task['from'], 'endTime': task['to'], 'status': 'claimed'}
         resourceGroupClaims.append(groupClaim)
diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/chartresourceusagecontroller.js b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/chartresourceusagecontroller.js
index 72f4e2208f7..03aa1cc172b 100644
--- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/chartresourceusagecontroller.js
+++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/chartresourceusagecontroller.js
@@ -149,7 +149,7 @@ chartResourceUsageControllerMod.controller('ChartResourceUsageController', ['$sc
 
             // loop again over the  usages for this resource
             // loop in predefined status order, so the chart's series are stacked in the correct order
-            for(var status of ['conflict', 'claimed', 'allocated']) {
+            for(var status of ['conflict', 'tentative', 'claimed']) {
                 if(!status_usages.hasOwnProperty(status))
                     continue;
 
@@ -192,9 +192,9 @@ chartResourceUsageControllerMod.controller('ChartResourceUsageController', ['$sc
                 series.data = usage_data;
 
                 switch(status) {
-                    case 'claimed': series.color = '#ffa64d'; break;
                     case 'conflict': series.color = '#ff0000'; break;
-                    case 'allocated': series.color = '#66ff66'; break;
+                    case 'tentative': series.color = '#ffa64d'; break;
+                    case 'claimed': series.color = '#66ff66'; break;
                 }
             }
 
diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/datacontroller.js b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/datacontroller.js
index 25a0fbb1b92..1b49358d699 100644
--- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/datacontroller.js
+++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/static/app/controllers/datacontroller.js
@@ -129,9 +129,9 @@ angular.module('raeApp').factory("dataService", ['$http', '$q', function($http,
         return new Date(date.getFullYear(), date.getMonth(), date.getDate(), hourMod*Math.ceil(date.getHours()/hourMod), minMod*Math.ceil(date.getMinutes()/minMod));
     };
 
-    self.resourceClaimStatusColors = {'claimed':'#ffa64d',
+    self.resourceClaimStatusColors = {'tentative':'#ffa64d',
+                                      'claimed': '#66ff66',
                                       'conflict':'#ff0000',
-                                      'allocated': '#66ff66',
                                       'mixed': '#bfbfbf'}
 
     self.taskStatusColors = {'prepared':'#cccccc',
diff --git a/SAS/ResourceAssignment/ResourceAssignmentService/rpc.py b/SAS/ResourceAssignment/ResourceAssignmentService/rpc.py
index 615e62ecde3..b596f309953 100644
--- a/SAS/ResourceAssignment/ResourceAssignmentService/rpc.py
+++ b/SAS/ResourceAssignment/ResourceAssignmentService/rpc.py
@@ -288,9 +288,9 @@ def do_tests(busname=DEFAULT_BUSNAME, servicename=DEFAULT_SERVICENAME):
     with RARPC(busname=busname, servicename=servicename) as rpc:
         #for i in range(0, 10):
             #taskId = rpc.insertTask(1234, 5678, 'active', 'OBSERVATION', 1)['id']
-            #rcId = rpc.insertResourceClaim(1, taskId, datetime.datetime.utcnow(), datetime.datetime.utcnow() + datetime.timedelta(hours=1), 'CLAIMED', 1, 10, 'einstein', -1)['id']
+            #rcId = rpc.insertResourceClaim(1, taskId, datetime.datetime.utcnow(), datetime.datetime.utcnow() + datetime.timedelta(hours=1), 'TENTATIVE', 1, 10, 'einstein', -1)['id']
             #print rpc.getResourceClaim(rcId)
-            #rpc.updateResourceClaim(rcId, starttime=datetime.datetime.utcnow(), endtime=datetime.datetime.utcnow() + datetime.timedelta(hours=2), status='ALLOCATED')
+            #rpc.updateResourceClaim(rcId, starttime=datetime.datetime.utcnow(), endtime=datetime.datetime.utcnow() + datetime.timedelta(hours=2), status='CLAIMED')
             #print rpc.getResourceClaim(rcId)
             #print
 
@@ -298,7 +298,7 @@ def do_tests(busname=DEFAULT_BUSNAME, servicename=DEFAULT_SERVICENAME):
         #for t in tasks:
             #print rpc.getTask(t['id'])
             #for i in range(4,9):
-                #rcId = rpc.insertResourceClaim(i, t['id'], datetime.datetime.utcnow(), datetime.datetime.utcnow() + datetime.timedelta(hours=1), 'CLAIMED', 1, 10, 'einstein', -1)['id']
+                #rcId = rpc.insertResourceClaim(i, t['id'], datetime.datetime.utcnow(), datetime.datetime.utcnow() + datetime.timedelta(hours=1), 'TENTATIVE', 1, 10, 'einstein', -1)['id']
             ##print rpc.deleteTask(t['id'])
             ##print rpc.getTasks()
             ##print rpc.getResourceClaims()
diff --git a/SAS/ResourceAssignment/ResourceAssignmentService/test/test_ra_service_and_rpc.py b/SAS/ResourceAssignment/ResourceAssignmentService/test/test_ra_service_and_rpc.py
index 38bdf4662fd..2ccc13ec8f6 100755
--- a/SAS/ResourceAssignment/ResourceAssignmentService/test/test_ra_service_and_rpc.py
+++ b/SAS/ResourceAssignment/ResourceAssignmentService/test/test_ra_service_and_rpc.py
@@ -48,7 +48,7 @@ try:
         # modify the return values of the various RADatabase methods with pre-cooked answers
         mock.getTaskStatuses.return_value = [{'id': 1, 'name': 'opened'}, {'id': 2, 'name': 'scheduled'}]
         mock.getTaskTypes.return_value = [{'id': 0, 'name': 'OBSERVATION'}, {'id': 1, 'name': 'PIPELINE'}]
-        mock.getResourceClaimStatuses.return_value = [{'id': 0, 'name': 'CLAIMED'},{'id': 1, 'name': 'ALLOCATED'},{'id': 2, 'name': 'CONFLICT'}]
+        mock.getResourceClaimStatuses.return_value = [{'id': 0, 'name': 'TENTATIVE'},{'id': 1, 'name': 'CLAIMED'},{'id': 2, 'name': 'CONFLICT'}]
         mock.getUnits.return_value = [{'units': 'rsp_channel_bit', 'id': 0},{'units': 'bytes', 'id': 1},{'units': 'rcu_board', 'id': 2},{'units': 'bits/second', 'id': 3},{'units': 'cores', 'id': 4}]
         mock.getResourceTypes.return_value = [{'unit_id': 0, 'id': 0, 'unit': 'rsp_channel_bit', 'name': 'rsp'},{'unit_id': 1, 'id': 1, 'unit': 'bytes', 'name': 'tbb'},{'unit_id': 2, 'id': 2, 'unit': 'rcu_board', 'name': 'rcu'},{'unit_id': 3, 'id': 3, 'unit': 'bits/second', 'name': 'bandwidth'},{'unit_id': 4, 'id': 4, 'unit': 'cores', 'name': 'processor'},{'unit_id': 1, 'id': 5, 'unit': 'bytes', 'name': 'storage'}]
         mock.getResourceGroupTypes.return_value = [{'id': 0, 'name': 'instrument'},{'id': 1, 'name': 'cluster'},{'id': 2, 'name': 'station_group'},{'id': 3, 'name': 'station'},{'id': 4, 'name': 'node_group'},{'id': 5, 'name': 'node'}]
@@ -57,7 +57,7 @@ try:
         mock.getTasks.return_value = [{'status': 'prepared', 'type_id': 1, 'status_id': 200, 'specification_id': 1, 'starttime': datetime.datetime(2015, 11, 30, 12, 0), 'mom_id': -1, 'endtime': datetime.datetime(2015, 11, 30, 15, 0), 'type': 'PIPELINE', 'id': 5, 'otdb_id': -1}]
         mock.getTask.return_value = mock.getTasks.return_value[0]
         mock.getTask.side_effect = lambda x: mock.getTasks.return_value[0] if x == 5 else None
-        mock.getResourceClaims.return_value = [{'username': 'paulus', 'status': 'ALLOCATED', 'user_id': 1, 'task_id': 5, 'status_id': 1, 'resource_id': 1, 'session_id': 1, 'claim_size': 10L, 'starttime': datetime.datetime(2015, 11, 30, 12, 0), 'endtime': datetime.datetime(2015, 11, 30, 12, 0), 'id': 5}]
+        mock.getResourceClaims.return_value = [{'username': 'paulus', 'status': 'CLAIMED', 'user_id': 1, 'task_id': 5, 'status_id': 1, 'resource_id': 1, 'session_id': 1, 'claim_size': 10L, 'starttime': datetime.datetime(2015, 11, 30, 12, 0), 'endtime': datetime.datetime(2015, 11, 30, 12, 0), 'id': 5}]
 
         class Test1(unittest.TestCase):
             '''Test'''
-- 
GitLab