[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Savannah-hackers-public] Anonymous HTTPS cloning of emacs git repos

From: Bob Proulx
Subject: Re: [Savannah-hackers-public] Anonymous HTTPS cloning of emacs git repository is failed
Date: Fri, 2 Oct 2020 00:16:10 -0600

Bob Proulx wrote:
> I'll go ahead and send this update and keep looking into why this is failing.

I think I have this problem mostly resolved right now.  I can git
clone the repository now when previously I could not.

    rwp@mgt0:~/src/emacs-stuff$ time git clone
    Cloning into 'emacs'...
    remote: Counting objects: 903373, done.
    remote: Compressing objects: 100% (160456/160456), done.
    remote: Total 903373 (delta 742468), reused 902659 (delta 741755)
    Receiving objects: 100% (903373/903373), 293.80 MiB | 15.14 MiB/s, done.
    Resolving deltas: 100% (742468/742468), done.
    Checking connectivity... done.
    Checking out files: 100% (4126/4126), done.

    real    5m5.358s
    user    3m36.801s
    sys     0m17.380s

What I did to debug...

I made an rsync copy of the emacs.git repository (not a recommended
method, not atomic, better to use a git method that will copy things
the correct way, but fine for my throwaway test, where I needed a bit
exact copy) to my own server which has the same git-http-backend
configuration.  And also copied grep.git too for a comparison.  And
had exactly the same reproducible behavior there!  Attempting to clone
emacs times out but cloning grep works perfectly.  Exact same problem
on my testing copy.

Therefore the problem was definitely something in the emacs.git

I performed some experiments on my copy offline.  It seemed that for
whatever reason git-pack-objects was always a heavy cpu use process at
the start of the the clone.  Interesting.  But there was a
difference between the working and non-working protocols.

    git pack-objects --revs --thin --stdout --progress --delta-base-offset

By my stopwatch and thumb this ran for 1m22s at the start of
every git clone.  Using git-http-backend this would timeout due to
some 60s timeout that I have not yet identified.  However using the
git-daemon only 6 seconds would pass before seeing progress feedback
to the terminal.  The two programs handle this differently,
apparently, and git-http-backend is holding all output until after git
pack-objects completes.

Background: Once a month on the 4th all git repositories are garbage
collecte with "git gc".  Today is the 1st.  So it has been almost the
maximum length of time between explicit git gc runs.  I decided to
manually run this now.

    root@vcs0:/net/vcs/git/emacs.git# git gc
    Counting objects: 900046, done.
    Delta compression using up to 2 threads.
    Compressing objects: 100% (161844/161844), done.
    Writing objects: 100% (900046/900046), done.
    Total 900046 (delta 739533), reused 896905 (delta 737041)
    Removing duplicate objects: 100% (256/256), done.
    Checking connectivity: 903487, done.

Before the storage size was 411MB and git gc reduced the size ot 333MB
after the run.  After doing the git gc then the git pack-objects takes
only 33 seconds to run at the start of the clone.  So only 33 seconds
before there is interaction.

And so it seems that for whatever reason when using the
git-http-backend that this feedback prior to the compression step
would take longer than 60 seconds, would take 1m22s, and would hit the
60 second timeout, and fail returning the HTTP 504 Timeout error.  Now
that git gc has been recently run it takes only 33 seconds, is below
the 60 second timeout, and therefore is allowed to continue.

At this time I can git clone the repository.

Since it appears that for emacs at least the once a month git gc is
not enough to keep the incremental git pack-objects happy I have
increased that to four times a month, about weekly.  That should keep
on top of this problem for the indefinite future.  I'll try to figure
out what the 60s timeout is since it is not proxy_read_timeout but
some other timeout.  Because if this gets really worse then we will
need to increase that value.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]