Web lists-archives.com

Re: Periodic hang during git index-pack




On Wed, 19 Dec 2018 at 23:22, Jeff King <peff@xxxxxxxx> wrote:
>
> On Wed, Dec 19, 2018 at 10:59:30PM +0000, Sitsofe Wheeler wrote:
>
> > While using trying to use git to clone a remote repository git
> > index-pack occasionally goes on to hang:
> > [...]
> > Looking at where it is stuck, git is doing read of a pipe:
> >
> > #0  0x00007fd1b845034e in __libc_read (fd=fd@entry=0,
> > buf=buf@entry=0x55ab81e19d40 <input_buffer>, nbytes=nbytes@entry=4096)
> >     at ../sysdeps/unix/sysv/linux/read.c:27
> > #1  0x000055ab81b51b23 in read (__nbytes=4096, __buf=0x55ab81e19d40
> > <input_buffer>, __fd=0)
> >     at /usr/include/x86_64-linux-gnu/bits/unistd.h:44
>
> Index-pack is reading the pack on stdin, so it's expecting more bytes.
> Those bytes should be coming from the git-clone process, which is
> relaying the bytes from the other side.
>
> Check the backtrace of git-clone to see why it isn't feeding more data
> (but note that it will generally have two threads -- one processing the
> data from the remote, and one wait()ing for index-pack to finish).
>
> My guess, though, is that you'll find that git-clone is simply waiting
> on another pipe: the one from ssh.

Ok here are backtraces from another run (with SSH multiplexing disabled):

(gdb) thread apply all bt

Thread 2 (Thread 0x7faafbf1c700 (LWP 36586)):
#0  0x00007faafc805384 in __libc_read (fd=fd@entry=5,
    buf=buf@entry=0x7faafbf0ddec, nbytes=nbytes@entry=5)
    at ../sysdeps/unix/sysv/linux/read.c:27
#1  0x000055c8ca2f5b23 in read (__nbytes=5, __buf=0x7faafbf0ddec, __fd=5)
    at /usr/include/x86_64-linux-gnu/bits/unistd.h:44
#2  xread (fd=fd@entry=5, buf=buf@entry=0x7faafbf0ddec, len=len@entry=5)
    at wrapper.c:260
#3  0x000055c8ca2f5cdb in read_in_full (fd=5, buf=buf@entry=0x7faafbf0bdf0,
    count=5, count@entry=8193) at wrapper.c:318
#4  0x000055c8ca27222b in get_packet_data (fd=fd@entry=5,
    src_buf=src_buf@entry=0x0, src_size=src_size@entry=0x0,
    dst=dst@entry=0x7faafbf0bdf0, size=size@entry=8193,
    options=options@entry=0) at pkt-line.c:289
#5  0x000055c8ca272ed8 in packet_read_with_status (fd=fd@entry=5,
    src_buffer=src_buffer@entry=0x0, src_len=src_len@entry=0x0,
    buffer=buffer@entry=0x7faafbf0bdf0
"\001\344\305\066JJj\341q@\243\225ժ\350\026M\fkM9:-ƀ\253\206\336\001\275\070\325\372\250\204\232aM\221\213(\320B%\a\275\233\261g\321A\245\n
\247\374\326\b'\v\252\277rA\211\312l\212j\352\177\260\317j\aT\252&t2\256\254\360\002\217V\024\061k\201ڲ;;\017`\361\020:*b\n5\222\036i\272\067}\360,\323\345Y\314ir\311\034b\232F\267\364\016]",
size=size@entry=65520,
    pktlen=pktlen@entry=0x7faafbf0bd94, options=0) at pkt-line.c:344
#6  0x000055c8ca273078 in packet_read (fd=fd@entry=5,
    src_buffer=src_buffer@entry=0x0, src_len=src_len@entry=0x0,
    buffer=buffer@entry=0x7faafbf0bdf0
"\001\344\305\066JJj\341q@\243\225ժ\350\026M\fkM9:-ƀ\253\206\336\001\275\070\325\372\250\204\232aM\221\213(\320B%\a\275\233\261g\321A\245\n
\247\374\326\b'\v\252\277rA\211\312l\212j\352\177\260\317j\aT\252&t2\256\254\360\002\217V\024\061k\201ڲ;;\017`\361\020:*b\n5\222\036i\272\067}\360,\323\345Y\314ir\311\034b\232F\267\364\016]",
size=size@entry=65520,
    options=options@entry=0) at pkt-line.c:364
#7  0x000055c8ca2cbf73 in recv_sideband (
    me=me@entry=0x55c8ca3466ed "fetch-pack", in_stream=5, out=out@entry=6)
    at sideband.c:143
#8  0x000055c8ca22d6cb in sideband_demux (in=<optimised out>, out=6,
    data=<optimised out>) at fetch-pack.c:776
#9  0x000055c8ca2a8458 in run_thread (data=0x7ffda489ef90)
    at run-command.c:1032
#10 0x00007faafc7fb6db in start_thread (arg=0x7faafbf1c700)
    at pthread_create.c:463
#11 0x00007faafc31c88f in clone ()
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 1 (Thread 0x7faafce3bb80 (LWP 36584)):
#0  0x00007faafc805384 in __libc_read (fd=fd@entry=7,
    buf=buf@entry=0x7ffda489ef10, nbytes=nbytes@entry=46)
    at ../sysdeps/unix/sysv/linux/read.c:27
