git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] test-lib: make '--stress' more bisect-friendly

From
SZEDER Gábor <szeder.dev@gmail.com>
Date
Feb 8, 2019, 18:23 UTC
Message-ID
<20190208182319.GY10587@szeder.dev>
In-Reply-To
<20190208164732.GA23461@sigill.intra.peff.net>
On Fri, Feb 08, 2019 at 11:47:33AM -0500, Jeff King wrote:
Show 21 quoted lines
> On Fri, Feb 08, 2019 at 12:50:45PM +0100, SZEDER Gábor wrote:
> 
> >   - Make it exit with failure if a failure is found.
> > 
> >   - Add the '--stress-limit=<N>' option to repeat the test script
> >     at most N times in each of the parallel jobs, and exit with
> >     success when the limit is reached.
> > [...]
> > 
> > This is a case when an external stress script works better, as it can
> > easily check commits in the past...  if someone has such a script,
> > that is.
> 
> Heh, I literally just implemented this kind of max-count in my own
> "stress" script[1] to handle this recent t0025 testing. So certainly I
> think it is a good idea.
> 
> Picking an <N> is tough. Too low and you get a false negative, too high
> and you can wait forever, especially if the script is long. But I don't
> think there's any real way to auto-scale it, except by seeing a few of
> the failing cases and watching how long they take.

So far I've chosen <N> like this: run the test script with --stress 3-5 times to trigger the failure, take the highest repetition count that was necessary for the failure, multiply it by 4-6 to get a round number, and that's a good ballpark for <N>. And once bisect came up with the suspect commit, I double checked it by letting the test script run with --stress on its parent commit for at least 5-10x <N> repetitions.

Anyway, I doubt that auto-scaling <N> is worth the effort.
Show 22 quoted lines
> >  t/README      |  5 +++++
> >  t/test-lib.sh | 18 ++++++++++++++++--
> >  2 files changed, 21 insertions(+), 2 deletions(-)
> 
> Patch looks good. A few observations:
> 
> > @@ -237,8 +248,10 @@ then
> >  				exit 1
> >  			' TERM INT
> >  
> > -			cnt=0
> > -			while ! test -e "$stressfail"
> > +			cnt=1
> > +			while ! test -e "$stressfail" &&
> > +			      { test -z "$stress_limit" ||
> > +				test $cnt -le $stress_limit ; }
> >  			do
> >  				$TEST_SHELL_PATH "$0" "$@" >"$TEST_RESULTS_BASE.stress-$job_nr.out" 2>&1 &
> >  				test_pid=$!
> 
> You switch to 1-indexing the counts here. I think that makes sense,
> since otherwise --stress-limit=300 would end at "1.299", etc.
Yeah, that's exactly why I did it.
Show 12 quoted lines
> 
> > @@ -261,6 +274,7 @@ then
> >  
> >  	if test -f "$stressfail"
> >  	then
> > +		stress_exit=1
> >  		echo "Log(s) of failed test run(s):"
> >  		for failed_job_nr in $(sort -n "$stressfail")
> >  		do
> 
> I think I'd argue that this missing stress_exit is a bug in the original
> script,
Well, yes, indeed.

Though being able to trigger an elusive test failure is a success in my book ;)

Show 5 quoted lines
> and somewhat orthogonal to the limit counter. But I don't think
> it's worth the trouble to split it out (and certainly the theme of "now
> you can run this via bisect" unifies the two changes).
> 
> -Peff
Previous: Jeff KingNext: Jeff King
Message 6 of 13 in “test-lib: make '--stress' more bisect-friendly”
  1. test-lib: make '--stress' more bisect-friendlySZEDER Gábor, Feb 8, 2019
  2. Jeff KingFeb 8, 2019
  3. Jeff KingFeb 8, 2019
  4. SZEDER GáborFeb 8, 2019
  5. Jeff KingFeb 8, 2019
  6. SZEDER GáborFeb 8, 2019
  7. Jeff KingFeb 8, 2019
  8. test-lib: fix non-portable pattern bracket expressionsSZEDER Gábor, Feb 11, 2019
  9. Junio C HamanoFeb 11, 2019
  10. Jeff KingFeb 11, 2019
  11. SZEDER GáborFeb 12, 2019
  12. Jeff KingFeb 12, 2019
  13. Carlo ArenasFeb 12, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.