gitaly

module
v0.20.0 Latest Latest
Warning

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

Go to latest
Published: Jul 14, 2017 License: MIT

README

Gitaly

build status Gem Version

Quick Links: Open Conversations | Unassigned Conversations | Migrations | Want to Contribute? | GitLab Gitaly Issues | GitLab Gitaly Merge Requests |


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

Gitaly is still under development. We expect it to become a standard component of GitLab in Q1 2017 and to reach full scope in Q3 2017.

Project Goals

Make the git data storage tier of large GitLab instances, and GitLab.com in particular, fast.

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

  1. Move git operations as close to the data as possible
    • Migrate from git operations on workers, accessing git data over NFS to Gitaly services running on file-servers accessing git data on local drives (See our test results)
    • Ultimately, this will lead to all git operations occurring via the Gitaly service and the removal of the need for NFS access to git volumes.
  2. Optimize git services using caching and other techniques

Current Status

Gitaly has been shipped as part of GitLab since 9.0. We are migrating git operations from in-process Rugged implementations to Gitaly service endpoints. 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

Current Features

Controller ~"Migration Analysis" ~"RPC Design" ~"Server Implementation" ~"Client Implementation" ~"Acceptance Testing" Optim 1 Optim 2
SmartHTTP::InfoRefsUploadPack and SmartHTTP::InfoRefsReceivePack #36 -
Diff::CommitDiff #64 #80 #88 #89 #209
Ref::FindRefName and Commit::CommitIsAncestor #66 #81 #86 #87 #210
Ref::FindDefaultBranchName, Ref::FindAllBranchNames, Ref::FindAllTagNames #65 #82 #84 #85 #211
SmartHTTP::PostUploadPack and SmartHTTP::PostReceivePack #92 gitlab-org/gitaly-proto!4 #122 #125 #184
SSH:SSHUploadPack and SSH::SSHReceivePack #91 gitlab-org/gitaly-proto!5 #123 #124
Ref::FindLocalBranches #127 #128 !103 gitlab-org/gitlab-ce!10059
Ref::count_branch_names and Ref::count_tag_names #157 -- -- gitlab-org/gitlab-ce!10780 #215
Projects::GraphsController#charts (shelved for now) #158
Commit::GetAuthor #159
Projects::RawController#show #160 #195
CatFile::Blob #194

Installation

Gitaly requires Go 1.8 or newer. To install into /usr/local/bin, run:

make install

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

Presentations

Directories

Path Synopsis
cmd
internal
git
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