#1  0x000055c8ca2f5b23 in read (__nbytes=46, __buf=0x7ffda489ef10, __fd=7)
    at /usr/include/x86_64-linux-gnu/bits/unistd.h:44
#2  xread (fd=fd@entry=7, buf=buf@entry=0x7ffda489ef10, len=len@entry=46)
    at wrapper.c:260
#3  0x000055c8ca2f5cdb in read_in_full (fd=7, buf=buf@entry=0x7ffda489ef10,
    count=count@entry=46) at wrapper.c:318
#4  0x000055c8ca26a54f in index_pack_lockfile (ip_out=<optimised out>)
    at pack-write.c:297
#5  0x000055c8ca22e18c in get_pack (args=args@entry=0x7ffda489f2e0,
    xd=xd@entry=0x55c8cb4966f8,
    pack_lockfile=pack_lockfile@entry=0x55c8cb496660) at fetch-pack.c:881
#6  0x000055c8ca22fbfb in do_fetch_pack (pack_lockfile=<optimised out>,
    si=0x7ffda489f1f0, nr_sought=<optimised out>, sought=<optimised out>,
    orig_ref=<optimised out>, fd=<optimised out>, args=0x7ffda489f2e0)
    at fetch-pack.c:1019
#7  fetch_pack (args=args@entry=0x7ffda489f2e0, fd=<optimised out>,
    conn=<optimised out>, ref=<optimised out>,
    dest=dest@entry=0x55c8cb498820
"remotehost:diffusion/LIBEDIT/libedit",
sought=sought@entry=0x55c8cb498580,
    nr_sought=<optimised out>, shallow=<optimised out>,
    pack_lockfile=<optimised out>, version=<optimised out>)
    at fetch-pack.c:1649
#8  0x000055c8ca2dddf8 in fetch_refs_via_pack (transport=0x55c8cb496620,
    nr_heads=2, to_fetch=0x55c8cb498580) at transport.c:365
#9  0x000055c8ca2df246 in transport_fetch_refs (
    transport=transport@entry=0x55c8cb496620, refs=refs@entry=0x55c8cb4959e0)
    at transport.c:1295
#10 0x000055c8ca1529ab in cmd_clone (argc=<optimised out>,
    argv=<optimised out>, prefix=<optimised out>) at builtin/clone.c:1212
#11 0x000055c8ca1374e1 in run_builtin (argv=<optimised out>,
    argc=<optimised out>, p=<optimised out>) at git.c:421
#12 handle_builtin (argc=<optimised out>, argv=<optimised out>) at git.c:647
#13 0x000055c8ca138515 in run_argv (argv=0x7ffda489fa00, argcp=0x7ffda489fa0c)
    at git.c:701
#14 cmd_main (argc=<optimised out>, argv=<optimised out>) at git.c:798
#15 0x000055c8ca13718f in main (argc=4, argv=0x7ffda489fc78)
    at common-main.c:45

(gdb) thread apply all bt

Thread 1 (Thread 0x7ff8a03dab80 (LWP 36587)):
#0  0x00007ff89fda434e in __libc_read (fd=fd@entry=0,
    buf=buf@entry=0x5604bea43d40 <input_buffer>, nbytes=nbytes@entry=4096)
    at ../sysdeps/unix/sysv/linux/read.c:27
#1  0x00005604be77bb23 in read (__nbytes=4096,
    __buf=0x5604bea43d40 <input_buffer>, __fd=0)
    at /usr/include/x86_64-linux-gnu/bits/unistd.h:44
#2  xread (fd=0, buf=0x5604bea43d40 <input_buffer>, len=4096) at wrapper.c:260
#3  0x00005604be5fb069 in fill (min=min@entry=1) at builtin/index-pack.c:255
#4  0x00005604be5fb23a in unpack_entry_data (offset=528312,
    size=size@entry=19448, type=<optimised out>, oid=oid@entry=0x5604c0605ea0)
    at builtin/index-pack.c:445
#5  0x00005604be5fbbc7 in unpack_raw_entry (oid=0x5604c0605ea0,
    ref_oid=0x7ffc74cd73f0, ofs_offset=0x5604c0603580, obj=0x5604c0605ea0)
    at builtin/index-pack.c:526
#6  parse_pack_objects (hash=0x7ffc74cd74a0 "\001")
    at builtin/index-pack.c:1113
#7  cmd_index_pack (argc=<optimised out>, argv=<optimised out>,
    prefix=<optimised out>) at builtin/index-pack.c:1775
#8  0x00005604be5bd4e1 in run_builtin (argv=<optimised out>,
    argc=<optimised out>, p=<optimised out>) at git.c:421
#9  handle_builtin (argc=<optimised out>, argv=<optimised out>) at git.c:647
#10 0x00005604be5be515 in run_argv (argv=0x7ffc74cd7640, argcp=0x7ffc74cd764c)
    at git.c:701
#11 cmd_main (argc=<optimised out>, argv=<optimised out>) at git.c:798
#12 0x00005604be5bd18f in main (argc=7, argv=0x7ffc74cd78b8)
    at common-main.c:45

As before, any hints on how to debug this gratefully accepted!

-- 
Sitsofe | http://sucs.org/~sits/