Gitaly timeouts
- Tier: Free, Premium, Ultimate
 - Offering: GitLab Self-Managed
 
Gitaly provides two types of configurable timeouts:
- Call timeouts, configured by using the GitLab UI.
 - Negotiation timeouts, configured by using Gitaly configuration files.
 
Configure the call timeouts
Configure the following call timeouts to make sure that long-running Gitaly calls don’t needlessly take up resources. To configure the call timeouts:
- On the left sidebar, at the bottom, select Admin. If you’ve turned on the new navigation, in the upper-right corner, select your avatar and then select Admin.
 - Select Settings > Preferences.
 - Expand the Gitaly timeouts section.
 - Set each timeout as required.
 
Available call timeouts
Different call timeouts are available for different Gitaly operations.
| Timeout | Default | Description | 
|---|---|---|
| Default | 55 seconds | Timeout for most Gitaly calls (not enforced for git fetch and push operations, or Sidekiq jobs). For example, checking if a repository exists on disk. Makes sure that Gitaly calls made in a web request cannot exceed the entire request timeout. It should be shorter than the worker timeout that can be configured for Puma. If a Gitaly call timeout exceeds the worker timeout, the remaining time from the worker timeout is used to avoid having to terminate the worker. | 
| Fast | 10 seconds | Timeout for fast Gitaly operations used in requests, sometimes multiple times. For example, checking if a repository exists on disk. If fast operations exceed this threshold, there may be a problem with a storage shard. Failing fast can help maintain the stability of the GitLab instance. | 
| Medium | 30 seconds | Timeout for Gitaly operations that should be fast (possibly in requests) but preferably not used multiple times in a request. For example, loading blobs. Timeout that should be set between Default and Fast. | 
Configure the negotiation timeouts
You might need to increase the negotiation timeout:
- For particularly large repositories.
 - When performing these commands in parallel.
 
You can configure negotiation timeouts for:
git-upload-pack(1), which is invoked by a Gitaly node when you executegit fetch.git-upload-archive(1), which is invoked by a Gitaly node when you executegit archive --remote.
To configure these timeouts:
Edit /etc/gitlab/gitlab.rb:
gitaly['configuration'] = {
    timeout: {
        upload_pack_negotiation: '10m',      # 10 minutes
        upload_archive_negotiation: '20m',   # 20 minutes
    }
}Edit /home/git/gitaly/config.toml:
[timeout]
upload_pack_negotiation = "10m"
upload_archive_negotiation = "20m"For the values, use the format of ParseDuration in Go.
These timeouts affect only the negotiation phase of remote Git operations, not the entire transfer.