From edb8c6b6f422185e159641411f7ee0be06d1f699 Mon Sep 17 00:00:00 2001
From: Cristiano Urban <cristiano.urban@inaf.it>
Date: Fri, 7 Jul 2023 11:28:37 +0200
Subject: [PATCH] Set job phase to 'ERROR' for jobs launched by users not
 present in the 'users' table of the VOSpace database.

Signed-off-by: Cristiano Urban <cristiano.urban@inaf.it>
---
 transfer_service/start_job_rpc_server.py | 24 +++++++++++++++++++++---
 1 file changed, 21 insertions(+), 3 deletions(-)

diff --git a/transfer_service/start_job_rpc_server.py b/transfer_service/start_job_rpc_server.py
index c601a05..39cb845 100644
--- a/transfer_service/start_job_rpc_server.py
+++ b/transfer_service/start_job_rpc_server.py
@@ -52,8 +52,8 @@ class StartJobRPCServer(RedisRPCServer):
 
     def callback(self, requestBody):
         # debug block...
-        out = open("start_job_rpc_server_log.txt", "a")
-        out.write(json.dumps(requestBody))
+        #out = open("start_job_rpc_server_log.txt", "a")
+        #out.write(json.dumps(requestBody))
 
         job = Job()
         job.setId(requestBody["job"]["jobId"])
@@ -71,10 +71,28 @@ class StartJobRPCServer(RedisRPCServer):
                          "errorCode": 3,
                          "errorMsg": errorMsg }
             return response
+
+        # Check if 'read_pending_queue' is full
         if pendingQueueLen >= self.maxPendingJobs:
             job.setPhase("ERROR")
             job.setErrorType("transient")
-            job.setErrorMessage("Pending queue is full, please, retry later.")
+            errorMsg = "Pending queue is full, please, retry later."
+            job.setErrorMessage(errorMsg)
+            self.logger.warning(errorMsg)
+            errorFlag = True
+        # Check if the user is already present in the VOSpace database. If not, change the job phase to 'ERROR'.
+        # The user must be created in the database using the 'vos_user' admin command.
+        elif not self.dbConn.getUserName(requestBody["job"]["ownerId"]):
+            job.setPhase("ERROR")
+            job.setErrorType("transient")
+            errorMsg = "The user is registered in the authentication system (RAP), but is not present into the 'users' table of the VOSpace database."
+            job.setErrorMessage(errorMsg)
+            self.logger.warning(errorMsg)
+            errorFlag = True
+        else:
+            errorFlag = False
+
+        if errorFlag:
             try:
                 self.dbConn.insertJob(job)
             except Exception:
-- 
GitLab