Skip to content

Commit b4c5494

Browse files
committed
fix: do not set a fictional ram limit, use 0 for no-limit
1 parent d813f84 commit b4c5494

File tree

2 files changed

+38
-18
lines changed

2 files changed

+38
-18
lines changed

src/DIRAC/Resources/Computing/PoolComputingElement.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,8 @@ def __init__(self, ceUniqueID):
6464
self.pPool = None
6565
self.taskID = 0
6666
self.processorsPerTask = {}
67-
self.ram = (
68-
1024
69-
* 1024 # Available RAM for the node, in MB. The default value is an arbitrary large value in case of no limit
70-
)
7167
self.ramPerTask = {}
68+
self.ram = 0 # effectively this means "no limits"
7269

7370
# This CE will effectively submit to another "Inner"CE
7471
# (by default to the InProcess CE)
@@ -82,7 +79,7 @@ def _reset(self):
8279

8380
self.processors = int(self.ceParameters.get("NumberOfProcessors", self.processors))
8481
self.ceParameters["MaxTotalJobs"] = self.processors
85-
if self.ceParameters.get("MaxRAM", 0):
82+
if self.ceParameters.get("MaxRAM", 0): # if there's a limit, we set it
8683
self.ram = int(self.ceParameters["MaxRAM"])
8784
# Indicates that the submission is done asynchronously
8885
# The result is not immediately available
@@ -113,6 +110,7 @@ def submitJob(self, executableFile, proxy=None, inputs=None, **kwargs):
113110
return S_OK(taskID)
114111

