lsst-ctrl-execute 29.0.0rc1__py3-none-any.whl → 29.2025.1000__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -30,7 +30,9 @@ from datetime import datetime
30
30
  from string import Template
31
31
 
32
32
  from lsst.ctrl.execute.allocationConfig import AllocationConfig
33
+ from lsst.ctrl.execute.condorConfig import CondorConfig
33
34
  from lsst.ctrl.execute.condorInfoConfig import CondorInfoConfig
35
+ from lsst.ctrl.execute.findPackageFile import find_package_file
34
36
  from lsst.ctrl.execute.templateWriter import TemplateWriter
35
37
  from lsst.resources import ResourcePath, ResourcePathExpression
36
38
 
@@ -77,6 +79,10 @@ class Allocator:
77
79
 
78
80
  self.platform = platform
79
81
 
82
+ execConfigName = find_package_file("execConfig.py", platform=platform)
83
+ execConfig = CondorConfig()
84
+ execConfig.loadFromStream(execConfigName.read())
85
+
80
86
  # Look up the user's name and home and scratch directory in the
81
87
  # $HOME/.lsst/condor-info.py file
82
88
  user_name = None
@@ -108,7 +114,10 @@ class Allocator:
108
114
  self.commandLineDefaults["NODE_COUNT"] = self.opts.nodeCount
109
115
  self.commandLineDefaults["COLLECTOR"] = self.opts.collector
110
116
  self.commandLineDefaults["CPORT"] = self.opts.collectorport
111
- self.commandLineDefaults["CPUS"] = self.opts.cpus
117
+ if self.opts.exclusive:
118
+ self.commandLineDefaults["CPUS"] = execConfig.platform.peakcpus
119
+ else:
120
+ self.commandLineDefaults["CPUS"] = self.opts.cpus
112
121
  self.commandLineDefaults["WALL_CLOCK"] = self.opts.maximumWallClock
113
122
  self.commandLineDefaults["ACCOUNT"] = self.opts.account
114
123
  self.commandLineDefaults["MEMPERCORE"] = 4096
@@ -346,7 +355,11 @@ class Allocator:
346
355
  """Size of standard glideins for allocateNodes auto
347
356
  @return the value of autoCPUs
348
357
  """
349
- return self.getParameter("AUTOCPUS")
358
+ if self.getParameter("EXCLUSIVE"):
359
+ peakcpus = self.configuration.platform.peakcpus
360
+ return peakcpus
361
+ else:
362
+ return self.getParameter("AUTOCPUS")
350
363
 
351
364
  def getWallClock(self):
352
365
  """Accessor for WALL_CLOCK
@@ -366,6 +379,18 @@ class Allocator:
366
379
  """
367
380
  return self.getParameter("RESERVATION")
368
381
 
382
+ def getExclusive(self):
383
+ """Accessor for EXCLUSIVE
384
+ @return the value of EXCLUSIVE
385
+ """
386
+ return self.getParameter("EXCLUSIVE")
387
+
388
+ def getExcluser(self):
389
+ """Accessor for EXCLUSER
390
+ @return the value of EXCLUSER
391
+ """
392
+ return self.getParameter("EXCLUSER")
393
+
369
394
  def getParameter(self, value):
