aboutsummaryrefslogtreecommitdiff
path: root/seaweedfs-rdma-sidecar/scripts/run-mount-rdma-tests.sh
diff options
context:
space:
mode:
Diffstat (limited to 'seaweedfs-rdma-sidecar/scripts/run-mount-rdma-tests.sh')
-rwxr-xr-xseaweedfs-rdma-sidecar/scripts/run-mount-rdma-tests.sh335
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 "$@"