Commit 79ab3bcd authored by Cristiano Urban's avatar Cristiano Urban
Browse files

Handle connection errors when trying to query RAP.

parent 715f332f
Loading
Loading
Loading
Loading
Loading
+24 −13
Original line number Diff line number Diff line
@@ -10,13 +10,17 @@ import logging
import os
import sys

from rap_client import RapClient
from redis_log_handler import RedisLogHandler
from redis_rpc_server import RedisRPCServer
from http.client import HTTPException
from socket import gaierror

from config import Config
from db_connector import DbConnector
from exceptions import MultipleUsersException
from job import Job
from job_queue import JobQueue
from rap_client import RapClient
from redis_log_handler import RedisLogHandler
from redis_rpc_server import RedisRPCServer
from system_utils import SystemUtils


@@ -88,17 +92,24 @@ class DataRPCServer(RedisRPCServer):
                rapCli = RapClient()
                rapInfo = rapCli.getUserInfo(user)
            except HTTPException:
                errorMsg = "HTTP exception."
                errorMsg = "HTTP exception when trying to connect to RAP."
                self.logger.exception(errorMsg)
                response = { "responseType": "ERROR",
                             "errorCode": 6,
                             "errorMsg": errorMsg }
                return response
            except (OSError, gaierror):
                errorMsg = "Unable to connect to RAP."
                self.logger.exception(errorMsg)
                response = { "responseType": "ERROR",
                             "errorCode": 7,
                             "errorMsg": errorMsg }
                return response
            except MultipleUsersException:
                errorMsg = "Multiple users with the same email address in RAP."
                self.logger.exception(errorMsg)
                response = { "responseType": "ERROR",
                             "errorCode": 7,
                             "errorCode": 8,
                             "errorMsg": errorMsg }
                return response                
            try:    
@@ -111,7 +122,7 @@ class DataRPCServer(RedisRPCServer):
                    errorMsg = f"No storage point of type '{storageType}' available."
                    self.logger.exception(errorMsg)
                    response = { "responseType": "ERROR",
                                 "errorCode": 8,
                                 "errorCode": 9,
                                 "errorMsg": errorMsg }
                    return response
            except Exception:
@@ -130,14 +141,14 @@ class DataRPCServer(RedisRPCServer):
                errorMsg = "The user does not exist on the transfer node."
                self.logger.error(errorMsg)
                response = { "responseType": "ERROR",
                             "errorCode": 9,
                             "errorCode": 10,
                             "errorMsg": errorMsg }
            elif not (userInDb or rapInfo):
                # the user cannot be found neither in RAP nor in db
                errorMsg = "The user is not registered neither in RAP nor in the database."
                self.logger.error(errorMsg)
                response = { "responseType": "ERROR",
                             "errorCode": 10,
                             "errorCode": 11,
                             "errorMsg": errorMsg }
            else:
                if not userInDb and rapInfo:
@@ -166,19 +177,19 @@ class DataRPCServer(RedisRPCServer):
                        errorMsg = "The 'store' directory on the transfer node is empty."
                        self.logger.error(errorMsg)
                        response = { "responseType": "ERROR",
                                     "errorCode": 11,
                                     "errorCode": 12,
                                     "errorMsg": errorMsg }
                    else:
                        errorMsg = "Service busy. Please, retry later."
                        self.logger.error(errorMsg)
                        response = { "responseType": "ERROR",
                                     "errorCode": 12,
                                     "errorCode": 13,
                                     "errorMsg": errorMsg }
                else:
                    errorMsg = "Permission denied."
                    self.logger.error(errorMsg)
                    response = { "responseType": "ERROR",
                                 "errorCode": 13,
                                 "errorCode": 14,
                                 "errorMsg": errorMsg }
        elif requestBody["requestType"] == "STORE_CON":
            self.logger.info("Checking storage point connection...")
@@ -224,7 +235,7 @@ class DataRPCServer(RedisRPCServer):
                errorMsg = "Unable to insert the job in the 'write_pending' queue."
                self.logger.exception(errorMsg)
                response = { "responseType": "ERROR",
                             "errorCode": 14,
                             "errorCode": 15,
                             "errorMsg": errorMsg }
                return response
            else:
@@ -234,7 +245,7 @@ class DataRPCServer(RedisRPCServer):
            errorMsg = "Unkown request type."
            self.logger.error(errorMsg)
            response = { "responseType": "ERROR",
                         "errorCode": 15,
                         "errorCode": 16,
                         "errorMsg": errorMsg }
        return response