diff options
Diffstat (limited to 'seaweedfs-rdma-sidecar/scripts/run-mount-rdma-tests.sh')
| -rwxr-xr-x | seaweedfs-rdma-sidecar/scripts/run-mount-rdma-tests.sh | 335 |
1 files changed, 335 insertions, 0 deletions
diff --git a/seaweedfs-rdma-sidecar/scripts/run-mount-rdma-tests.sh b/seaweedfs-rdma-sidecar/scripts/run-mount-rdma-tests.sh new file mode 100755 index 000000000..e4237a5a2 --- /dev/null +++ b/seaweedfs-rdma-sidecar/scripts/run-mount-rdma-tests.sh @@ -0,0 +1,335 @@ +#!/bin/bash + +set -euo pipefail + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +BLUE='\033[0;34m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +# Configuration +COMPOSE_FILE="docker-compose.mount-rdma.yml" +PROJECT_NAME="seaweedfs-rdma-mount" + +# Function to show usage +show_usage() { + echo -e "${BLUE}๐ SeaweedFS RDMA Mount Test Runner${NC}" + echo "====================================" + echo "" + echo "Usage: $0 [COMMAND] [OPTIONS]" + echo "" + echo "Commands:" + echo " start Start the RDMA mount environment" + echo " stop Stop and cleanup the environment" + echo " restart Restart the environment" + echo " status Show status of all services" + echo " logs [service] Show logs for all services or specific service" + echo " test Run integration tests" + echo " perf Run performance tests" + echo " shell Open shell in mount container" + echo " cleanup Full cleanup including volumes" + echo "" + echo "Services:" + echo " seaweedfs-master SeaweedFS master server" + echo " seaweedfs-volume SeaweedFS volume server" + echo " seaweedfs-filer SeaweedFS filer server" + echo " rdma-engine RDMA engine (Rust)" + echo " rdma-sidecar RDMA sidecar (Go)" + echo " seaweedfs-mount SeaweedFS mount with RDMA" + echo "" + echo "Examples:" + echo " $0 start # Start all services" + echo " $0 logs seaweedfs-mount # Show mount logs" + echo " $0 test # Run integration tests" + echo " $0 perf # Run performance tests" + echo " $0 shell # Open shell in mount container" +} + +# Function to check if Docker Compose is available +check_docker_compose() { + if ! command -v docker-compose >/dev/null 2>&1 && ! docker compose version >/dev/null 2>&1; then + echo -e "${RED}โ Docker Compose is not available${NC}" + echo "Please install Docker Compose to continue" + exit 1 + fi + + # Use docker compose if available, otherwise docker-compose + if docker compose version >/dev/null 2>&1; then + DOCKER_COMPOSE="docker compose" + else + DOCKER_COMPOSE="docker-compose" + fi +} + +# Function to build required images +build_images() { + echo -e "${BLUE}๐จ Building required Docker images...${NC}" + + # Build SeaweedFS binary first + echo "Building SeaweedFS binary..." + cd .. + make + cd seaweedfs-rdma-sidecar + + # Copy binary for Docker builds + mkdir -p bin + if [[ -f "../weed" ]]; then + cp ../weed bin/ + elif [[ -f "../bin/weed" ]]; then + cp ../bin/weed bin/ + elif [[ -f "../build/weed" ]]; then + cp ../build/weed bin/ + else + echo "Error: Cannot find weed binary" + find .. -name "weed" -type f + exit 1 + fi + + # Build RDMA sidecar + echo "Building RDMA sidecar..." + go build -o bin/demo-server cmd/sidecar/main.go + + # Build Docker images + $DOCKER_COMPOSE -f "$COMPOSE_FILE" -p "$PROJECT_NAME" build + + echo -e "${GREEN}โ
Images built successfully${NC}" +} + +# Function to start services +start_services() { + echo -e "${BLUE}๐ Starting SeaweedFS RDMA Mount environment...${NC}" + + # Build images if needed + if [[ ! -f "bin/weed" ]] || [[ ! -f "bin/demo-server" ]]; then + build_images + fi + + # Start services + $DOCKER_COMPOSE -f "$COMPOSE_FILE" -p "$PROJECT_NAME" up -d + + echo -e "${GREEN}โ
Services started${NC}" + echo "" + echo "Services are starting up. Use '$0 status' to check their status." + echo "Use '$0 logs' to see the logs." +} + +# Function to stop services +stop_services() { + echo -e "${BLUE}๐ Stopping SeaweedFS RDMA Mount environment...${NC}" + + $DOCKER_COMPOSE -f "$COMPOSE_FILE" -p "$PROJECT_NAME" down + + echo -e "${GREEN}โ
Services stopped${NC}" +} + +# Function to restart services +restart_services() { + echo -e "${BLUE}๐ Restarting SeaweedFS RDMA Mount environment...${NC}" + + stop_services + sleep 2 + start_services +} + +# Function to show status +show_status() { + echo -e "${BLUE}๐ Service Status${NC}" + echo "================" + + $DOCKER_COMPOSE -f "$COMPOSE_FILE" -p "$PROJECT_NAME" ps + + echo "" + echo -e "${BLUE}๐ Health Checks${NC}" + echo "===============" + + # Check individual services + check_service_health "SeaweedFS Master" "http://localhost:9333/cluster/status" + check_service_health "SeaweedFS Volume" "http://localhost:8080/status" + check_service_health "SeaweedFS Filer" "http://localhost:8888/" + check_service_health "RDMA Sidecar" "http://localhost:8081/health" + + # Check mount status + echo -n "SeaweedFS Mount: " + if docker exec "${PROJECT_NAME}-seaweedfs-mount-1" mountpoint -q /mnt/seaweedfs 2>/dev/null; then + echo -e "${GREEN}โ
Mounted${NC}" + else + echo -e "${RED}โ Not mounted${NC}" + fi +} + +# Function to check service health +check_service_health() { + local service_name=$1 + local health_url=$2 + + echo -n "$service_name: " + if curl -s "$health_url" >/dev/null 2>&1; then + echo -e "${GREEN}โ
Healthy${NC}" + else + echo -e "${RED}โ Unhealthy${NC}" + fi +} + +# Function to show logs +show_logs() { + local service=$1 + + if [[ -n "$service" ]]; then + echo -e "${BLUE}๐ Logs for $service${NC}" + echo "====================" + $DOCKER_COMPOSE -f "$COMPOSE_FILE" -p "$PROJECT_NAME" logs -f "$service" + else + echo -e "${BLUE}๐ Logs for all services${NC}" + echo "=======================" + $DOCKER_COMPOSE -f "$COMPOSE_FILE" -p "$PROJECT_NAME" logs -f + fi +} + +# Function to run integration tests +run_integration_tests() { + echo -e "${BLUE}๐งช Running integration tests...${NC}" + + # Make sure services are running + if ! $DOCKER_COMPOSE -f "$COMPOSE_FILE" -p "$PROJECT_NAME" ps | grep -q "Up"; then + echo -e "${RED}โ Services are not running. Start them first with '$0 start'${NC}" + exit 1 + fi + + # Run integration tests + $DOCKER_COMPOSE -f "$COMPOSE_FILE" -p "$PROJECT_NAME" --profile test run --rm integration-test + + # Show results + if [[ -d "./test-results" ]]; then + echo -e "${BLUE}๐ Test Results${NC}" + echo "===============" + + if [[ -f "./test-results/overall.result" ]]; then + local result + result=$(cat "./test-results/overall.result") + if [[ "$result" == "SUCCESS" ]]; then + echo -e "${GREEN}๐ ALL TESTS PASSED!${NC}" + else + echo -e "${RED}๐ฅ SOME TESTS FAILED!${NC}" + fi + fi + + echo "" + echo "Detailed results available in: ./test-results/" + ls -la ./test-results/ + fi +} + +# Function to run performance tests +run_performance_tests() { + echo -e "${BLUE}๐ Running performance tests...${NC}" + + # Make sure services are running + if ! $DOCKER_COMPOSE -f "$COMPOSE_FILE" -p "$PROJECT_NAME" ps | grep -q "Up"; then + echo -e "${RED}โ Services are not running. Start them first with '$0 start'${NC}" + exit 1 + fi + + # Run performance tests + $DOCKER_COMPOSE -f "$COMPOSE_FILE" -p "$PROJECT_NAME" --profile performance run --rm performance-test + + # Show results + if [[ -d "./performance-results" ]]; then + echo -e "${BLUE}๐ Performance Results${NC}" + echo "======================" + echo "" + echo "Results available in: ./performance-results/" + ls -la ./performance-results/ + + if [[ -f "./performance-results/performance_report.html" ]]; then + echo "" + echo -e "${GREEN}๐ HTML Report: ./performance-results/performance_report.html${NC}" + fi + fi +} + +# Function to open shell in mount container +open_shell() { + echo -e "${BLUE}๐ Opening shell in mount container...${NC}" + + if ! $DOCKER_COMPOSE -f "$COMPOSE_FILE" -p "$PROJECT_NAME" ps seaweedfs-mount | grep -q "Up"; then + echo -e "${RED}โ Mount container is not running${NC}" + exit 1 + fi + + docker exec -it "${PROJECT_NAME}-seaweedfs-mount-1" /bin/bash +} + +# Function to cleanup everything +cleanup_all() { + echo -e "${BLUE}๐งน Full cleanup...${NC}" + + # Stop services + $DOCKER_COMPOSE -f "$COMPOSE_FILE" -p "$PROJECT_NAME" down -v --remove-orphans + + # Remove images + echo "Removing Docker images..." + docker images | grep "$PROJECT_NAME" | awk '{print $3}' | xargs -r docker rmi -f + + # Clean up local files + rm -rf bin/ test-results/ performance-results/ + + echo -e "${GREEN}โ
Full cleanup completed${NC}" +} + +# Main function +main() { + local command=${1:-""} + + # Check Docker Compose availability + check_docker_compose + + case "$command" in + "start") + start_services + ;; + "stop") + stop_services + ;; + "restart") + restart_services + ;; + "status") + show_status + ;; + "logs") + show_logs "${2:-}" + ;; + "test") + run_integration_tests + ;; + "perf") + run_performance_tests + ;; + "shell") + open_shell + ;; + "cleanup") + cleanup_all + ;; + "build") + build_images + ;; + "help"|"-h"|"--help") + show_usage + ;; + "") + show_usage + ;; + *) + echo -e "${RED}โ Unknown command: $command${NC}" + echo "" + show_usage + exit 1 + ;; + esac +} + +# Run main function with all arguments +main "$@" |
