Skip to content

Commit d5d1451

Browse files
authored
Merge pull request #7367 from aldbr/v8.0_FIX_arex-renew-delegations-anyway-if-malformed
[8.0] fix: AREXCE should break when a valid delegation ID is found
2 parents 121eea5 + 91c10ce commit d5d1451

File tree

1 file changed

+17
-24
lines changed

1 file changed

+17
-24
lines changed

src/DIRAC/Resources/Computing/AREXComputingElement.py

Lines changed: 17 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ def _prepareDelegation(self):
280280
def _getDelegationIDs(self):
281281
"""Query and return the delegation IDs.
282282
283-
This happens when the call is from self.renewDelegations.
283+
This happens when the call is from self.renewDelegation.
284284
More info at
285285
https://www.nordugrid.org/arc/arc6/tech/rest/rest.html#jobs-management
286286
https://www.nordugrid.org/arc/arc6/tech/rest/rest.html#delegations-management
@@ -293,7 +293,7 @@ def _getDelegationIDs(self):
293293
result = self._request("get", query)
294294
if not result["OK"]:
295295
self.log.warn("Issue while interacting with the delegations.", result["Message"])
296-
return S_OK([])
296+
return result
297297
response = result["Value"]
298298

299299
# If there is no delegation, response.json is expected to return an exception
@@ -327,18 +327,17 @@ def _getProxyFromDelegationID(self, delegationID):
327327
# Submit the POST request to get the delegation
328328
result = self._request("post", query, params=params)
329329
if not result["OK"]:
330-
self.log.error("Issue while interacting with delegation ", f"{delegationID}: {result['Message']}")
331-
return S_ERROR(f"Issue while interacting with delegation {delegationID}: {result['Message']}")
330+
self.log.error("Could not get a proxy for", f"delegation {delegationID}: {result['Message']}")
331+
return S_ERROR(f"Could not get a proxy for delegation {delegationID}: {result['Message']}")
332332
response = result["Value"]
333333

334-
proxyContent = response.text
335334
proxy = X509Chain()
336-
result = proxy.loadChainFromString(proxyContent)
335+
result = proxy.loadChainFromString(response.text)
337336
if not result["OK"]:
338337
self.log.error(
339338
"Issue while trying to load proxy content from delegation", f"{delegationID}: {result['Message']}"
340339
)
341-
return S_ERROR("Issue while trying to load proxy content from delegation")
340+
return result
342341

343342
return S_OK(proxy)
344343

@@ -454,6 +453,7 @@ def submitJob(self, executableFile, proxy, numberOfJobs=1, inputs=None, outputs=
454453

455454
# If we are here, we have found the right delegationID to use
456455
currentDelegationID = delegationID
456+
break
457457

458458
if not currentDelegationID:
459459
# No existing delegation, we need to prepare one
@@ -650,28 +650,20 @@ def getCEStatus(self):
650650
#############################################################################
651651

652652
def _renewDelegation(self, delegationID):
653-
"""Renew the delegation
653+
"""Renew the delegation if needed
654654
655655
:params delegationID: delegation ID to renew
656656
"""
657-
# Prepare the command
658-
params = {"action": "get"}
659-
query = self._urlJoin(os.path.join("delegations", delegationID))
660-
661-
# Submit the POST request to get the proxy
662-
result = self._request("post", query, params=params)
657+
result = self._getProxyFromDelegationID(delegationID)
663658
if not result["OK"]:
664-
self.log.error("Could not get a proxy for", f"delegation {delegationID}: {result['Message']}")
665-
return S_ERROR(f"Could not get a proxy for delegation {delegationID}")
666-
response = result["Value"]
659+
return result
660+
proxy = result["Value"]
667661

668-
proxy = X509Chain()
669-
result = proxy.loadChainFromString(response.text)
670-
if not result["OK"]:
671-
self.log.error("Could not load proxy for", f"delegation {delegationID}: {result['Message']}")
672-
return S_ERROR(f"Could not load proxy for delegation {delegationID}")
662+
# Do we have the right proxy to perform a delegation renewal?
663+
if self.proxy.getDIRACGroup() != proxy.getDIRACGroup():
664+
return S_OK()
673665

674-
# Now test and renew the proxy
666+
# Check if the proxy is long enough
675667
result = proxy.getRemainingSecs()
676668
if not result["OK"]:
677669
self.log.error(
@@ -685,11 +677,12 @@ def _renewDelegation(self, delegationID):
685677
# No need to renew. Proxy is long enough
686678
return S_OK()
687679

688-
self.log.verbose(
680+
self.log.notice(
689681
"Renewing delegation",
690682
f"{delegationID} whose proxy expires at {timeLeft}",
691683
)
692684
# Proxy needs to be renewed - try to renew it
685+
693686
# First, get a new CSR from the delegation
694687
params = {"action": "renew"}
695688
query = self._urlJoin(os.path.join("delegations", delegationID))

0 commit comments

Comments
 (0)