OpenMetadata/docker/development/distributed-test/scripts/start.sh
Sriharsha Chintalapani 89f627da81
Distributed Search Indexing with Push Notifications (#24939)
* Add Distributed Indexing in Multi-Server scenarios

* Add Distributed Indexing in Multi-Server scenarios

* Update generated TypeScript types

* Handle Servers leaving and joining

* Update generated TypeScript types

* spotless fix

* Refactor Code for Single Server and Multiple Server

* Add Metrics and Search Index Orphaned Cleanup

* Add Language

* Add Test settings

* Add Test data

* Add Test data

* Update generated TypeScript types

* Add Load Test for more entities

* Add Stats fix

* Add server information

* Fix Staging INdex unavailable to DistributedJobParticipant

* Fix Stats issue

* Align Tests

* Fix Stats and Error Handling

* participant stat fix

* Fix coordinator stats

* Add E2E failure tests

* Fix Stats for Reader and Sink

* Added flush for sinking stats

* Add language label

* Fix Entity Build Errors

* Missing commit

* Update generated TypeScript types

* Change runId to serverId

* Fix test failures

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Mohit Yadav <105265192+mohityadav766@users.noreply.github.com>
Co-authored-by: mohitdeuex <mohit.y@deuexsolutions.com>
2026-01-23 06:12:05 +05:30

126 lines
3.4 KiB
Bash
Executable file

#!/bin/bash
# Start the distributed test environment
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
ROOT_DIR="$(cd "$PROJECT_DIR/../../.." && pwd)"
cd "$PROJECT_DIR"
# Load environment variables (handle values with spaces properly)
if [ -f .env ]; then
set -a
source .env
set +a
fi
echo "======================================"
echo "Distributed Search Indexing Test Setup"
echo "======================================"
echo ""
echo "Configuration:"
echo " - MySQL Port: ${MYSQL_PORT:-3306}"
echo " - OpenSearch Port: ${OPENSEARCH_PORT:-9200}"
echo " - Server 1: http://localhost:8585"
echo " - Server 2: http://localhost:8587"
echo " - Server 3: http://localhost:8589"
echo ""
# Parse arguments
BUILD_FLAG=""
SKIP_MVN=false
for arg in "$@"; do
case $arg in
--build|-b)
BUILD_FLAG="--build"
;;
--skip-mvn|-s)
SKIP_MVN=true
;;
esac
done
# Check if distribution exists, if not build with Maven
DIST_TAR=$(find "$ROOT_DIR/openmetadata-dist/target" -name "openmetadata-*.tar.gz" 2>/dev/null | head -1)
if [ -z "$DIST_TAR" ] && [ "$SKIP_MVN" != "true" ]; then
echo "OpenMetadata distribution not found. Building with Maven..."
echo "This may take several minutes on first run."
echo ""
cd "$ROOT_DIR"
mvn clean install -DskipTests -Pquickstart -pl '!openmetadata-ui' -am
cd "$PROJECT_DIR"
BUILD_FLAG="--build"
echo ""
echo "Maven build complete."
elif [ "$SKIP_MVN" == "true" ]; then
echo "Skipping Maven build (--skip-mvn flag)"
fi
if [ -n "$BUILD_FLAG" ]; then
echo "Building Docker images..."
fi
# Start the services
echo "Starting services..."
docker compose up -d $BUILD_FLAG
echo ""
echo "Waiting for services to be healthy..."
# Wait for MySQL
echo -n " MySQL: "
until docker compose exec -T mysql mysqladmin ping -h localhost -uroot -p${MYSQL_ROOT_PASSWORD:-password} --silent 2>/dev/null; do
echo -n "."
sleep 2
done
echo " Ready"
# Wait for OpenSearch
echo -n " OpenSearch: "
until curl -s http://localhost:${OPENSEARCH_PORT:-9200}/_cluster/health 2>/dev/null | grep -qE '"status":"(green|yellow)"'; do
echo -n "."
sleep 2
done
echo " Ready"
# Wait for each OM server
for server_num in 1 2 3; do
case $server_num in
1) port=8586 ;;
2) port=8588 ;;
3) port=8590 ;;
esac
echo -n " Server $server_num (admin port $port): "
timeout=120
elapsed=0
until curl -s "http://localhost:$port/healthcheck" >/dev/null 2>&1; do
echo -n "."
sleep 3
elapsed=$((elapsed + 3))
if [ $elapsed -ge $timeout ]; then
echo " Timeout waiting for server $server_num"
echo "Check logs with: ./scripts/logs.sh -f --server $server_num"
exit 1
fi
done
echo " Ready"
done
echo ""
echo "======================================"
echo "All services are up and running!"
echo "======================================"
echo ""
echo "Next steps:"
echo " 1. Load test data: ./scripts/load-test-data.sh --tables 10000"
echo " 2. Trigger reindexing: ./scripts/trigger-reindex.sh"
echo " 3. Watch logs: ./scripts/logs.sh -f"
echo ""
echo "Server endpoints:"
echo " - Server 1: http://localhost:8585 (trigger reindex here)"
echo " - Server 2: http://localhost:8587"
echo " - Server 3: http://localhost:8589"
echo ""