115112
memoryForJob = self._getMemoryForJobs(kwargs)
113+
116114
if memoryForJob is None:
117115
self.taskResults[self.taskID] = S_ERROR("Not enough memory for the job")
118116
taskID = self.taskID
@@ -201,7 +199,10 @@ def _getMemoryForJobs(self, kwargs):
201199
"""
202200

203201
# # job requirements
204-
requestedMemory = kwargs.get("MinRAM", 0)
202+
requestedMemory = kwargs.get("MinRAM", kwargs.get("MaxRAM", 0))
203+
# if there's no limit, we just let it match the maximum
204+
if not self.ram:
205+
return max(requestedMemory, kwargs.get("MaxRAM", 0))
205206

206207
# # now check what the slot can provide
207208
# Do we have enough memory?
@@ -258,7 +259,10 @@ def getCEStatus(self):
258259
result["AvailableProcessors"] = self.processors - processorsInUse
259260
# dealing with RAM
260261
result["UsedRAM"] = sum(self.ramPerTask.values())
261-
result["AvailableRAM"] = self.ram - sum(self.ramPerTask.values())
262+
if self.ram:
263+
result["AvailableRAM"] = self.ram - sum(self.ramPerTask.values())
264+
else:
265+
result["AvailableRAM"] = 0
262266

263267
return result
264268

src/DIRAC/Resources/Computing/test/Test_PoolComputingElement.py

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -200,13 +200,20 @@ def test_executeJob_wholeNode4(createAndDelete):
200200

201201

202202
@pytest.mark.slow
203-
def test_executeJob_wholeNode8(createAndDelete):
203+
@pytest.mark.parametrize(
204+
"ce_parameters",
205+
[
206+
({"NumberOfProcessors": 8}),
207+
({"NumberOfProcessors": 8, "MaxRAM": 32000}),
208+
({"WholeNode": True, "NumberOfProcessors": 8, "MaxRAM": 32000}),
209+
],
210+
)
211+
def test_executeJob_wholeNode8(createAndDelete, ce_parameters):
204212
time.sleep(0.5)
205213
taskIDs = {}
206214

207-
ceParameters = {"WholeNode": True, "NumberOfProcessors": 8, "MaxRAM": 32000}
208215
ce = PoolComputingElement("TestPoolCE")
209-
ce.setParameters(ceParameters)
216+
ce.setParameters(ce_parameters)
210217

211218
jobParams = {"mpTag": True, "numberOfProcessors": 2, "maxNumberOfProcessors": 2}
212219
result = ce.submitJob("testPoolCEJob_2.py", None, **jobParams)
@@ -217,6 +224,8 @@ def test_executeJob_wholeNode8(createAndDelete):
217224

218225
result = ce.getCEStatus()
219226
assert result["UsedProcessors"] == 2
227+
assert result["UsedRAM"] == 0
228+
assert result["AvailableRAM"] == ce_parameters.get("MaxRAM", 0)
220229

221230
jobParams = {"mpTag": True, "numberOfProcessors": 1, "maxNumberOfProcessors": 3}
222231
result = ce.submitJob("testPoolCEJob_3.py", None, **jobParams)
@@ -228,7 +237,7 @@ def test_executeJob_wholeNode8(createAndDelete):
228237
result = ce.getCEStatus()
229238
assert result["UsedProcessors"] == 5
230239
assert result["UsedRAM"] == 0
231-
assert result["AvailableRAM"] == 32000
240+
assert result["AvailableRAM"] == ce_parameters.get("MaxRAM", 0)
232241

233242
jobParams = {"numberOfProcessors": 2, "MinRAM": 4000, "MaxRAM": 8000} # This is same as asking for SP
234243
result = ce.submitJob("testPoolCEJob_4.py", None, **jobParams)
@@ -240,7 +249,9 @@ def test_executeJob_wholeNode8(createAndDelete):
240249
result = ce.getCEStatus()
241250
assert result["UsedProcessors"] == 6
242251
assert result["UsedRAM"] == 8000
243-
assert result["AvailableRAM"] == 24000
252+
assert result["AvailableRAM"] == (
253+
ce_parameters.get("MaxRAM") - result["UsedRAM"] if ce_parameters.get("MaxRAM") else 0
254+
)
244255

245256
jobParams = {"MinRAM": 8000, "MaxRAM": 8000} # This is same as asking for SP
246257
result = ce.submitJob("testPoolCEJob_5.py", None, **jobParams)
@@ -252,19 +263,24 @@ def test_executeJob_wholeNode8(createAndDelete):
252263
result = ce.getCEStatus()
253264
assert result["UsedProcessors"] == 7
254265
assert result["UsedRAM"] == 16000
255-
assert result["AvailableRAM"] == 16000
266+
assert result["AvailableRAM"] == (
267+
ce_parameters.get("MaxRAM") - result["UsedRAM"] if ce_parameters.get("MaxRAM") else 0
268+
)
256269

257-
jobParams = {"MaxRAM": 24000} # This will fail
270+
jobParams = {"MaxRAM": 24000} # This will fail for the case when the ce have set a RAM
258271
result = ce.submitJob("testPoolCEJob_6.py", None, **jobParams)
259272
assert result["OK"] is True
260273
taskID = result["Value"]
261274
assert taskID == 4
262-
taskIDs[taskID] = False
275+
if ce_parameters.get("MaxRAM"):
276+
assert ce.taskResults[taskID]["OK"] is False
263277

264278
result = ce.getCEStatus()
265-
assert result["UsedProcessors"] == 7
266-
assert result["UsedRAM"] == 16000
267-
assert result["AvailableRAM"] == 16000
279+
assert result["UsedProcessors"] == 7 if ce_parameters.get("MaxRAM") else 8
280+
assert result["UsedRAM"] == 16000 if ce_parameters.get("MaxRAM") else 40000
281+
assert result["AvailableRAM"] == (
282+
ce_parameters.get("MaxRAM") - result["UsedRAM"] if ce_parameters.get("MaxRAM") else 0
283+
)
268284

269285
# now trying again would fail
270286
jobParams = {"mpTag": True, "numberOfProcessors": 3}

0 commit comments

Comments
 (0)