Clone this repo:


  1. 9fdabe0 Merge "Improve DatabaseSchemaCreator" by Saša Živkov · 13 days ago master
  2. cd981f9 Improve DatabaseSchemaCreator by Wendy Wang · 2 weeks ago
  3. 710e72e Remove @Ignore annotations from test support classes by Saša Živkov · 2 weeks ago
  4. aaebb71 Merge "Rename SpannerLifeCycleManager -> DatabaseSchemaCreator" by Wendy Wen Wang · 2 weeks ago
  5. 751109c Merge "Use GOOGLE_APPLICATION_CREDENTIALS instead of SERVICE_ACCOUNT_KEY_PATH" by Saša Živkov · 2 weeks ago

Gerrit Cloud Spanner refdb

This plugin provides an implementation of the Gerrit global refdb backed by Cloud Spanner.

Requirements for using this plugin are:

  • Gerrit v3.6 or later
  • Cloud spanner as a provisioned instance
  • Optional, for testing: a locally hosted emulator

Typical use case

A global refdb implementation is a requirement for a Gerrit multi-master scenario in a multi-site setup to ensure refs are updated consistently across multiple Gerrit primary sites.

Refer to the Gerrit multi-site plugin for more details on the high level architecture.

Use with Cloud Spanner emulator

The in-memory Cloud Spanner emulator can be used during development. There are several limitations of the emulator that differ from the production service.

An easy way to run the emulator is to use gcloud CLI and Docker. Following the install instructions here will provide a local instance that the plugin can access. The gcloud CLI commands will be sent to the emulator instead of the production service. A test spanner instance and database will need to be created.

gcloud spanner instances create test-instance --config=emulator-config --description="Test Instance" --nodes=1

gcloud spanner databases create global-refdb --instance=test-instance

There are several limitations of the emulator which differ from the production service.

Use with simulated multi-site setup

In order to easily set up and begin testing the @PLUGIN@ plugin, the multi-site plugin's local environment setup can be used.

This simulates a multi-site setup using two local gerrit instances. Build the release.war to include @PLUGIN@ and follow the linked example setup.

Configuration options

Configuration details can be found in the @PLUGIN@ config documentation.

When not used with the emulator, the plugin requires the path to credentials in the config to authenticate with google. To create the key see the official documentation.