
This plugin allows making Gerrit highly available by having redundant Gerrit
masters.

The masters must be:

* connecting to the same database
* sharing the git repositories using a shared file system (e.g. NFS)
* behind a load balancer (e.g. HAProxy)

Currently, the mode supported is one primary (active) master and multiple backup
(passive) masters but eventually the plan is to support `n` active masters. In
the active/passive mode, the active master is handling all traffic while the
passives are kept updated to be always ready to take over.

Even if database and git repositories are shared by the masters, there are a few
areas of concern in order to be able to switch traffic between masters in a
transparent manner from the user's perspective. The 4 areas of concern are
things that Gerrit stores either in memory or locally in the review site:

* caches
* secondary indexes
* stream-events
* web sessions

They need either to be shared or kept local to each master but synchronized.
This plugin needs to be installed in all the masters and it will take care of sharing
or synchronizing them.

#### Caches
Every time a cache eviction occurs in one of the masters, the eviction will be
forwarded the other masters so their caches do not contain stale entries.

#### Secondary indexes
Every time the secondary index is modified in one of the masters, e.g., a change
is added, updated or removed from the index, the others master's index are
updated accordingly. This way, both indexes are kept synchronized.

#### Stream events
Every time a stream event occurs in one of the masters (see [more events info]
(https://gerrit-review.googlesource.com/Documentation/cmd-stream-events.html#events)),
the event is forwarded to the other masters which re-plays it. This way, the
output of the stream-events command is the same, no matter which master a client
is connected to.

#### Web session
The built-in Gerrit H2 based web session cache is replaced with a file based
implementation that is shared amongst the masters.

## Setup

Prerequisites:

* Unique database server must be accessible from all the masters
* Git repositories must be located on a shared file system
* A directory on a shared file system must be available for @PLUGIN@ to use

For the masters:

* Configure the database section in gerrit.config to use the shared database
* Configure gerrit.basePath in gerrit.config to the shared repositories location
* Configure gerrit.serverId in gerrit.config based on [config](config.md)'s introduction
* Install and configure this @PLUGIN@ plugin [further](config.md) or based on below.

Here is an example of the minimal @PLUGIN@.config:

Primary master

```
[main]
  sharedDirectory = /directory/accessible/from/both/masters

[peerInfo "static"]
  url = http://backupMasterHost1:8081/

[http]
  user = username
  password = password
```

Backup master

```
[main]
  sharedDirectory = /directory/accessible/from/both/masters

[peerInfo "static"]
  url = http://primaryMasterHost:8080/

[http]
  user = username
  password = password
```

### HA replica site

It is possible to create a copy of the master site and configure both sites to run
in HA mode as peers. This is possible when the directory where the copy will be
created is accessible from this machine. Such a replica site can be created by
means of a gerrit [site init](../../../Documentation/pgm-init.html) step,
contributed by the plugin under its init section.

This init step is optional but defaults to creating the replica. If you want to
create the other site manually, or if the other site needs to be created in a
directory not accessible from this machine, then please skip that init step.

For further information and supported options, refer to [config](config.md)
documentation.
