@@ -87,6 +87,7 @@ class AdaptiveCore:
87
87
plan : set [WorkerState ]
88
88
requested : set [WorkerState ]
89
89
observed : set [WorkerState ]
90
+ observed_name_mapped : dict [str , str ]
90
91
close_counts : defaultdict [WorkerState , int ]
91
92
_adapting : bool
92
93
log : deque [tuple [float , dict ]]
@@ -130,6 +131,7 @@ async def _adapt():
130
131
self .plan = set ()
131
132
self .requested = set ()
132
133
self .observed = set ()
134
+ self .observed_name_mapped = {}
133
135
except Exception :
134
136
pass
135
137
@@ -181,7 +183,7 @@ async def recommendations(self, target: int) -> dict:
181
183
"""
182
184
plan = self .plan
183
185
requested = self .requested
184
- observed = self .observed
186
+ observed = self .observed_name_mapped
185
187
186
188
if target == len (plan ):
187
189
self .close_counts .clear ()
@@ -192,14 +194,16 @@ async def recommendations(self, target: int) -> dict:
192
194
return {"status" : "up" , "n" : target }
193
195
194
196
# target < len(plan)
195
- not_yet_arrived = requested - observed
197
+ not_yet_arrived = requested - observed . keys ()
196
198
to_close = set ()
197
199
if not_yet_arrived :
198
200
to_close .update (toolz .take (len (plan ) - target , not_yet_arrived ))
199
201
200
202
if target < len (plan ) - len (to_close ):
201
203
L = await self .workers_to_close (target = target )
202
- to_close .update (L )
204
+ to_close .update (
205
+ [key for key , value in observed .items () for name in L if value == name ]
206
+ )
203
207
204
208
firmly_close = set ()
205
209
for w in to_close :
0 commit comments