diff --git a/src/DIRAC/ResourceStatusSystem/Command/DowntimeCommand.py b/src/DIRAC/ResourceStatusSystem/Command/DowntimeCommand.py index a4a360f6fd4..e99c8fdeb29 100644 --- a/src/DIRAC/ResourceStatusSystem/Command/DowntimeCommand.py +++ b/src/DIRAC/ResourceStatusSystem/Command/DowntimeCommand.py @@ -149,7 +149,7 @@ def _prepareCommand(self): else: elementName = gocSite["Value"] - # The DIRAC se names mean nothing on the grid, but their hosts and service types do mean. + # The DIRAC SE names mean nothing on the grid, but their hosts and service types do mean. elif elementType == "StorageElement": # Get the SE object and its protocols try: @@ -163,9 +163,15 @@ def _prepareCommand(self): # Determine the SE type and update gOCDBServiceType accordingly se_type = se.options.get("SEType", "") if re.search(r"D[1-9]", se_type): - gOCDBServiceType = diracToGOC_conversion[f"disk_{se_protocols[0]}"] + diskOrTape = "disk" elif re.search(r"T[1-9]", se_type): - gOCDBServiceType = diracToGOC_conversion[f"tape_{se_protocols[0]}"] + diskOrTape = "tape" + # iterate on the protocols and get the first one + for protocol in se_protocols: + dirac_protocol = f"{diskOrTape}_{protocol}" + if dirac_protocol in diracToGOC_conversion: + gOCDBServiceType = diracToGOC_conversion[dirac_protocol] + break # Get the SE hosts and return an error if none are found res = getSEHosts(elementName) @@ -178,8 +184,10 @@ def _prepareCommand(self): elementName = seHosts # in this case it will return a list, because there might be more than one host only elif elementType in ["FTS", "FTS3"]: - gOCDBServiceType = diracToGOC_conversion[elementType] - # WARNING: this method presupposes that the server is an FTS3 type + try: + gOCDBServiceType = diracToGOC_conversion[elementType] + except KeyError: # not a GOC type (? how can this happen ?) + gOCDBServiceType = None gocSite = getGOCFTSName(elementName) if not gocSite["OK"]: self.log.warn("FTS not in Resources/FTSEndpoints/FTS3 ?", elementName) @@ -194,7 +202,10 @@ def _prepareCommand(self): ceType = gConfig.getValue( cfgPath("Resources", "Sites", siteName.split(".")[0], siteName, "CEs", elementName, "CEType") ) - gOCDBServiceType = diracToGOC_conversion[ceType] + try: + gOCDBServiceType = diracToGOC_conversion[ceType] + except KeyError: # not a GOC type (e.g. SSH CE) + gOCDBServiceType = None return S_OK((element, elementName, hours, gOCDBServiceType))