| # 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. |