loadscope: forget a dead worker's collection so a still-collecting worker isn't mistaken for done - #1364
Conversation
|
Is this related to / dup of #1363 ? |
|
No — different bug, different line, and they can both be wrong at once. Same file, which is why they look alike. #1363 / #1313 is about This PR / #1362 is about def collection_is_completed(self) -> bool:
return len(self.registered_collections) >= self.numnodescounts entries rather than live workers, the stale entry makes the collection look complete while a later worker is still collecting. The two diffs do not touch the same function — #1363 edits Happy to rebase and re-run if that helps. |
Fixes #1362.
Problem
LoadScopeScheduling.remove_node()pops the dead worker fromassigned_workbut never removes its entry fromregistered_collections. Sincecollection_is_completedislen(registered_collections) >= numnodes, the stale entry keeps the collection looking "complete" while a later worker is still collecting.schedule()then runs and_assign_work_unit()raisesKeyErrorindexingregistered_collectionsfor the worker that never registered — crashing the run withINTERNALERROR. This affects both--dist=loadscopeand--dist=loadfile(the latter subclassesLoadScopeScheduling).Fix
Drop the node from
registered_collectionsinremove_node(), mirroring theassigned_work.pop(node)already there. A replacement worker then re-registers normally, andcollection_is_completedcorrectly waits for every live worker.This is safe for the shutdown path too: normal
worker_workerfinishedremovals only happen aftertriggershutdown, and on a crash the replacement worker re-registers its collection.Test
Added
TestLoadScopeScheduling::test_remove_node_forgets_dead_worker_collection, which reproduces the scenario withMockNodes (3 expected workers; one dies mid-collection while another is still collecting). It fails onmain(registered_collectionsstill holds the dead node,collection_is_completedflips true early) and passes with the fix. Fulltesting/test_dsession.pyis green;ruff check/formatclean. Addedchangelog/1362.bugfix.rst.