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"