We spent some time at the May 2012 Hackathon outlining an incremental approach
to making open source Gerrit clusterable (the version running for android-review
and gerrit-review is already clustered but uses much of Google's proprietary
technologies such as GFS and BigTable). Several incremental steps were outlined
on how to move Gerrit in that direction.

# Shared Git Repo - Shared DB

This is the simplest case for Gerrit multi master, so it is likely the first
step which is needed by most other ideas is to support a very simple
master/master installation of Gerrit where both (or all if more than 2) masters
share a common filesystem backend (likely a high end NFS server) and a common
db.

Four issues have been identified here which need to be resolved before this is
possible:

1.  Cache coherency and
1.  Submit conflict resolution
1.  Mirror/Slave Replication
1.  User sessions

A naive approach to #1 is to simply use really short cache times, but this sort
of defeats the purpose of caching. To solve this properly, some sort of eviction
protocol will need to be developed for masters to inform their peers of a needed
eviction (a plugin is up for [review]
(https://gerrit-review.googlesource.com/#/c/37460/1) which does this using UDP).

# 2 could be easily solved by manually determining a submit master and later

upgrading to some sort of voting mechanism among peer masters to choose a submit
master, these would be incremental approaches. The issue is that each server
runs a plugin queue and can therefor can attempt to merge changes to the same
branches at the same time resulting in "failed to lock" errors which will leave
failed to merge messages on changes. If the same change makes it into multiple
queues, might it also cause issues by attempting to being merged twice? If a
peer goes down, might its queue be the only holder of certain changes which then
will be missed until a restart of some server?

# 3 can be solved similarly to #2

Select a replication master. The replication master is responsible to rerun full
replication on startup and anytime a master goes down (since it may have currently
been replicating something). Otherwise, masters can replicate as they would normally
(as a single master) as they cause ref updates. Since there is a bug where replication
"failed to lock" attempts are not retried currently, this should also be fixed since
they will likely be even more prevalent with multi master setups.

A simple ssh connection between peers was deemed sufficient in most cases to
accomplish both #1 and #2. Although a single form of communication is not very
good since it prevents the cluster from distinguishing between a downed node and
a network split. Without being able to distinguish this, the cluster cannot
dynamically adapt when communication is down with a peer. Likely a cluster
should have a backdoor com channel to help indicate inter node network failures,
since the DB and the Repos are shared in this scenario, either could easily be
used for the back door channel (CAF is using the repos:
All-Projects:refs/meta/masters/node).

Spearce has a solution to #4

A [thread]
(https://groups.google.com/d/msg/repo-discuss/ZIIuBaCz9Jc/ZTQGpuy_Y1MJ) about
some what is required for this setup to work well.

# Multi Site Masters with Separate Backends

The main additional problem with separate backends is: resolving ref updates in
a globally safe way. In Google’s implementation, this is solved by placing the
refs in BigTable. ZooKeeper seemed like a good free/open source alternative
since it is Java based and under the Apache license. The other piece to solve is
moving object data across sites, it was suggested that ZooKeeper would likely be
involved in helping to coordinate this, but details were not really discussed.

A plugin for ZooKeeper ref-db is up for [review]
(https://gerrit-review.googlesource.com/#/c/37460/1).

# Distributed FS

Finally, it was felt that once multi sites were conquered, that a distributed
filesystem may eventually be needed to scale the git repos effectively, Hadoop
DFS was proposed for this.
