Subject: Re: bug#21061: coreutils-8.24 - Partially reproducible failures of tests/misc/timeout-parameters.sh

From: Pádraig Brady <[email-masked]>
Date: Sat, 18 Jul 2015 12:10:43 +0100

On 18/07/15 04:09, Peter Bray wrote:
> On 17/07/15 06:56 PM, Pádraig Brady wrote:
>> while true; do time gtimeout 0.1 sleep inf; test $? != 124 && break; done
> 
> Run this code on S10U8/32 for almost 12 hours without it stopping 
> itself. An almost 10 hours on S10U11/32 with the same result (not 
> stopping itself).

Cool. That suggests it's a kernel issue with large timeout values.

> 
> Made the requested change to src/timeout.c
> 
> Backup  : src/timeout.c.orig
> Editted : src/timeout.c
> 
> Command : gdiff
> 
> 139c139
> <   if (timer_create (CLOCK_REALTIME, NULL, &timerid) == 0)
> ---
>  >   if (timer_create (CLOCK_MONOTONIC, NULL, &timerid) == 0)
> 
> Run as an unprivileged user, gives the following error summary:
> 
> % egrep '(FAIL|ERROR) ' tests/test-suite.log | sed -e 's/FAIL /FAIL  /'
> FAIL  tests/misc/tee.sh (exit status: 1)
> FAIL  tests/misc/timeout-blocked.pl (exit status: 1)
> FAIL  tests/tail-2/wait.sh (exit status: 1)
> FAIL  tests/tail-2/retry.sh (exit status: 1)
> FAIL  tests/tail-2/symlink.sh (exit status: 1)
> FAIL  tests/ls/infloop.sh (exit status: 1)
> FAIL  tests/tail-2/follow-name.sh (exit status: 1)
> FAIL  tests/tail-2/follow-stdin.sh (exit status: 1)

That's a strange restriction.
Linux doesn't have that at least.

> 
> On Solaris 10 Update 8 with Solaris 10 Update 11 and Solaris 11.2 have 
> the additional tmpfs build problems mentioned in BUG-21062
> 
> With the following executive summary:
> 
> % grep "timer_create: Not owner" ./tests/test-suite.log | sort | uniq -c
>     1 + timeout: warning: timer_create: Not owner
>     7 +timeout: warning: timer_create: Not owner
>    29 timeout: warning: timer_create: Not owner
> 
> When run as "root" on Solaris 10 Update 8, the attached 
> "test-suite.log-monotonic-root" shows that two tests FAIL:
> 
> % egrep '(FAIL|ERROR) ' test-suite.log-*-root | sed -e 's/FAIL /FAIL  /'
> FAIL  tests/misc/tee.sh (exit status: 1)
> FAIL  tests/misc/timeout-parameters.sh (exit status: 1)
> 
> With the following section of the attached log, showing a sequence of 
> failures (exit status = 124) on the root execution of the checks:
> 
> +++ date +%s
> ++ expr 2147483647 - 1437184440 + 100
> + KERNEL_OVERFLOW_LIMIT=710299307
> + timeout 710299307 sleep 0
> + test 0 '!=' 124
> + timeout 4294967296 sleep 0
> + test 124 = 0
> + fail=1
> ++ expr 4294967295 / 86400 + 1
> + timeout 49711d sleep 0
> + test 124 = 0
> + fail=1
> + timeout 999999999999999999999999999999999999999999999999999999999999d 
> sleep 0
> + test 124 = 0
> + fail=1
> + timeout 2.34e+5d sleep 0
> + test 124 = 0
> + fail=1
> + timeout 2.34 sleep 0
> + test 0 = 0
> + timeout .999999999 sleep 0
> + timeout --signal=invalid 1 sleep 0
> timeout: invalid: invalid signal
> Try 'timeout --help' for more information.
> 
> On Solaris 10 Update 11 as root, attached as 
> "test-suite.log-monotonic-root-s10u11" shows a more promising result but 
> still failure:
> 
> +++ date +%s
> ++ expr 2147483647 - 1437187249 + 100
> + KERNEL_OVERFLOW_LIMIT=710296498

Note we already check for similar 32 bit Linux/HPPA kernel issues
in this test. If we found a maximal value that was problematic
for solaris and ran the gating test in a loop 10 times say.
The non determinism of this is awkward though.

> The requirement for "root" privileges to use MONOTONIC is a non-starter 
> in my books as the utility can not lower privileges for the command it 
> runs - I hope you would agree. It seems that the tests fail even with 
> the CLOCK_MONOTONIC option.

+!

> I hope I am provided the requested / required information this time :-)

Yes thanks for the extensive testing.

Pádraig.