|
19 | 19 | from DIRAC.WorkloadManagementSystem.Client.JobManagerClient import JobManagerClient
|
20 | 20 | from DIRAC.WorkloadManagementSystem.Client.PilotManagerClient import PilotManagerClient
|
21 | 21 | from DIRAC.WorkloadManagementSystem.Client.WMSAdministratorClient import WMSAdministratorClient
|
| 22 | +from DIRAC.WorkloadManagementSystem.Service.WMSUtilities import ( |
| 23 | + killPilotsInQueues, |
| 24 | +) |
22 | 25 |
|
23 | 26 | voName = ""
|
24 | 27 | ret = getProxyInfo(disableVOMS=True)
|
@@ -452,8 +455,28 @@ def killPilot(self, gridReference):
|
452 | 455 | if not isinstance(gridReference, (str, list)):
|
453 | 456 | return self._errorReport("Expected string or list of strings for pilot reference")
|
454 | 457 |
|
455 |
| - result = PilotManagerClient().killPilot(gridReference) |
456 |
| - return result |
| 458 | + # Make a list if it is not yet |
| 459 | + if isinstance(gridReference, str): |
| 460 | + gridReference = [gridReference] |
| 461 | + |
| 462 | + # Regroup pilots per site |
| 463 | + pilotRefDict = {} |
| 464 | + for pilotReference in gridReference: |
| 465 | + result = PilotManagerClient().getPilotInfo(pilotReference) |
| 466 | + if not result["OK"] or not result["Value"]: |
| 467 | + return S_ERROR(f"Failed to get info for pilot {pilotReference}") |
| 468 | + |
| 469 | + pilotDict = result["Value"][pilotReference] |
| 470 | + queue = "@@@".join( |
| 471 | + [pilotDict["VO"], pilotDict["GridSite"], pilotDict["DestinationSite"], pilotDict["Queue"]] |
| 472 | + ) |
| 473 | + gridType = pilotDict["GridType"] |
| 474 | + pilotRefDict.setdefault(queue, {}) |
| 475 | + pilotRefDict[queue].setdefault("PilotList", []) |
| 476 | + pilotRefDict[queue]["PilotList"].append(pilotReference) |
| 477 | + pilotRefDict[queue]["GridType"] = gridType |
| 478 | + |
| 479 | + return killPilotsInQueues(pilotRefDict) |
457 | 480 |
|
458 | 481 | #############################################################################
|
459 | 482 | def getPilotLoggingInfo(self, gridReference):
|
|
0 commit comments