Avoid pointless discards during the reuse
and target
phases
#3862
+39
−9
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.
This problem was jointly identified in discussion of #3827 with @tybug and @hgoldstein95. Finding this kind of performance issue without knowing to look for it is a great illustration of the value of observability!
It turns out that we're spuriously aborting many test cases with status=Overrun, due to
ConjectureData.from_buffer()
limiting the max length to the length of the provided bytestring unlessextend=...
is passed. This makes sense in theshrink
phase - any longer buffer cannot be a successful shrink, so we may as well abort early - but not in thereuse
ortarget
phases.reuse
phase is easy to fix: simply add the relevant argument to allow extending buffers replayed from the database - we'll get different behaviour, but get a performance gain (and maybe avoidHealthCheck.filter_too_much
) by finishing this test case rather than retrying in thegenerate
phase.target
phase is a little more complicated, and ... it turns out that by the time I worked out how we'd need to thread state through to the shrinker I had 80% of a fix, so this is now a PR rather than an issue 😅Tests tbd when I have some more time.