Skip to content

Commit 3c22764

Browse files
authored
Merge pull request #8121 from chrisburr/drop-JobStateUpdateClient-server
[9.0] Drop the direct use of the JobStateUpdateClient from servers
2 parents 8c0c92c + d86b689 commit 3c22764

File tree

4 files changed

+63
-8
lines changed

4 files changed

+63
-8
lines changed

src/DIRAC/Interfaces/API/Job.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
from io import StringIO
3030
from urllib.parse import quote
31+
from pathlib import Path
3132

3233
from DIRAC import S_OK, gLogger
3334
from DIRAC.Core.Base.API import API

src/DIRAC/RequestManagementSystem/Client/ReqClient.py

Lines changed: 55 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,24 @@
1111
import random
1212
import json
1313
import datetime
14+
from functools import cached_property
1415

1516
# # from DIRAC
1617
from DIRAC import gLogger, S_OK, S_ERROR
1718
from DIRAC.Core.Utilities.List import randomize, fromChar
1819
from DIRAC.Core.Utilities.JEncode import strToIntDict
1920
from DIRAC.Core.Utilities.DEncode import ignoreEncodeWarning
21+
from DIRAC.Core.Utilities.ObjectLoader import ObjectLoader
22+
from DIRAC.Core.Utilities.ReturnValues import returnValueOrRaise
2023
from DIRAC.ConfigurationSystem.Client import PathFinder
2124
from DIRAC.Core.Base.Client import Client, createClient
2225
from DIRAC.RequestManagementSystem.Client.Request import Request
2326
from DIRAC.RequestManagementSystem.private.RequestValidator import RequestValidator
2427
from DIRAC.WorkloadManagementSystem.Client import JobStatus
2528
from DIRAC.WorkloadManagementSystem.Client import JobMinorStatus
26-
from DIRAC.WorkloadManagementSystem.Client.JobStateUpdateClient import JobStateUpdateClient
2729
from DIRAC.WorkloadManagementSystem.Client.JobMonitoringClient import JobMonitoringClient
30+
from DIRAC.WorkloadManagementSystem.Client.JobStateUpdateClient import JobStateUpdateClient
31+
from DIRAC.WorkloadManagementSystem.Utilities.JobStatusUtility import JobStatusUtility
2832

2933

