From 29423f8ad865d8835aec381e58b3ebf8415d2b16 Mon Sep 17 00:00:00 2001 From: Weny Xu Date: Fri, 10 Jul 2026 14:40:16 +0800 Subject: [PATCH] ci: check kafka readiness before fuzz tests (#8461) Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Signed-off-by: WenyXu Co-authored-by: Sisyphus --- .github/scripts/wait-kafka-ready.sh | 68 +++++++++++++++++++++++++++++ .github/workflows/develop.yml | 10 +++++ 2 files changed, 78 insertions(+) create mode 100755 .github/scripts/wait-kafka-ready.sh diff --git a/.github/scripts/wait-kafka-ready.sh b/.github/scripts/wait-kafka-ready.sh new file mode 100755 index 0000000000..7617bdfa1f --- /dev/null +++ b/.github/scripts/wait-kafka-ready.sh @@ -0,0 +1,68 @@ +#!/usr/bin/env bash + +set -euo pipefail + +GT_KAFKA_NAMESPACE="${GT_KAFKA_NAMESPACE:-kafka-cluster}" +GT_KAFKA_CLIENT_NAMESPACE="${GT_KAFKA_CLIENT_NAMESPACE:-my-greptimedb}" +GT_KAFKA_BOOTSTRAP_SERVERS="${GT_KAFKA_BOOTSTRAP_SERVERS:-kafka.kafka-cluster.svc.cluster.local:9092}" +GT_KAFKA_IMAGE="${GT_KAFKA_IMAGE:-docker.io/greptime/kafka:3.9.0-debian-12-r1}" +GT_KAFKA_READY_TIMEOUT_SECS="${GT_KAFKA_READY_TIMEOUT_SECS:-120}" +GT_KAFKA_READY_INTERVAL_SECS="${GT_KAFKA_READY_INTERVAL_SECS:-5}" +GT_KAFKA_POD_LABEL="${GT_KAFKA_POD_LABEL:-app.kubernetes.io/instance=kafka}" + +log() { + printf '[wait-kafka-ready] %s\n' "$*" +} + +run_client_probe() { + local pod_name="kafka-readiness-${RANDOM}-${RANDOM}" + + kubectl run "${pod_name}" \ + --namespace "${GT_KAFKA_CLIENT_NAMESPACE}" \ + --image "${GT_KAFKA_IMAGE}" \ + --restart=Never \ + --rm \ + --attach \ + --quiet \ + --env "GT_KAFKA_BOOTSTRAP_SERVERS=${GT_KAFKA_BOOTSTRAP_SERVERS}" \ + --command -- bash -euo pipefail -c ' + if command -v kafka-broker-api-versions.sh >/dev/null 2>&1; then + kafka_tool="kafka-broker-api-versions.sh" + elif [ -x /opt/bitnami/kafka/bin/kafka-broker-api-versions.sh ]; then + kafka_tool="/opt/bitnami/kafka/bin/kafka-broker-api-versions.sh" + else + echo "kafka-broker-api-versions.sh not found" >&2 + exit 1 + fi + + "${kafka_tool}" --bootstrap-server "${GT_KAFKA_BOOTSTRAP_SERVERS}" >/tmp/kafka-ready.out + cat /tmp/kafka-ready.out + ' +} + +log "wait for Kafka pods in namespace ${GT_KAFKA_NAMESPACE}" +kubectl wait \ + --for=condition=Ready \ + pod -l "${GT_KAFKA_POD_LABEL}" \ + --timeout="${GT_KAFKA_READY_TIMEOUT_SECS}s" \ + -n "${GT_KAFKA_NAMESPACE}" + +deadline=$((SECONDS + GT_KAFKA_READY_TIMEOUT_SECS)) +attempt=1 + +while [ "${SECONDS}" -le "${deadline}" ]; do + log "probe Kafka from namespace ${GT_KAFKA_CLIENT_NAMESPACE}, attempt ${attempt}" + if run_client_probe; then + log "Kafka is ready at ${GT_KAFKA_BOOTSTRAP_SERVERS}" + exit 0 + fi + + log "Kafka probe failed; retrying in ${GT_KAFKA_READY_INTERVAL_SECS}s" + sleep "${GT_KAFKA_READY_INTERVAL_SECS}" + attempt=$((attempt + 1)) +done + +log "timed out waiting for Kafka bootstrap ${GT_KAFKA_BOOTSTRAP_SERVERS}" +kubectl get pods -o wide -n "${GT_KAFKA_NAMESPACE}" || true +kubectl get pods -o wide -n "${GT_KAFKA_CLIENT_NAMESPACE}" || true +exit 1 diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index 08c44a826b..0d9eceacb8 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -457,6 +457,11 @@ jobs: name: Port forward Kafka WAL helper run: | kubectl port-forward service/kafka-wal-helper 8080:8080 -n kafka-cluster& + - if: matrix.mode.kafka + name: Check Kafka readiness + shell: bash + run: | + .github/scripts/wait-kafka-ready.sh - name: Fuzz Test uses: ./.github/actions/fuzz-test env: @@ -648,6 +653,11 @@ jobs: - name: Port forward (mysql) run: | kubectl port-forward service/my-greptimedb-frontend 4002:4002 -n my-greptimedb& + - if: matrix.mode.kafka + name: Check Kafka readiness + shell: bash + run: | + .github/scripts/wait-kafka-ready.sh - name: Fuzz Test uses: ./.github/actions/fuzz-test env: