Allow gcloud-pubsub-events to be configured as events-broker

Add possibility to use gcloud-pubsub-events as a events-broker for local
setup.

Bug: Issue 14206
Change-Id: I85897b52b25b7686c51be68fac48da79e4fa9b76
diff --git a/setup_local_env/README.md b/setup_local_env/README.md
index 0b1d00c..fca46d8 100644
--- a/setup_local_env/README.md
+++ b/setup_local_env/README.md
@@ -5,7 +5,7 @@
 
 - 2 gerrit instances deployed by default in /tmp
 - 1 zookeeper node
-- 1 Broker node (either kafka or kinesis)
+- 1 Broker node (kafka, kinesis or gcloud-pubsub)
 - 1 HA-PROXY
 
 ## Requirements
@@ -35,6 +35,15 @@
     --broker-type kinesis
 ```
 
+Deploy GCloud PubSub broker
+
+```bash
+sh setup_local_env/setup.sh \
+    --release-war-file /path/to/gerrit.war \
+    --multisite-lib-file /path/to/multi-site.jar \
+    --broker-type gcloud-pubsub
+```
+
 
 Cleanup the previous deployments
 
@@ -73,7 +82,7 @@
 
 [--enabled-https]               Enabled https; default true
 
-[--broker_type]                 events broker type; either 'kafka' or 'kinesis'. Default 'kafka'
+[--broker_type]                 events broker type; 'kafka', 'kinesis' or 'gcloud-pubsub'. Default 'kafka'
 ```
 
 ## Limitations
diff --git a/setup_local_env/configs/gerrit.config b/setup_local_env/configs/gerrit.config
index 0f19578..248f669 100644
--- a/setup_local_env/configs/gerrit.config
+++ b/setup_local_env/configs/gerrit.config
@@ -18,6 +18,7 @@
 [container]
     javaOptions = "-Dflogger.backend_factory=com.google.common.flogger.backend.log4j.Log4jBackendFactory#getInstance"
     javaOptions = "-Dflogger.logging_context=com.google.gerrit.server.logging.LoggingContext#getInstance"
+    javaOptions = "-DPUBSUB_EMULATOR_HOST=localhost:$BROKER_PORT"
     javaOptions = "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=$REMOTE_DEBUG_PORT"
 [index]
     type = LUCENE
@@ -56,5 +57,9 @@
     endpoint = http://localhost:$BROKER_PORT
     applicationName = $GROUP_ID
     initialPosition = trim_horizon
+[plugin "gcloud-pubsub-events"]
+    numberOfSubscribers = 6
+    gcloudProject="test-project"
+    subscriptionId=$GROUP_ID
 [plugin "metrics-reporter-prometheus"]
     prometheusBearerToken = token
diff --git a/setup_local_env/docker-compose-gcloud-pubsub.yaml b/setup_local_env/docker-compose-gcloud-pubsub.yaml
new file mode 100644
index 0000000..983e784
--- /dev/null
+++ b/setup_local_env/docker-compose-gcloud-pubsub.yaml
@@ -0,0 +1,13 @@
+version: '3'
+services:
+  pubsub:
+    image: gcr.io/google.com/cloudsdktool/cloud-sdk:316.0.0-emulators
+    ports:
+      - "8085:8085"
+    container_name: gcloud-pubsub_test_node
+    entrypoint: gcloud beta emulators pubsub start --project test-project --host-port 0.0.0.0:8085
+    networks:
+      - setup_local_env_default
+networks:
+  setup_local_env_default:
+    external: true
diff --git a/setup_local_env/setup.sh b/setup_local_env/setup.sh
index 5c9de6f..536fcff 100755
--- a/setup_local_env/setup.sh
+++ b/setup_local_env/setup.sh
@@ -107,6 +107,8 @@
     export BROKER_PORT=4566
   elif [ "$BROKER_TYPE" =  "kafka" ]; then
     export BROKER_PORT=9092
+  elif [ "$BROKER_TYPE" =  "gcloud-pubsub" ]; then
+    export BROKER_PORT=8085
   fi
 }
 
@@ -245,7 +247,7 @@
     echo
     echo "[--enabled-https]               Enabled https; default true"
     echo
-    echo "[--broker-type]                 events broker type; either 'kafka' or 'kinesis'. Default 'kafka'"
+    echo "[--broker-type]                 events broker type; 'kafka', 'kinesis' or 'gcloud-pubsub'. Default 'kafka'"
     echo
     exit 0
   ;;
@@ -338,8 +340,8 @@
     BROKER_TYPE=$2
     shift
     shift
-    if [ ! "$BROKER_TYPE" = "kafka" ] && [ ! "$BROKER_TYPE" = "kinesis" ]; then
-      echo >&2 "broker type: '$BROKER_TYPE' not valid. Please supply 'kafka' or 'kinesis'. Aborting"
+    if [ ! "$BROKER_TYPE" = "kafka" ] && [ ! "$BROKER_TYPE" = "kinesis" ] && [ ! "$BROKER_TYPE" = "gcloud-pubsub" ]; then
+      echo >&2 "broker type: '$BROKER_TYPE' not valid. Please supply 'kafka','kinesis' or 'gcloud-pubsub'. Aborting"
       exit 1
     fi
   ;;
@@ -444,6 +446,14 @@
 ing"; exit 1; }
 fi
 
+
+if [ "$BROKER_TYPE" = "gcloud-pubsub" ]; then
+echo "Downloading gcloud-pubsub-events plugin master (TODO: replace with $GERRIT_BRANCH, once we have build)"
+  wget $GERRIT_CI/plugin-gcloud-pubsub-events-gh-bazel-master-stable-3.3/$LAST_BUILD/gcloud-pubsub-events/gcloud-pubsub-events.jar \
+  -O $DEPLOYMENT_LOCATION/gcloud-pubsub-events.jar || { echo >&2 "Cannot download gcloud-pubsub-events plugin: Check internet connection. Abort\
+ing"; exit 1; }
+fi
+
 echo "Downloading metrics-reporter-prometheus plugin $GERRIT_BRANCH"
   wget $GERRIT_CI/plugin-metrics-reporter-prometheus-bazel-master-$GERRIT_BRANCH/$LAST_BUILD/metrics-reporter-prometheus/metrics-reporter-prometheus.jar \
   -O $DEPLOYMENT_LOCATION/metrics-reporter-prometheus.jar || { echo >&2 "Cannot download metrics-reporter-prometheus plugin: Check internet connection. Abort\