3034
@createClient("RequestManagement/ReqManager")
@@ -309,8 +313,7 @@ def finalizeRequest(self, requestID, jobID, useCertificates=True):
309313
:param str requestID: request id
310314
:param int jobID: job id
311315
"""
312-
313-
stateServer = JobStateUpdateClient(useCertificates=useCertificates)
316+
stateServer = _JobDBInteraction(useCertificates)
314317

315318
# Checking if to update the job status - we should fail here, so it will be re-tried later
316319
# Checking the state, first
@@ -688,3 +691,52 @@ def recoverableRequest(request):
688691
return False
689692
return True
690693
return True
694+
695+
696+
class _JobDBInteraction:
697+
"""Class to handle the JobDB interaction.
698+
699+
This will either connect to the DB directly or use the client depending on
700+
if use_certificates is set or not.
701+
702+
WARNING: This is not intended for use outside of ReqClient!
703+
"""
704+
705+
def __init__(self, useCertificates: bool):
706+
self._useCertificates = useCertificates
707+
708+
def setJobParameter(self, jobID: int, key: str, value: str):
709+
if self._useCertificates:
710+
vo = returnValueOrRaise(self._jobStatusUtility.jobDB.getJobAttribute(jobID, "VO"))
711+
return self._elasticJobParametersDB.setJobParameter(int(jobID), key, value, vo=vo)
712+
else:
713+
return self._client.setJobParameter(jobID, key, value)
714+
715+
def setJobStatus(self, jobID: int, newStatus: str, minorStatus: str, source: str):
716+
if self._useCertificates:
717+
return self._jobStatusUtility.setJobStatus(
718+
int(jobID), status=newStatus, minorStatus=minorStatus, source=source
719+
)
720+
else:
721+
return self._client.setJobStatus(jobID, minorStatus, minorStatus, source)
722+
723+
def setJobApplicationStatus(self, jobID: int, appStatus: str, source: str):
724+
if self._useCertificates:
725+
return self._jobStatusUtility.setJobStatus(int(jobID), appStatus=appStatus, source=source)
726+
else:
727+
return self._client.setJobApplicationStatus(jobID, appStatus, source)
728+
729+
@cached_property
730+
def _client(self):
731+
return JobStateUpdateClient(useCertificates=False)
732+
733+
@cached_property
734+
def _jobStatusUtility(self):
735+
return JobStatusUtility()
736+
737+
@cached_property
738+
def _elasticJobParametersDB(self):
739+
result = ObjectLoader().loadObject("WorkloadManagementSystem.DB.JobParametersDB", "JobParametersDB")
740+
if not result["OK"]:
741+
return result
742+
return result["Value"]()

src/DIRAC/TransformationSystem/Utilities/TransformationInfo.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from DIRAC.DataManagementSystem.Client.DataManager import DataManager
99
from DIRAC.TransformationSystem.Utilities.JobInfo import JobInfo
1010
from DIRAC.WorkloadManagementSystem.Client import JobStatus
11-
from DIRAC.WorkloadManagementSystem.Client.JobStateUpdateClient import JobStateUpdateClient
11+
from DIRAC.WorkloadManagementSystem.Utilities.JobStatusUtility import JobStatusUtility
1212

1313

1414
class TransformationInfo:
@@ -26,7 +26,7 @@ def __init__(self, transformationID, transInfoDict, enabled, tClient, fcClient,
2626
self.transType = transInfoDict["Type"]
2727
self.author = transInfoDict["Author"]
2828
self.authorGroup = transInfoDict["AuthorGroup"]
29-
self.jobStateClient = JobStateUpdateClient()
29+
self.jobStatusUtility = JobStatusUtility()
3030

3131
def checkTasksStatus(self):
3232
"""Check the status for the task of given transformation and taskID"""
@@ -97,7 +97,9 @@ def __updateJobStatus(self, jobID, status, minorstatus=""):
9797
"""Update the job status."""
9898
if self.enabled:
9999
source = "DataRecoveryAgent"
100-
result = self.jobStateClient.setJobStatus(jobID, status, minorstatus, source, None, True)
100+
result = self.jobStatusUtility.setJobStatus(
101+
int(jobID), status=status, minorStatus=minorstatus, source=source, dateTime=None, force=True
102+
)
101103
else:
102104
return S_OK("DisabledMode")
103105
if not result["OK"]:

src/DIRAC/TransformationSystem/test/Test_TransformationInfo.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ def tiFixture():
5353
tMock.setFileStatusForTransformation = Mock(name="setFileStat")
5454
fcMock = Mock(name="fcMock", spec=DIRAC.Resources.Catalog.FileCatalogClient.FileCatalogClient)
5555
jmMock = Mock(name="jobMonMock", spec=DIRAC.WorkloadManagementSystem.Client.JobMonitoringClient.JobMonitoringClient)
56-
jsucMock = Mock(name="jsuc", spec=DIRAC.WorkloadManagementSystem.Client.JobStateUpdateClient.JobStateUpdateClient)
56+
jsucMock = Mock(name="jsuc", spec=DIRAC.WorkloadManagementSystem.Utilities.JobStatusUtility.JobStatusUtility)
5757
transInfoDict = dict(
5858
TransformationID=1234,
5959
TransformationName="TestProd12",
@@ -66,7 +66,7 @@ def tiFixture():
6666
transformationID=1234, transInfoDict=transInfoDict, enabled=False, tClient=tMock, fcClient=fcMock, jobMon=jmMock
6767
)
6868
tri.log = Mock(name="LogMock")
69-
tri.jobStateClient = jsucMock
69+
tri.jobStatusUtility = jsucMock
7070
return tri
7171

7272

0 commit comments

Comments
 (0)