Skip to content

Commit 42fdaaa

Browse files
authored
Merge pull request #5865 from grondo/flux-resource-fixups
fix more performance issues in `flux resource`
2 parents 0766987 + d933e82 commit 42fdaaa

File tree

2 files changed

+12
-5
lines changed

2 files changed

+12
-5
lines changed

src/bindings/python/flux/resource/status.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,14 +108,21 @@ def _recalculate(self, include_ranks=None):
108108

109109
# drain_info: ranks, timestamp, reason tuples for all drained resources
110110
self.drain_info = []
111+
self._drain_lookup = {}
111112
for drain_ranks, entry in self.rstatus["drain"].items():
112113
ranks = IDset(drain_ranks)
113114
if include_ranks is not None:
114115
ranks = ranks.intersect(include_ranks)
115-
self.drained += ranks - self.allocated
116-
self.draining += ranks - self.drained
116+
self.drained += ranks
117117
info = DrainInfo(ranks, entry["timestamp"], entry["reason"])
118118
self.drain_info.append(info)
119+
for rank in ranks:
120+
self._drain_lookup[rank] = info
121+
122+
# create the set of draining ranks as the intersection of
123+
# drained and allocated
124+
self.draining = self.drained & self.allocated
125+
self.drained -= self.draining
119126

120127
# available: all ranks not excluded or drained/draining
121128
self.avail = self.all - self.get_idset("exclude", "drained", "draining")
@@ -142,7 +149,7 @@ def get_drain_info(self, rank):
142149
"""
143150
if rank not in self.all:
144151
raise ValueError("invalid rank {rank}")
145-
return next((i for i in self.drain_info if rank in i.ranks), None)
152+
return self._drain_lookup.get(rank)
146153

147154

148155
class ResourceStatusRPC:

src/cmd/flux-resource.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -443,10 +443,10 @@ def propertiesx(self):
443443
def queue(self):
444444
queues = ""
445445
if self.flux_config and "queues" in self.flux_config:
446+
if not self.ranks:
447+
return ""
446448
properties = json.loads(self.get_properties())
447449
for key, value in self.flux_config["queues"].items():
448-
if not self.rlist:
449-
continue
450450
if "requires" not in value or set(value["requires"]).issubset(
451451
set(properties)
452452
):

0 commit comments

Comments
 (0)