370
395
  """Accessor for generic value
371
396
  @return None if value is not set. Otherwise, use the command line
@@ -178,6 +178,23 @@ class AllocatorParser:
178
178
  dest="packnodes",
179
179
  help="encourage nodes to pack jobs rather than spread",
180
180
  )
181
+ parser.add_argument(
182
+ "--exclusive",
183
+ action="store_true",
184
+ dest="exclusive",
185
+ default=None,
186
+ help="glidein will be an exclusive batch job; the glidein will be "
187
+ "the only job on the node, and have all available cores, memory."
188
+ "Settings for the number of cores -c are ignored, overridden.",
189
+ )
190
+ parser.add_argument(
191
+ "--exclusive-user",
192
+ action="store_true",
193
+ dest="exclusiveUser",
194
+ default=None,
195
+ help="glidein will be an exclusive to the user batch job; only "
196
+ " other jobs of the same user will share the node with the glidein",
197
+ )
181
198
  parser.add_argument("-v", "--verbose", action="store_true", dest="verbose", help="verbose")
182
199
  parser.add_argument(
183
200
  "-r",
@@ -40,6 +40,7 @@ class PlatformConfig(pexConfig.Config):
40
40
  eupsPath = pexConfig.Field(doc="location of remote EUPS stack", dtype=str, default=None)
41
41
  nodeSetRequired = pexConfig.Field(doc="is the nodeset required", dtype=bool, default=False)
42
42
  scheduler = pexConfig.Field(doc="scheduler type", dtype=str, default=None)
43
+ peakcpus = pexConfig.Field(doc="peakcpus", dtype=int, default=None)
43
44
  manager = pexConfig.Field(doc="workflow manager", dtype=str, default=None)
44
45
  setup_using = pexConfig.Field(doc="environment setup type", dtype=str, default=None)
45
46
  manager_software_home = pexConfig.Field(
@@ -214,6 +214,16 @@ class SlurmPlugin(Allocator):
214
214
  else:
215
215
  self.defaults["RESERVATION"] = ""
216
216
 
217
+ if self.opts.exclusive is not None:
218
+ self.defaults["EXCLUSIVE"] = "#SBATCH --exclusive"
219
+ else:
220
+ self.defaults["EXCLUSIVE"] = ""
221
+
222
+ if self.opts.exclusiveUser is not None:
223
+ self.defaults["EXCLUSER"] = "#SBATCH --exclusive=user"
224
+ else:
225
+ self.defaults["EXCLUSER"] = ""
226
+
217
227
  if self.opts.qos:
218
228
  self.defaults["QOS"] = f"#SBATCH --qos {self.opts.qos}"
219
229
  else:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lsst-ctrl-execute
3
- Version: 29.0.0rc1
3
+ Version: 29.2025.1000
4
4
  Summary: Utilities for executing and managing workloads.
5
5
  Project-URL: Homepage, https://github.com/lsst/ctrl_execute
6
6
  Author-email: Rubin Observatory Data Management <dm-admin@lists.lsst.org>
@@ -2,9 +2,9 @@ lsst/__init__.py,sha256=_2bZAHuDVAx7MM7KA7pt3DYp641NY4RzSoRAwesWKfU,67
2
2
  lsst/ctrl/__init__.py,sha256=_2bZAHuDVAx7MM7KA7pt3DYp641NY4RzSoRAwesWKfU,67
3
3
  lsst/ctrl/execute/__init__.py,sha256=3tOhxyhnHbwyLLGKmL13A_TGqKjNErHjJybplX9mPzw,1019
4
4
  lsst/ctrl/execute/allocationConfig.py,sha256=TxC6pPIsR1GBfGIU8_R4dm4OCieIdZDBFOYLak1ItAc,2369
5
- lsst/ctrl/execute/allocator.py,sha256=Dyt3kRql1IU3R7IAV80TCqToWP0NBr8PsifCU3vNaG0,16359
6
- lsst/ctrl/execute/allocatorParser.py,sha256=SAIYCZDm1emKp46uAORKsun_x0Ga_obDjbutuIQMKnM,6700
7
- lsst/ctrl/execute/condorConfig.py,sha256=dDPOnAHv2ZQbU8fBlog9oiiEPRTUydjFlOHLFS9VV1w,2552
5
+ lsst/ctrl/execute/allocator.py,sha256=zr7XaBVR0jswNgVeUe9Jmx9y9-Ntp8vQhZF9SsZI194,17243
6
+ lsst/ctrl/execute/allocatorParser.py,sha256=vSjPPY27pNoS0-uHC91MZ24MU9ed24R2m8hkKghMPY4,7411
7
+ lsst/ctrl/execute/condorConfig.py,sha256=w-KV9ulxCnz1o17Jb116TW5d7l8L-5w9RE5BwA6kULY,2624
8
8
  lsst/ctrl/execute/condorInfoConfig.py,sha256=pHNQCAn8J4F789GLuEIUShZEPEbAwO5Fac-jMreM5NA,2045
9
9
  lsst/ctrl/execute/envString.py,sha256=lAi4me41NhEhQl9XvPtvykPJvYeDkibkIv338u14OoY,1608
10
10
  lsst/ctrl/execute/findPackageFile.py,sha256=rADUyy8KEac2sQX-z0cDSBVOvvJkJSd0eTpcNP_kO1Y,3608
@@ -12,13 +12,13 @@ lsst/ctrl/execute/namedClassFactory.py,sha256=UzQ7MLKAkNK0XnmofF4oYz1kADuLbdDdMH
12
12
  lsst/ctrl/execute/pbsPlugin.py,sha256=DMmHvHvMWfzbMBxA_TD1LG0FEaelun_djgoK7vwh9ps,3831
13
13
  lsst/ctrl/execute/qCommand.py,sha256=XaLmJydjbtaS5Edk4yi6re92z6xsQNFPuU7izq_UGNc,2374
14
14
  lsst/ctrl/execute/seqFile.py,sha256=L-FNE5GB10DuSHyYeI6lJvH243_fGYQnQ55TX8rGMYo,1980
15
- lsst/ctrl/execute/slurmPlugin.py,sha256=lVpkesCQPJN1z_CQnTemUqhgDuX4YsSLHTnJ2nbJXHg,19717
15
+ lsst/ctrl/execute/slurmPlugin.py,sha256=U7YhBqW5-vyam7LwHNaRqreCvFXFz227_T_5BV7uXXw,20056
16
16
  lsst/ctrl/execute/templateWriter.py,sha256=koqquE_2-z7sue7H_iHv1cpjbjuIxdTyluLsQB0qTgM,1929
17
17
  lsst/ctrl/execute/libexec/allocateNodes.py,sha256=GCJdWY3j1E3_im3NpO08VK2q_v6AHfEYsuaO20eI8zE,2863
18
18
  lsst/ctrl/execute/libexec/dagIdInfo.py,sha256=U3jfrtkw2lw25QWRlLK4XuL_L29FqNm0D5Fy_F4ZJG4,1834
19
19
  lsst/ctrl/execute/libexec/qdelete.py,sha256=-YD1LnsKiePWXZhImoixx-Obx4GqN21m00MEgHSmnGc,1231
20
20
  lsst/ctrl/execute/libexec/qstatus.py,sha256=ds9JgLWFQ3nXHyXAPhXjdtSuiLvxxm1_YajH6I5xwcc,1572
21
- lsst_ctrl_execute-29.0.0rc1.dist-info/METADATA,sha256=bPtDFXksXlhFNEstHJbjTb03tjtOkE4cixyP0j63QYo,854
22
- lsst_ctrl_execute-29.0.0rc1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
23
- lsst_ctrl_execute-29.0.0rc1.dist-info/entry_points.txt,sha256=pNyRrmyX0WVZfYRSfmuhm1vxOqk2np_7SQWxQ5DgB1A,242
24
- lsst_ctrl_execute-29.0.0rc1.dist-info/RECORD,,
21
+ lsst_ctrl_execute-29.2025.1000.dist-info/METADATA,sha256=LxR68OxP1lc9ZImI5S31Xbw3zBT9QpJL_gWJ7maGQ0Q,857
22
+ lsst_ctrl_execute-29.2025.1000.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
23
+ lsst_ctrl_execute-29.2025.1000.dist-info/entry_points.txt,sha256=pNyRrmyX0WVZfYRSfmuhm1vxOqk2np_7SQWxQ5DgB1A,242
24
+ lsst_ctrl_execute-29.2025.1000.dist-info/RECORD,,