gitaly

module
v1.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 29, 2018 License: MIT

README

Gitaly

Pipeline status coverage report

Quick Links: Migration Board | Roadmap | Open Conversations | Unassigned Conversations | Migrations | Want to Contribute? | GitLab Gitaly Issues | GitLab Gitaly Merge Requests | gitlab.com dashboard |


Gitaly is a Git RPC service for handling all the git calls made by GitLab.

To see where it fits in please look at GitLab's architecture

Project Goals

Fault-tolerant horizontal scaling of Git storage in GitLab, and particularly, on gitlab.com.

This will be achieved by focusing on two areas (in this order):

  1. Migrate from repository access via NFS to gitaly-proto, GitLab's new Git RPC protocol
  2. Evolve from large Gitaly servers managed as "pets" to smaller Gitaly servers that are "cattle"

Current Status

As of GitLab 11.1, most application code accesses Git repositories through Gitaly instead of direct disk access. We are close to removing all Git disk access from gitlab-rails (the Gitaly v1.1 milestone). We are even closer to fully supporting the subset of Git operations needed by gitlab.com (the v1.0 milestone). When these two milestones are closed the migration project will be complete.

The roadmap is available here.

The migration process is documented.

If you're interested in seeing how well Gitaly is performing on GitLab.com, we have dashboards!

Overall

image

By Feature

image

Migrations

The progress of Gitaly's endpoint migrations is tracked via the Migration Board

Installation

Gitaly requires Go 1.10 or newer and Ruby 2.4. Run make to download and compile Ruby dependencies, and to compile the Gitaly Go executable.

Gitaly uses git. Version 2.18.0 or higher is required.

Configuration

See configuration documentation

Contributing

See CONTRIBUTING.md.

Name

Gitaly is a tribute to git and the town of Aly. Where the town of Aly has zero inhabitants most of the year we would like to reduce the number of disk operations to zero for most actions. It doesn't hurt that it sounds like Italy, the capital of which is the destination of all roads. All git actions in GitLab end up in Gitaly.

Design

High-level architecture overview:

Gitaly Architecture

Edit this diagram directly in Google Drawings

Gitaly clients

As of Q4 2018, the following GitLab components act as Gitaly clients:

  • gitlab-rails: the main GitLab Rails application.
  • gitlab-shell: For git clone, git push etc. via SSH.
  • gitlab-workhorse: For git clone via HTTPS and for slow requests that serve raw Git data (example)
  • gitaly-ssh: For internal Git data transfers between Gitaly servers.
  • gitaly-ruby: For RPC's that interact with more than one repository, such as merging a branch.

The clients written in Go (gitlab-shell, gitlab-workhorse, gitaly-ssh) use library code from the gitlab.com/gitlab-org/gitaly/client package.

Presentations

Directories

Path Synopsis
cmd
internal
git
log
middleware/limithandler/testpb
Package test is a generated protocol buffer package.
Package test is a generated protocol buffer package.
Package streamio contains wrappers intended for turning gRPC streams that send/receive messages with a []byte field into io.Writers and io.Readers.
Package streamio contains wrappers intended for turning gRPC streams that send/receive messages with a []byte field into io.Writers and io.Readers.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL