From dd86934ec61be850f5baf0c9d17557d852d3a642 Mon Sep 17 00:00:00 2001 From: Federico Stagni Date: Wed, 30 Oct 2024 09:44:03 +0100 Subject: [PATCH] fix: some protocols or types are not in GOC --- .../Command/DowntimeCommand.py | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/DIRAC/ResourceStatusSystem/Command/DowntimeCommand.py b/src/DIRAC/ResourceStatusSystem/Command/DowntimeCommand.py index a4a360f6fd4..f8ef8425015 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: @@ -162,10 +162,17 @@ def _prepareCommand(self): # Determine the SE type and update gOCDBServiceType accordingly se_type = se.options.get("SEType", "") + diskOrTape = "" 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 +185,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 +203,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))