diff options
Diffstat (limited to 'seaweedfs-rdma-sidecar/scripts/mount-helper.sh')
| -rwxr-xr-x | seaweedfs-rdma-sidecar/scripts/mount-helper.sh | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/seaweedfs-rdma-sidecar/scripts/mount-helper.sh b/seaweedfs-rdma-sidecar/scripts/mount-helper.sh new file mode 100755 index 000000000..4159dd180 --- /dev/null +++ b/seaweedfs-rdma-sidecar/scripts/mount-helper.sh @@ -0,0 +1,150 @@ +#!/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 |
