git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
To: GIT Mailing-list <git@vger.kernel.org>
Cc: srabbelier@gmail.com, Jeff King <peff@peff.net>,
	Jonathan Nieder <jrnieder@gmail.com>,
	Junio C Hamano <gitster@pobox.com>
Subject: t5800-*.sh: Intermittent test failures
Date: Tue, 09 Aug 2011 19:30:12 +0100	[thread overview]
Message-ID: <4E417CB4.50007@ramsay1.demon.co.uk> (raw)


I've noticed some intermittent test failures in t5800-*.sh on Linux
recently. The failures (test #7 onwards) are due to a git-push to a
remote, via the git-remote-test helper, hanging in git-fast-import.

git-bisect fingers the following commit:

    a515ebe9f1ac9bc248c12a291dc008570de505ca is the first bad commit
    commit a515ebe9f1ac9bc248c12a291dc008570de505ca
    Author: Sverre Rabbelier <srabbelier@gmail.com>
    Date:   Sat Jul 16 15:03:40 2011 +0200

        transport-helper: implement marks location as capability

        Now that the gitdir location is exported as an environment variable
        this can be implemented elegantly without requiring any explicit
        flushes nor an ad-hoc exchange of values.

        Signed-off-by: Sverre Rabbelier <srabbelier@gmail.com>
        Acked-by: Jeff King <peff@peff.net>
        Signed-off-by: Junio C Hamano <gitster@pobox.com>

    :100644 100644 1ed7a5651ef5a2320c56856b5a1fe784e178ab23 e9c832bfd3da7db771cc2113
    027d3e590dc51d59 M      git-remote-testgit.py
    :100644 100644 0cfc9ae9059ce121b567406d7941b71cd54b961c 74c3122df1835c45a6b62120
    5fb18b4fc89af366 M      transport-helper.c

which didn't seem too likely at first, but it does reduce the size of the
fast-import stream (by moving the import/export marks filenames to the
command line). This could change the timings enough to cause the problem.

I set various environment variables (eg GIT_TRANSLOOP_DEBUG, GIT_DEBUG_TESTGIT etc)
in order to get some additional clues, in addition to looking at the stackframe
of all of the processes in the hung pipeline, which looks like:

    git(push)->git-remote-test->git(fast-import)->git-fast-import

The git-fast-import is hung in the read() syscall waiting for data which will
never arrive. This is because the git(fast-export) process, started by the above
git(push), executes (producing it's data on stdout) and completes successfully
and exits *before* the above git-fast-import process starts.

I haven't looked to see how the git(fast-export)/git-fast-import processes are
plumbed together, but there seems to be a synchronization problem somewhere ...

Unfortunately, I don't have time at the moment to finish debugging this, so I
was hoping someone who knows the code better than me could fix it up ...
Thanks! :-P

[I've included the stackframes (from the above pipeline) below in case it helps]

ATB,
Ramsay Jones


[git-fast-import]
(gdb) bt
#0  0xffffe410 in __kernel_vsyscall ()
#1  0xb7dd6033 in read () from /lib/tls/i686/cmov/libc.so.6
#2  0xb7d774f8 in _IO_file_read () from /lib/tls/i686/cmov/libc.so.6
#3  0xb7d788c0 in _IO_file_underflow () from /lib/tls/i686/cmov/libc.so.6
#4  0xb7d78fbb in _IO_default_uflow () from /lib/tls/i686/cmov/libc.so.6
#5  0xb7d7a31d in __uflow () from /lib/tls/i686/cmov/libc.so.6
#6  0xb7d742a0 in getc () from /lib/tls/i686/cmov/libc.so.6
#7  0x0807e203 in strbuf_getwholeline (sb=0x80e348c, fp=0xb7e53420, term=10)
    at strbuf.c:361
#8  0x0807e262 in strbuf_getline (sb=0x80e348c, fp=0xb7e53420, term=10)
    at strbuf.c:376
#9  0x0804f681 in read_next_command () at fast-import.c:1853
#10 0x0805368b in main (argc=4, argv=0xbf8eac74) at fast-import.c:3295
(gdb)

[git(fast-import)]
(gdb) bt
#0  0xffffe410 in __kernel_vsyscall ()
#1  0xb7dcf0b3 in __waitpid_nocancel () from /lib/tls/i686/cmov/libpthread.so.0
#2  0x08129706 in wait_or_whine (pid=6200, argv0=0x81e4070 "git-fast-import", 
    silent_exec_failure=1) at run-command.c:105
#3  0x0812a08f in finish_command (cmd=0xbfe42874) at run-command.c:415
#4  0x0812a0be in run_command (cmd=0xbfe42874) at run-command.c:423
#5  0x0812a1bf in run_command_v_opt (argv=0xbfe429dc, opt=8)
    at run-command.c:443
#6  0x0804c12d in execv_dashed_external (argv=0xbfe429dc) at git.c:489
#7  0x0804c192 in run_argv (argcp=0xbfe42950, argv=0xbfe42954) at git.c:507
#8  0x0804c321 in main (argc=4, argv=0xbfe429dc) at git.c:577
(gdb)

[git-remote-test]
(gdb) bt
#0  0xffffe410 in __kernel_vsyscall ()
#1  0xb7f230b3 in __waitpid_nocancel () from /lib/tls/i686/cmov/libpthread.so.0
#2  0x080f8fc0 in posix_waitpid (self=0x0, args=0xb7d615ec)
    at ../Modules/posixmodule.c:5636
... [snipped as uninteresting!]
(gdb) 

[git(push)]
(gdb) bt
#0  0xffffe410 in __kernel_vsyscall ()
#1  0xb7dde033 in read () from /lib/tls/i686/cmov/libc.so.6
#2  0xb7d7f4f8 in _IO_file_read () from /lib/tls/i686/cmov/libc.so.6
#3  0xb7d808c0 in _IO_file_underflow () from /lib/tls/i686/cmov/libc.so.6
#4  0xb7d80fbb in _IO_default_uflow () from /lib/tls/i686/cmov/libc.so.6
#5  0xb7d8231d in __uflow () from /lib/tls/i686/cmov/libc.so.6
#6  0xb7d7c2a0 in getc () from /lib/tls/i686/cmov/libc.so.6
#7  0x08138d6b in strbuf_getwholeline (sb=0xbfb662c8, fp=0x81e4760, term=10)
    at strbuf.c:361
#8  0x08138dca in strbuf_getline (sb=0xbfb662c8, fp=0x81e4760, term=10)
    at strbuf.c:376
#9  0x0813ffe3 in recvline_fh (helper=0x81e4760, buffer=0xbfb662c8)
    at transport-helper.c:51
#10 0x081400be in recvline (helper=0x81e44a0, buffer=0xbfb662c8)
    at transport-helper.c:64
#11 0x08141a6e in push_update_refs_status (data=0x81e44a0, 
    remote_refs=0x81e48e8) at transport-helper.c:652
#12 0x08141e80 in push_refs_with_export (transport=0x81e4450, 
    remote_refs=0x81e48e8, flags=0) at transport-helper.c:759
