aboutsummaryrefslogtreecommitdiff
path: root/test/kafka/kafka-client-loadtest/scripts/test-retry-logic.sh
diff options
context:
space:
mode:
Diffstat (limited to 'test/kafka/kafka-client-loadtest/scripts/test-retry-logic.sh')
-rwxr-xr-xtest/kafka/kafka-client-loadtest/scripts/test-retry-logic.sh151
1 files changed, 151 insertions, 0 deletions
diff --git a/test/kafka/kafka-client-loadtest/scripts/test-retry-logic.sh b/test/kafka/kafka-client-loadtest/scripts/test-retry-logic.sh
new file mode 100755
index 000000000..e1a2f73e2
--- /dev/null
+++ b/test/kafka/kafka-client-loadtest/scripts/test-retry-logic.sh
@@ -0,0 +1,151 @@
+#!/bin/bash
+
+# Test script to verify the retry logic works correctly
+# Simulates Schema Registry eventual consistency behavior
+
+set -euo pipefail
+
+# Colors
+RED='\033[0;31m'
+GREEN='\033[0;32m'
+YELLOW='\033[0;33m'
+BLUE='\033[0;34m'
+NC='\033[0m'
+
+log_info() {
+ echo -e "${BLUE}[TEST]${NC} $1"
+}
+
+log_success() {
+ echo -e "${GREEN}[PASS]${NC} $1"
+}
+
+log_error() {
+ echo -e "${RED}[FAIL]${NC} $1"
+}
+
+# Mock function that simulates Schema Registry eventual consistency
+# First N attempts fail, then succeeds
+mock_schema_registry_query() {
+ local subject=$1
+ local min_attempts_to_succeed=$2
+ local current_attempt=$3
+
+ if [[ $current_attempt -ge $min_attempts_to_succeed ]]; then
+ # Simulate successful response
+ echo '{"id":1,"version":1,"schema":"test"}'
+ return 0
+ else
+ # Simulate 404 Not Found
+ echo '{"error_code":40401,"message":"Subject not found"}'
+ return 1
+ fi
+}
+
+# Simulate verify_schema_with_retry logic
+test_verify_with_retry() {
+ local subject=$1
+ local min_attempts_to_succeed=$2
+ local max_attempts=5
+ local attempt=1
+
+ log_info "Testing $subject (should succeed after $min_attempts_to_succeed attempts)"
+
+ while [[ $attempt -le $max_attempts ]]; do
+ local response
+ if response=$(mock_schema_registry_query "$subject" "$min_attempts_to_succeed" "$attempt"); then
+ if echo "$response" | grep -q '"id"'; then
+ if [[ $attempt -gt 1 ]]; then
+ log_success "$subject verified after $attempt attempts"
+ else
+ log_success "$subject verified on first attempt"
+ fi
+ return 0
+ fi
+ fi
+
+ # Schema not found, wait and retry
+ if [[ $attempt -lt $max_attempts ]]; then
+ # Exponential backoff: 0.1s, 0.2s, 0.4s, 0.8s
+ local wait_time=$(echo "scale=3; 0.1 * (2 ^ ($attempt - 1))" | bc)
+ log_info " Attempt $attempt failed, waiting ${wait_time}s before retry..."
+ sleep "$wait_time"
+ attempt=$((attempt + 1))
+ else
+ log_error "$subject verification failed after $max_attempts attempts"
+ return 1
+ fi
+ done
+
+ return 1
+}
+
+# Run tests
+log_info "=========================================="
+log_info "Testing Schema Registry Retry Logic"
+log_info "=========================================="
+echo ""
+
+# Test 1: Schema available immediately
+log_info "Test 1: Schema available immediately"
+if test_verify_with_retry "immediate-schema" 1; then
+ log_success "✓ Test 1 passed"
+else
+ log_error "✗ Test 1 failed"
+ exit 1
+fi
+echo ""
+
+# Test 2: Schema available after 2 attempts (200ms delay)
+log_info "Test 2: Schema available after 2 attempts"
+if test_verify_with_retry "delayed-schema-2" 2; then
+ log_success "✓ Test 2 passed"
+else
+ log_error "✗ Test 2 failed"
+ exit 1
+fi
+echo ""
+
+# Test 3: Schema available after 3 attempts (600ms delay)
+log_info "Test 3: Schema available after 3 attempts"
+if test_verify_with_retry "delayed-schema-3" 3; then
+ log_success "✓ Test 3 passed"
+else
+ log_error "✗ Test 3 failed"
+ exit 1
+fi
+echo ""
+
+# Test 4: Schema available after 4 attempts (1400ms delay)
+log_info "Test 4: Schema available after 4 attempts"
+if test_verify_with_retry "delayed-schema-4" 4; then
+ log_success "✓ Test 4 passed"
+else
+ log_error "✗ Test 4 failed"
+ exit 1
+fi
+echo ""
+
+# Test 5: Schema never available (should fail)
+log_info "Test 5: Schema never available (should fail gracefully)"
+if test_verify_with_retry "missing-schema" 10; then
+ log_error "✗ Test 5 failed (should have failed but passed)"
+ exit 1
+else
+ log_success "✓ Test 5 passed (correctly failed after max attempts)"
+fi
+echo ""
+
+log_success "=========================================="
+log_success "All tests passed! ✓"
+log_success "=========================================="
+log_info ""
+log_info "Summary:"
+log_info "- Immediate availability: works ✓"
+log_info "- 2-4 retry attempts: works ✓"
+log_info "- Max attempts handling: works ✓"
+log_info "- Exponential backoff: works ✓"
+log_info ""
+log_info "Total retry time budget: ~1.5 seconds (0.1+0.2+0.4+0.8)"
+log_info "This should handle Schema Registry consumer lag gracefully."
+