Repository navigation
lightspeed survey: copy sys.modules before the extension scan - #10
Merged
Merged
Conversation
Reading a module attribute in the loop can import another module, which raised 'dictionary changed size during iteration' and left image builds with no benchmarks.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Purpose
Benchmark discovery stops with
RuntimeError: dictionary changed size during iterationfor some tasks. The image build then finds 0 benchmarks and the task fails. In the current pandas batch, 5 of 7 failed builds have this error. 2 earlier pandas builds have it too.How it works
_add_extension_depsloops oversys.modules.values()and callsgetattr(mod, "__file__")on each module. A module with a lazy__getattr__can import another module during that call, sosys.moduleschanges while the loop reads it. The fix loops over a copy,list(sys.modules.values()).Changes
asv/contrib/lightspeed/survey.py: loop over a copy ofsys.modules.RuntimeErrorand the survey recorded no benchmarks.test/test_lightspeed_survey.py: a test with a module whose__getattr__adds a module tosys.modules.Verification
Without the fix, the new test fails with the same error as the builds:
Notes
Build logs with the error: pandas-dev/pandas #23019, #23591, #23981, #24204, #24428, #24792, #25665. The task template pins
LSV_REF, so the failed tasks need the new commit in the template before a rebuild.