This is an automated email from the ASF dual-hosted git repository.

AlinsRan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix.git


The following commit(s) were added to refs/heads/master by this push:
     new eca38b227 fix(ci): wait for the kafka broker before creating topics 
(#13709)
eca38b227 is described below

commit eca38b227f4a7524d28e9f9e31b57194f71526b6
Author: AlinsRan <[email protected]>
AuthorDate: Wed Aug 5 06:37:32 2026 +0800

    fix(ci): wait for the kafka broker before creating topics (#13709)
---
 ci/init-last-test-service.sh   | 31 +++++++++++++++++++++++++++----
 ci/init-plugin-test-service.sh | 33 ++++++++++++++++++++++++++++-----
 2 files changed, 55 insertions(+), 9 deletions(-)

diff --git a/ci/init-last-test-service.sh b/ci/init-last-test-service.sh
index 694349056..bc90a25a3 100755
--- a/ci/init-last-test-service.sh
+++ b/ci/init-last-test-service.sh
@@ -16,16 +16,39 @@
 # limitations under the License.
 #
 
+# A broker that is not registered in ZooKeeper yet rejects topic creation with
+# "Replication factor: 1 larger than available brokers: 0". The failure used 
to be
+# silent, and the topic was then auto-created with the default single 
partition on
+# first produce, which quietly broke tests that expect a specific partition 
layout.
+create_kafka_topic() {
+    local container="$1"
+    local zookeeper="$2"
+    local partitions="$3"
+    local topic="$4"
+
+    for _ in $(seq 30); do
+        if docker exec -i "$container" /opt/bitnami/kafka/bin/kafka-topics.sh 
--create \
+            --zookeeper "$zookeeper" --replication-factor 1 \
+            --partitions "$partitions" --topic "$topic"; then
+            return 0
+        fi
+        sleep 2
+    done
+
+    echo "failed to create kafka topic $topic on $container"
+    exit 1
+}
+
 before() {
     # generating SSL certificates for Kafka
     sudo keytool -genkeypair -keyalg RSA -dname "CN=127.0.0.1" -alias 
127.0.0.1 -keystore ./ci/pod/kafka/kafka-server/selfsigned.jks -validity 365 
-keysize 2048 -storepass changeit
 }
 
 after() {
-    docker exec -i apache-apisix-kafka-server1-1 
/opt/bitnami/kafka/bin/kafka-topics.sh --create --zookeeper 
zookeeper-server1:2181 --replication-factor 1 --partitions 1 --topic test2
-    docker exec -i apache-apisix-kafka-server1-1 
/opt/bitnami/kafka/bin/kafka-topics.sh --create --zookeeper 
zookeeper-server1:2181 --replication-factor 1 --partitions 3 --topic test3
-    docker exec -i apache-apisix-kafka-server2-1 
/opt/bitnami/kafka/bin/kafka-topics.sh --create --zookeeper 
zookeeper-server2:2181 --replication-factor 1 --partitions 1 --topic test4
-    docker exec -i apache-apisix-kafka-server1-1 
/opt/bitnami/kafka/bin/kafka-topics.sh --create --zookeeper 
zookeeper-server1:2181 --replication-factor 1 --partitions 1 --topic 
test-consumer
+    create_kafka_topic apache-apisix-kafka-server1-1 zookeeper-server1:2181 1 
test2
+    create_kafka_topic apache-apisix-kafka-server1-1 zookeeper-server1:2181 3 
test3
+    create_kafka_topic apache-apisix-kafka-server2-1 zookeeper-server2:2181 1 
test4
+    create_kafka_topic apache-apisix-kafka-server1-1 zookeeper-server1:2181 1 
test-consumer
     # create messages for test-consumer
     for i in `seq 30`
     do
diff --git a/ci/init-plugin-test-service.sh b/ci/init-plugin-test-service.sh
index 7c65a8af3..3a14d4770 100755
--- a/ci/init-plugin-test-service.sh
+++ b/ci/init-plugin-test-service.sh
@@ -16,12 +16,35 @@
 # limitations under the License.
 #
 
+# A broker that is not registered in ZooKeeper yet rejects topic creation with
+# "Replication factor: 1 larger than available brokers: 0". The failure used 
to be
+# silent, and the topic was then auto-created with the default single 
partition on
+# first produce, which quietly broke tests that expect a specific partition 
layout.
+create_kafka_topic() {
+    local container="$1"
+    local zookeeper="$2"
+    local partitions="$3"
+    local topic="$4"
+
+    for _ in $(seq 30); do
+        if docker exec -i "$container" /opt/bitnami/kafka/bin/kafka-topics.sh 
--create \
+            --zookeeper "$zookeeper" --replication-factor 1 \
+            --partitions "$partitions" --topic "$topic"; then
+            return 0
+        fi
+        sleep 2
+    done
+
+    echo "failed to create kafka topic $topic on $container"
+    exit 1
+}
+
 after() {
-    docker exec -i apache-apisix-kafka-server1-1 
/opt/bitnami/kafka/bin/kafka-topics.sh --create --zookeeper 
zookeeper-server1:2181 --replication-factor 1 --partitions 1 --topic test2
-    docker exec -i apache-apisix-kafka-server1-1 
/opt/bitnami/kafka/bin/kafka-topics.sh --create --zookeeper 
zookeeper-server1:2181 --replication-factor 1 --partitions 3 --topic test3
-    docker exec -i apache-apisix-kafka-server2-1 
/opt/bitnami/kafka/bin/kafka-topics.sh --create --zookeeper 
zookeeper-server2:2181 --replication-factor 1 --partitions 1 --topic test4
-    docker exec -i apache-apisix-kafka-server3-scram-1 
/opt/bitnami/kafka/bin/kafka-topics.sh --create --zookeeper 
zookeeper-server3:2181 --replication-factor 1 --partitions 1 --topic 
test-scram-256
-    docker exec -i apache-apisix-kafka-server3-scram-1 
/opt/bitnami/kafka/bin/kafka-topics.sh --create --zookeeper 
zookeeper-server3:2181 --replication-factor 1 --partitions 1 --topic 
test-scram-512
+    create_kafka_topic apache-apisix-kafka-server1-1 zookeeper-server1:2181 1 
test2
+    create_kafka_topic apache-apisix-kafka-server1-1 zookeeper-server1:2181 3 
test3
+    create_kafka_topic apache-apisix-kafka-server2-1 zookeeper-server2:2181 1 
test4
+    create_kafka_topic apache-apisix-kafka-server3-scram-1 
zookeeper-server3:2181 1 test-scram-256
+    create_kafka_topic apache-apisix-kafka-server3-scram-1 
zookeeper-server3:2181 1 test-scram-512
     # Create user with SCRAM-SHA-512
     docker exec apache-apisix-kafka-server3-scram-1 
/opt/bitnami/kafka/bin/kafka-configs.sh \
         --zookeeper zookeeper-server3:2181 \

Reply via email to