Gitaly 타임아웃

Tier: Free, Premium, Ultimate Offering: Self-Managed

Gitaly은 두 가지 유형의 구성 가능한 타임아웃을 제공합니다.

  • GitLab UI를 사용하여 구성하는 콜 타임아웃.
  • Gitaly 구성 파일을 사용하여 구성하는 협상 타임아웃.

콜 타임아웃 구성

다음 콜 타임아웃을 구성하여 장시간 실행되는 Gitaly 호출이 불필요하게 리소스를 차지하지 않도록 합니다. 콜 타임아웃을 구성하려면:

  1. 왼쪽 사이드바에서 맨 아래에서 관리 영역(Admin Area)을 선택합니다.
  2. 설정(Settings) > 기본 설정(Preferences)을 선택합니다.
  3. Gitaly timeouts 섹션을 확장합니다.
  4. 각 타임아웃을 필요에 따라 설정합니다.

사용 가능한 콜 타임아웃

다양한 Gitaly 작업에 대해 다양한 콜 타임아웃이 제공됩니다.

타임아웃 기본값 설명
기본(Default) 55초 대부분의 Gitaly 호출에 대한 타임아웃( git fetchpush 작업이나 Sidekiq 작업에는 적용되지 않음). 예를 들어, 디스크에 리포지토리가 있는지 확인하는 작업. 웹 요청에서 이루어지는 Gitaly 호출이 전체 요청 시간 제한을 초과하지 않도록 합니다. 웹 요청에서 이루어지는 Gitaly 호출이 전체 요청 시간 제한을 초과하지 않도록 합니다. Puma 설정 파일에서 구성할 수 있는 작업자(worker) 타임아웃보다 짧아야 합니다. Gitaly 호출 타임아웃이 작업자(worker) 타임아웃을 초과하면, 작업자(worker)를 종료하지 않고 남은 시간을 사용하여 작업을 마무리할 수 있습니다.
빠름(Fast) 10초 요청에 사용되는 빠른 Gitaly 작업에 대한 타임아웃으로, 때로는 여러 번 발생합니다. 예를 들어, 디스크에 리포지토리가 있는지 확인하는 작업. 빠른 작업이 이 임계값을 초과하면, 저장소 샤드에 문제가 있을 수 있습니다. 빠른 실패는 GitLab 인스턴스의 안정성을 유지하는 데 도움이 될 수 있습니다.
중간(Medium) 30초 빠르지만(가능하면 요청에 포함될 수 있음) 한 번 이상 사용되기를 원치 않는 Gitaly 작업에 대한 타임아웃입니다. 예를 들어, blobs를 로드합니다. 기본(Default)과 빠름(Fast) 사이에 설정해야 하는 타임아웃입니다.

협상 타임아웃 구성

특히 큰 리포지토리에 대해 협상 타임아웃을 늘려야 할 수 있습니다.

  • 병렬로 이러한 명령을 수행할 때.

다음과 같은 작업에 대해 협상 타임아웃을 구성할 수 있습니다:

  • git fetch를 실행할 때 Gitaly 노드에서 호출되는 git-upload-pack(1).
  • git archive --remote를 실행할 때 Gitaly 노드에서 호출되는 git-upload-archive(1).

이러한 타임아웃을 구성하려면:

Linux 패키지(Omnibus)

/etc/gitlab/gitlab.rb를 편집합니다:

gitaly['configuration'] = {
    timeout: {
        upload_pack_negotiation: '10m',      # 10분
        upload_archive_negotiation: '20m',   # 20분
    }
}
직접 컴파일한 경우(소스)

/home/git/gitaly/config.toml을 편집합니다:

[timeout]
upload_pack_negotiation = "10m"
upload_archive_negotiation = "20m"

값에는 Go의 ParseDuration 형식을 사용합니다.

이러한 타임아웃은 원격 Git 작업의 협상 단계에만 영향을 미치며 전체 전송에는 영향을 주지 않습니다.