git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: clone hang prevention / timeout?

From
EWEric Wong <normalperson@yhbt.net>
Date
Apr 12, 2016, 08:01 UTC
Message-ID
<20160412080149.GA9087@dcvr.yhbt.net>
In-Reply-To
<CALyZvKwxE4T8-FmEYgPMgAFKLmeAY5f-y-mDL8S9twTb0umRaA@mail.gmail.com>
Jason Vas Dias <jason.vas.dias@gmail.com> wrote:
> It appears GIT has no way of specifying a timeout for a clone operation -
> if the server decides not to complete a get request, the clone can
> hang forever -
> is this correct ?

git uses SO_KEEPALIVE for all connections it makes, so whatever your kernel TCP keepalive knobs are set at.

By default, it's very long (around 2 hours), but you can change them using the tcp_keepalive_* knobs in /proc/sys/net/ipv4/ under Linux.

I suppose we can do shorter timeouts (at least under Linux) via setsockopt(.. TCP_KEEP*) knobs, or we can call poll() ourselves to timeout connections. However, git packing operations on the server can take a long time; so it might be bad to timeout manually unless we know the connection is really dead.

Show 7 quoted lines
> This appears to be what I am seeing, in a script that is attempting to do many
> successive clone operations, eg. of
> git://anongit.freedesktop.org/xorg/* , the script
> occasionally hangs in a clone - I can see with netstat + strace that the TCP
> connection is open and GIT is trying to read .
> Is there any option I can specify to get the clone to timeout, or do I manually
> have to strace the git process and send it a signal after a hang is detected?

I added git:// support for SO_KEEPALIVE in commit e47a8583a202 ("enable SO_KEEPALIVE for connected TCP sockets") back in 2011 (v1.7.10), and http:// support later in 2013 (v1.8.5) with commit a15d069a1986 ("http: enable keepalive on TCP sockets")

Previous: Jason Vas DiasNext: Jeff King
Message 2 of 6 in “clone hang prevention / timeout?”
  1. Jason Vas DiasApr 11, 2016
  2. Eric WongApr 12, 2016
  3. Jeff KingApr 13, 2016
  4. Jeff KingApr 13, 2016
  5. Jason Vas DiasApr 14, 2016
  6. Eric WongApr 30, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.