You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							150 lines
						
					
					
						
							4.4 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							150 lines
						
					
					
						
							4.4 KiB
						
					
					
				
								#!/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 from environment variables
							 | 
						|
								FILER_ADDR=${FILER_ADDR:-"seaweedfs-filer:8888"}
							 | 
						|
								RDMA_SIDECAR_ADDR=${RDMA_SIDECAR_ADDR:-"rdma-sidecar:8081"}
							 | 
						|
								MOUNT_POINT=${MOUNT_POINT:-"/mnt/seaweedfs"}
							 | 
						|
								RDMA_ENABLED=${RDMA_ENABLED:-"true"}
							 | 
						|
								RDMA_FALLBACK=${RDMA_FALLBACK:-"true"}
							 | 
						|
								RDMA_MAX_CONCURRENT=${RDMA_MAX_CONCURRENT:-"64"}
							 | 
						|
								RDMA_TIMEOUT_MS=${RDMA_TIMEOUT_MS:-"5000"}
							 | 
						|
								DEBUG=${DEBUG:-"false"}
							 | 
						|
								
							 | 
						|
								echo -e "${BLUE}🚀 SeaweedFS RDMA Mount Helper${NC}"
							 | 
						|
								echo "================================"
							 | 
						|
								echo "Filer Address: $FILER_ADDR"
							 | 
						|
								echo "RDMA Sidecar: $RDMA_SIDECAR_ADDR"
							 | 
						|
								echo "Mount Point: $MOUNT_POINT"
							 | 
						|
								echo "RDMA Enabled: $RDMA_ENABLED"
							 | 
						|
								echo "RDMA Fallback: $RDMA_FALLBACK"
							 | 
						|
								echo "Debug Mode: $DEBUG"
							 | 
						|
								echo ""
							 | 
						|
								
							 | 
						|
								# Function to wait for service
							 | 
						|
								wait_for_service() {
							 | 
						|
								    local name=$1
							 | 
						|
								    local url=$2
							 | 
						|
								    local max_attempts=30
							 | 
						|
								    local attempt=1
							 | 
						|
								    
							 | 
						|
								    echo -e "${BLUE}⏳ Waiting for $name to be ready...${NC}"
							 | 
						|
								    
							 | 
						|
								    while [[ $attempt -le $max_attempts ]]; do
							 | 
						|
								        if curl -s "$url" >/dev/null 2>&1; then
							 | 
						|
								            echo -e "${GREEN}✅ $name is ready${NC}"
							 | 
						|
								            return 0
							 | 
						|
								        fi
							 | 
						|
								        echo "   Attempt $attempt/$max_attempts..."
							 | 
						|
								        sleep 2
							 | 
						|
								        ((attempt++))
							 | 
						|
								    done
							 | 
						|
								    
							 | 
						|
								    echo -e "${RED}❌ $name failed to be ready within $max_attempts attempts${NC}"
							 | 
						|
								    return 1
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								# Function to check RDMA sidecar capabilities
							 | 
						|
								check_rdma_capabilities() {
							 | 
						|
								    echo -e "${BLUE}🔍 Checking RDMA capabilities...${NC}"
							 | 
						|
								    
							 | 
						|
								    local response
							 | 
						|
								    if response=$(curl -s "http://$RDMA_SIDECAR_ADDR/stats" 2>/dev/null); then
							 | 
						|
								        echo "RDMA Sidecar Stats:"
							 | 
						|
								        echo "$response" | jq . 2>/dev/null || echo "$response"
							 | 
						|
								        echo ""
							 | 
						|
								        
							 | 
						|
								        # Check if RDMA is actually enabled
							 | 
						|
								        if echo "$response" | grep -q '"rdma_enabled":true'; then
							 | 
						|
								            echo -e "${GREEN}✅ RDMA is enabled and ready${NC}"
							 | 
						|
								            return 0
							 | 
						|
								        else
							 | 
						|
								            echo -e "${YELLOW}⚠️  RDMA sidecar is running but RDMA is not enabled${NC}"
							 | 
						|
								            if [[ "$RDMA_FALLBACK" == "true" ]]; then
							 | 
						|
								                echo -e "${YELLOW}   Will use HTTP fallback${NC}"
							 | 
						|
								                return 0
							 | 
						|
								            else
							 | 
						|
								                return 1
							 | 
						|
								            fi
							 | 
						|
								        fi
							 | 
						|
								    else
							 | 
						|
								        echo -e "${RED}❌ Failed to get RDMA sidecar stats${NC}"
							 | 
						|
								        if [[ "$RDMA_FALLBACK" == "true" ]]; then
							 | 
						|
								            echo -e "${YELLOW}   Will use HTTP fallback${NC}"
							 | 
						|
								            return 0
							 | 
						|
								        else
							 | 
						|
								            return 1
							 | 
						|
								        fi
							 | 
						|
								    fi
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								# Function to cleanup on exit
							 | 
						|
								cleanup() {
							 | 
						|
								    echo -e "\n${YELLOW}🧹 Cleaning up...${NC}"
							 | 
						|
								    
							 | 
						|
								    # Unmount if mounted
							 | 
						|
								    if mountpoint -q "$MOUNT_POINT" 2>/dev/null; then
							 | 
						|
								        echo "📤 Unmounting $MOUNT_POINT..."
							 | 
						|
								        fusermount3 -u "$MOUNT_POINT" 2>/dev/null || umount "$MOUNT_POINT" 2>/dev/null || true
							 | 
						|
								        sleep 2
							 | 
						|
								    fi
							 | 
						|
								    
							 | 
						|
								    echo -e "${GREEN}✅ Cleanup complete${NC}"
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								trap cleanup EXIT INT TERM
							 | 
						|
								
							 | 
						|
								# Wait for required services
							 | 
						|
								echo -e "${BLUE}🔄 Waiting for required services...${NC}"
							 | 
						|
								wait_for_service "Filer" "http://$FILER_ADDR/"
							 | 
						|
								
							 | 
						|
								if [[ "$RDMA_ENABLED" == "true" ]]; then
							 | 
						|
								    wait_for_service "RDMA Sidecar" "http://$RDMA_SIDECAR_ADDR/health"
							 | 
						|
								    check_rdma_capabilities
							 | 
						|
								fi
							 | 
						|
								
							 | 
						|
								# Create mount point if it doesn't exist
							 | 
						|
								echo -e "${BLUE}📁 Preparing mount point...${NC}"
							 | 
						|
								mkdir -p "$MOUNT_POINT"
							 | 
						|
								
							 | 
						|
								# Check if already mounted
							 | 
						|
								if mountpoint -q "$MOUNT_POINT"; then
							 | 
						|
								    echo -e "${YELLOW}⚠️  $MOUNT_POINT is already mounted, unmounting first...${NC}"
							 | 
						|
								    fusermount3 -u "$MOUNT_POINT" 2>/dev/null || umount "$MOUNT_POINT" 2>/dev/null || true
							 | 
						|
								    sleep 2
							 | 
						|
								fi
							 | 
						|
								
							 | 
						|
								# Build mount command
							 | 
						|
								MOUNT_CMD="/usr/local/bin/weed mount"
							 | 
						|
								MOUNT_CMD="$MOUNT_CMD -filer=$FILER_ADDR"
							 | 
						|
								MOUNT_CMD="$MOUNT_CMD -dir=$MOUNT_POINT"
							 | 
						|
								MOUNT_CMD="$MOUNT_CMD -allowOthers=true"
							 | 
						|
								
							 | 
						|
								# Add RDMA options if enabled
							 | 
						|
								if [[ "$RDMA_ENABLED" == "true" ]]; then
							 | 
						|
								    MOUNT_CMD="$MOUNT_CMD -rdma.enabled=true"
							 | 
						|
								    MOUNT_CMD="$MOUNT_CMD -rdma.sidecar=$RDMA_SIDECAR_ADDR"
							 | 
						|
								    MOUNT_CMD="$MOUNT_CMD -rdma.fallback=$RDMA_FALLBACK"
							 | 
						|
								    MOUNT_CMD="$MOUNT_CMD -rdma.maxConcurrent=$RDMA_MAX_CONCURRENT"
							 | 
						|
								    MOUNT_CMD="$MOUNT_CMD -rdma.timeoutMs=$RDMA_TIMEOUT_MS"
							 | 
						|
								fi
							 | 
						|
								
							 | 
						|
								# Add debug options if enabled
							 | 
						|
								if [[ "$DEBUG" == "true" ]]; then
							 | 
						|
								    MOUNT_CMD="$MOUNT_CMD -debug=true -v=2"
							 | 
						|
								fi
							 | 
						|
								
							 | 
						|
								echo -e "${BLUE}🗂️  Starting SeaweedFS mount...${NC}"
							 | 
						|
								echo "Command: $MOUNT_CMD"
							 | 
						|
								echo ""
							 | 
						|
								
							 | 
						|
								# Execute mount command
							 | 
						|
								exec $MOUNT_CMD
							 |