git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: "SZEDER Gábor" <szeder.dev@gmail.com>
To: Git mailing list <git@vger.kernel.org>
Cc: "SZEDER Gábor" <szeder.dev@gmail.com>
Subject: Re: [RFC PATCH 4/4] t/lib-httpd: sort log based on timestamp to avoid occasional failure
Date: Thu, 14 Jun 2018 18:39:39 +0200	[thread overview]
Message-ID: <CAM0VKjkfLiEoTOfkC=jXx5TVmbbVvHRDB6KEPinW6Gb98p0vgA@mail.gmail.com> (raw)
In-Reply-To: <20180614123107.11608-5-szeder.dev@gmail.com>

On Thu, Jun 14, 2018 at 2:31 PM, SZEDER Gábor <szeder.dev@gmail.com> wrote:

> When a test sends a HTTP request, it can continue execution after
> 'git-http-backend' fulfilled that request, but Apache writes the
> corresponding access log entry only after 'git-http-backend' exited.
> Some time inevitably passes between fulfilling the request and writing
> the log entry, and, under unfavourable circumstances, enough time
> might pass for the subsequent request to be sent and fulfilled, and
> then Apache writes access log entries racily.
>
> This effect can be exacerbated by adding a bit of variable delay after
> the request is fulfilled but before 'git-http-backend' exits, e.g.
> like this:
>
>   diff --git a/http-backend.c b/http-backend.c
>   index f3dc218b2..bbf4c125b 100644
>   --- a/http-backend.c
>   +++ b/http-backend.c
>   @@ -709,5 +709,7 @@ int cmd_main(int argc, const char **argv)
>                                            max_request_buffer);
>
>         cmd->imp(&hdr, cmd_arg);
>   +     if (getpid() % 2)
>   +             sleep(1);
>         return 0;
>    }
>
> This delay considerably increases the chances of log entries being
> written out of order, and in turn makes t5561's last test fail almost
> every time.  Alas, it doesn't seem to be enough to trigger a similar
> failure in t5541 and t5551.

A bit of addendum here:

There are basically two "kinds" of requests:

  1. requests asking for regular files, e.g.:

     GET  /smart/repo.git/HEAD HTTP/1.1 200
     GET  /smart/repo.git/info/refs HTTP/1.1 200
     GET  /smart/repo.git/objects/info/packs HTTP/1.1 200

  2. requests asking for 'git-receive-pack' or 'git-upload-pack',
     e.g.:

     GET  /smart/repo.git/info/refs?service=git-receive-pack HTTP/1.1 200
     POST /smart/repo.git/git-receive-pack HTTP/1.1 200 -

This artificial variable delay shuffles only the access log entries
written for the first kind of requests, but doesn't appear to have any
effect on the order of log entries written for the second kind of
requests.

t5561 sends both kinds of requests, so this variable delay is
sufficient to make the test fail most of the time.

t5541 and t5551, however, send only requests of the second kind, so
that's why this variable delay can't trigger a similar failure in
these test scripts.

I haven't investigated any further what else would be necessary to
trigger a failure in t5541 and t5551.

  reply	other threads:[~2018-06-14 16:39 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-14 12:31 [RFC PATCH 0/4] Fix occasional test failures in http tests SZEDER Gábor
2018-06-14 12:31 ` [PATCH 1/4] t5541: avoid empty line when truncating access log SZEDER Gábor
2018-06-14 12:31 ` [PATCH 2/4] t/lib-httpd: add the strip_access_log() helper function SZEDER Gábor
2018-06-14 12:31 ` [PATCH 3/4] t/lib-httpd: add minor and patch version to $HTTPD_VERSION SZEDER Gábor
2018-06-14 12:31 ` [RFC PATCH 4/4] t/lib-httpd: sort log based on timestamp to avoid occasional failure SZEDER Gábor
2018-06-14 16:39   ` SZEDER Gábor [this message]
2018-06-14 17:53   ` Jeff King
2018-06-14 18:27     ` Junio C Hamano
2018-06-15  6:00       ` Jeff King
2018-07-11 12:53     ` SZEDER Gábor
2018-07-11 14:45       ` Jeff King
2018-06-14 17:15 ` [RFC PATCH 0/4] Fix occasional test failures in http tests Junio C Hamano
2018-06-14 17:56 ` Jeff King
2018-07-11 12:56 ` [PATCH v2 0/3] " SZEDER Gábor
2018-07-11 12:56   ` [PATCH v2 1/3] t5541: avoid empty line when truncating access log SZEDER Gábor
2018-07-11 12:56   ` [PATCH v2 2/3] t/lib-httpd: add the strip_access_log() helper function SZEDER Gábor
2018-07-11 12:56   ` [PATCH v2 3/3] t/lib-httpd: avoid occasional failures when checking access.log SZEDER Gábor
2018-07-11 14:57     ` Jeff King
2018-07-11 17:26       ` SZEDER Gábor
2018-07-11 17:35         ` Jeff King
2018-07-11 14:58   ` [PATCH v2 0/3] Fix occasional test failures in http tests Jeff King
2018-07-12 12:22   ` [PATCH v3 " SZEDER Gábor
2018-07-12 12:22     ` [PATCH v3 1/3] t5541: clean up truncating access log SZEDER Gábor
2018-07-12 15:56       ` Jeff King
2018-07-12 12:22     ` [PATCH v3 2/3] t/lib-httpd: add the strip_access_log() helper function SZEDER Gábor
2018-07-12 12:22     ` [PATCH v3 3/3] t/lib-httpd: avoid occasional failures when checking access.log SZEDER Gábor

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAM0VKjkfLiEoTOfkC=jXx5TVmbbVvHRDB6KEPinW6Gb98p0vgA@mail.gmail.com' \
    --to=szeder.dev@gmail.com \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).