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