From 47e1ee6d5ea27115fb8a4ff273374332ca5eea29 Mon Sep 17 00:00:00 2001 From: Alok Kumar Singh <62210712+akstron@users.noreply.github.com> Date: Sun, 17 Nov 2024 12:24:46 +0530 Subject: [PATCH] Pass username/password to Cassandra docker-compose health check (#6214) ## Which problem is this PR solving? - Resolves #6215 ## Description of the changes - Added the username and password values for health check cmd - Added `healthcheck_cassandra` point to make sure the container is healthy as per the cmd. ## How was this change tested? - bash scripts/cassandra-integration-test.sh 4 v004 v1 - bash scripts/cassandra-integration-test.sh 4 v004 v2 ## Checklist - [x] I have read https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md - [x] I have signed all commits - [ ] I have added unit tests for the new functionality - [x] I have run lint and test steps successfully - for `jaeger`: `make lint test` - for `jaeger-ui`: `yarn lint` and `yarn test` --------- Signed-off-by: Alok Kumar Singh --- .../cassandra/v4/docker-compose.yaml | 3 ++- .../cassandra/v5/docker-compose.yaml | 3 ++- scripts/cassandra-integration-test.sh | 24 +++++++++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/docker-compose/cassandra/v4/docker-compose.yaml b/docker-compose/cassandra/v4/docker-compose.yaml index 196a1b62225..b18539798bc 100644 --- a/docker-compose/cassandra/v4/docker-compose.yaml +++ b/docker-compose/cassandra/v4/docker-compose.yaml @@ -1,6 +1,7 @@ services: cassandra: image: cassandra:4.1 + container_name: "cassandra-4" ports: - "9042:9042" - "9160:9160" @@ -11,7 +12,7 @@ services: networks: - cassandra-net healthcheck: - test: ["CMD", "cqlsh", "-e", "describe keyspaces"] + test: ["CMD", "cqlsh", "-u", "cassandra", "-p", "cassandra", "-e", "describe keyspaces"] interval: 30s timeout: 10s retries: 5 diff --git a/docker-compose/cassandra/v5/docker-compose.yaml b/docker-compose/cassandra/v5/docker-compose.yaml index 282b77f60fb..f407b2d3550 100644 --- a/docker-compose/cassandra/v5/docker-compose.yaml +++ b/docker-compose/cassandra/v5/docker-compose.yaml @@ -1,6 +1,7 @@ services: cassandra: image: cassandra:5.0 + container_name: "cassandra-5" ports: - "9042:9042" - "9160:9160" @@ -11,7 +12,7 @@ services: networks: - cassandra-net healthcheck: - test: ["CMD", "cqlsh", "-e", "describe keyspaces"] + test: ["CMD", "cqlsh", "-u", "cassandra", "-p", "cassandra", "-e", "describe keyspaces"] interval: 30s timeout: 10s retries: 5 diff --git a/scripts/cassandra-integration-test.sh b/scripts/cassandra-integration-test.sh index 53a547ddb45..9f5e295bc3c 100755 --- a/scripts/cassandra-integration-test.sh +++ b/scripts/cassandra-integration-test.sh @@ -8,6 +8,8 @@ set -euxf -o pipefail export CASSANDRA_USERNAME="cassandra" export CASSANDRA_PASSWORD="cassandra" success="false" +timeout=600 +end_time=$((SECONDS + timeout)) usage() { echo $"Usage: $0 " @@ -26,6 +28,26 @@ setup_cassandra() { docker compose -f "$compose_file" up -d } +healthcheck_cassandra() { + local cas_version=$1 + local container_name="cassandra-${cas_version}" + # Since the healthcheck in cassandra is done at the interval of 30s + local wait_seconds=30 + + while [ $SECONDS -lt $end_time ]; do + status=$(docker inspect -f '{{ .State.Health.Status }}' "${container_name}") + if [[ ${status} == "healthy" ]]; then + echo "✅ $container_name is healthy" + return 0 + fi + echo "Waiting for $container_name to be healthy. Current status: $status" + sleep $wait_seconds + done + + echo "❌ ERROR: $container_name did not become healthy in time" + exit 1 +} + dump_logs() { local compose_file=$1 echo "::group::🚧 🚧 🚧 Cassandra logs" @@ -74,6 +96,8 @@ run_integration_test() { # shellcheck disable=SC2064 trap "teardown_cassandra ${compose_file}" EXIT + healthcheck_cassandra "${major_version}" + apply_schema "$schema_version" "$primaryKeyspace" apply_schema "$schema_version" "$archiveKeyspace"