Skip to content

Compress Git HTTP info/refs responses in workhorse

Problem to solve

We know that Git HTTP access to gitlab-org/gitlab-ce always incurs a download of the current refs on the server; this is the GET /info/refs part of Git HTTP. The other day we realized that for gitlab-org/gitlab-ce the response for this request is 6MB.

According to this query we pumped out 720GB of info/refs data in the last 24h. https://log.gitlab.net/goto/09d052971aa83732eb7bd3aa4f90ad2f

Further details

Many Git clients accepted a gzipped response body: Accept-Encoding: deflate, gzip. In the case of gitlab-ce, the info/refs response can be gzipped down to 26% of the uncompressed size (measured with command-line gzip, standard compression level).

It would be relatively easy to gzip-compress these responses in workhorse. This would be nice for us (less egress data) and for users.

Of course git procotol v2 is even better but this is a relatively cheap thing we can do for protocol v0.

Proposal

When supported, gzip the info/refs response.

This will improve performance for projects with a large number of refs.

Links / references

Edited by James Ramsay (ex-GitLab)
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information