# High Availability for Google Cloud Pub/Sub

This plugin extends the Gerrit High Availability plugin by using Google Cloud Pub/Sub 
as the message broker for forwarding events between Gerrit instances instead of HTTP-based 
direct communication.

## Google Cloud Pub/Sub as Message Broker

Google Cloud Pub/Sub provides:

* **Decoupling**: Instances do not need to know about each other directly or maintain HTTP connections
* **Scalability**: Automatically scales to handle high message volume
* **Reliability**: Messages are persisted and retried automatically
* **Ordering**: Preserves message ordering per topic
* **Dead-letter queues**: Messages that exceed max receive count are moved to a dead-letter topic for debugging

## Prerequisites

* Google Cloud Project with Pub/Sub API enabled
* Google Cloud service account with the following roles:
  - `roles/pubsub.editor` - To create and manage topics and subscriptions
  - `roles/pubsub.publisher` - To publish messages
  - `roles/pubsub.subscriber` - To consume messages
* Service account credentials (JSON key file or Application Default Credentials)

## How It Works

Instead of the base plugin's HTTP-based peer communication model, this GCP extension:

1. Publishes all HA events (cache evictions, index updates, stream events) to a Google Cloud Pub/Sub topic
2. Each Gerrit instance subscribes to the topic via its own subscription
3. Messages are processed asynchronously by each instance's subscription handler
4. Failed messages are automatically retried per Pub/Sub's retry policy
5. Messages exceeding the max receive count are moved to a dead-letter topic

## Monitoring and Debugging

Failed messages can be investigated via the dead-letter topic. Use Google Cloud Console or 
`gcloud pubsub` CLI commands to:

* View subscription lag and processing rates
* Inspect dead-lettered messages
* Monitor message throughput and latency

For troubleshooting steps, refer to [config.md](config.md) and Google Cloud Pub/Sub documentation.
