On 16 Nov 2015, at 09:36, Luke Diamand <luke@xxxxxxxxxxx> wrote: > On 15/11/15 13:08, larsxschneider@xxxxxxxxx wrote: >> From: Lars Schneider <larsxschneider@xxxxxxxxx> >> >> In rare cases kill/cleanup operations in tests fail. Retry these >> operations with a timeout to make the test less flaky. > > Should there be a sleep in that retry_until_success loop so that it doesn't spin sending signals to p4d? Agreed. I will add a sleep in the next roll! > > Do we need to worry about the time offset being updated (e.g. NTP) while this is running? Interesting question! I would consider this an edge case but I can see how it could happen. Do you see a way to handle that in an easy way? Thanks, Lars > >> >> Signed-off-by: Lars Schneider <larsxschneider@xxxxxxxxx> >> --- >> t/lib-git-p4.sh | 31 +++++++++++++++++++++++-------- >> 1 file changed, 23 insertions(+), 8 deletions(-) >> >> diff --git a/t/lib-git-p4.sh b/t/lib-git-p4.sh >> index 7548225..8d6b48f 100644 >> --- a/t/lib-git-p4.sh >> +++ b/t/lib-git-p4.sh >> @@ -6,6 +6,10 @@ >> # a subdirectory called "$git" >> TEST_NO_CREATE_REPO=NoThanks >> >> +# Some operations require multiple attempts to be successful. Define >> +# here the maximal retry timeout in seconds. >> +RETRY_TIMEOUT=60 >> + >> . ./test-lib.sh >> >> if ! test_have_prereq PYTHON >> @@ -121,22 +125,33 @@ p4_add_user() { >> EOF >> } >> >> +retry_until_success() { >> + timeout=$(($(date +%s) + $RETRY_TIMEOUT)) >> + until "$@" 2>/dev/null || test $(date +%s) -gt $timeout >> + do : > > sleep here? > >> + done >> +} >> + >> +retry_until_fail() { >> + timeout=$(($(date +%s) + $RETRY_TIMEOUT)) >> + until ! "$@" 2>/dev/null || test $(date +%s) -gt $timeout >> + do : > > sleep here? > >> + done >> +} >> + >> kill_p4d() { >> pid=$(cat "$pidfile") >> - # it had better exist for the first kill >> - kill $pid && >> - for i in 1 2 3 4 5 ; do >> - kill $pid >/dev/null 2>&1 || break >> - sleep 1 >> - done && >> + retry_until_fail kill $pid >> + retry_until_fail kill -9 $pid >> # complain if it would not die >> test_must_fail kill $pid >/dev/null 2>&1 && >> rm -rf "$db" "$cli" "$pidfile" >> } >> >> cleanup_git() { >> - rm -rf "$git" && >> - mkdir "$git" >> + retry_until_success rm -r "$git" >> + test_must_fail test -d "$git" && >> + retry_until_success mkdir "$git" >> } >> >> marshal_dump() { -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html