#13 0x08141f74 in push_refs (transport=0x81e4450, remote_refs=0x81e48e8, 
    flags=0) at transport-helper.c:783
#14 0x0813f846 in transport_push (transport=0x81e4450, refspec_nr=1, 
    refspec=0x81e43e8, flags=0, nonfastforward=0xbfb6642c) at transport.c:1044
#15 0x080a3bda in push_with_options (transport=0x81e4450, flags=0)
    at builtin/push.c:131
#16 0x080a3ea7 in do_push (repo=0x0, flags=0) at builtin/push.c:209
#17 0x080a4377 in cmd_push (argc=0, argv=0xbfb668c8, prefix=0x0)
    at builtin/push.c:265
#18 0x0804bf3f in run_builtin (p=0x81977b4, argc=1, argv=0xbfb668c8)
    at git.c:302
#19 0x0804c0a5 in handle_internal_command (argc=1, argv=0xbfb668c8)
    at git.c:460
#20 0x0804c185 in run_argv (argcp=0xbfb66840, argv=0xbfb66844) at git.c:504
#21 0x0804c321 in main (argc=1, argv=0xbfb668c8) at git.c:577
(gdb)

             reply	other threads:[~2011-08-09 18:32 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-09 18:30 Ramsay Jones [this message]
2011-08-11 21:39 ` t5800-*.sh: Intermittent test failures Sverre Rabbelier
2011-08-13 20:51   ` Ramsay Jones
2011-09-04 19:06   ` Junio C Hamano
2011-09-08 17:42     ` Ramsay Jones
2011-09-08 18:20       ` Jeff King
2011-09-11 19:14         ` Ramsay Jones
2011-11-01 21:57           ` Alex Riesen
2011-11-01 22:18             ` Junio C Hamano
2011-11-01 23:02               ` Alex Riesen
2011-11-02 23:35                 ` Sverre Rabbelier
2011-11-03  1:30                   ` Junio C Hamano

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

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

  git send-email \
    --in-reply-to=4E417CB4.50007@ramsay1.demon.co.uk \
    --to=ramsay@ramsay1.demon.co.uk \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jrnieder@gmail.com \
    --cc=peff@peff.net \
    --cc=srabbelier@gmail.com \
    /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.
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 NNTP newsgroup(s).