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.
		
		
		
		
		
			
		
			
				
					
					
						
							209 lines
						
					
					
						
							5.6 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							209 lines
						
					
					
						
							5.6 KiB
						
					
					
				
								services:
							 | 
						|
								  # SeaweedFS Master Server
							 | 
						|
								  seaweedfs-master:
							 | 
						|
								    image: chrislusf/seaweedfs:latest
							 | 
						|
								    container_name: seaweedfs-master
							 | 
						|
								    command: master -ip=seaweedfs-master -port=9333 -mdir=/data
							 | 
						|
								    ports:
							 | 
						|
								      - "9333:9333"
							 | 
						|
								    volumes:
							 | 
						|
								      - master-data:/data
							 | 
						|
								    networks:
							 | 
						|
								      - seaweedfs-rdma
							 | 
						|
								    healthcheck:
							 | 
						|
								      test: ["CMD", "pgrep", "-f", "weed"]
							 | 
						|
								      interval: 15s
							 | 
						|
								      timeout: 10s
							 | 
						|
								      retries: 5
							 | 
						|
								      start_period: 30s
							 | 
						|
								
							 | 
						|
								  # SeaweedFS Volume Server
							 | 
						|
								  seaweedfs-volume:
							 | 
						|
								    image: chrislusf/seaweedfs:latest
							 | 
						|
								    container_name: seaweedfs-volume
							 | 
						|
								    command: volume -mserver=seaweedfs-master:9333 -ip=seaweedfs-volume -port=8080 -dir=/data
							 | 
						|
								    ports:
							 | 
						|
								      - "8080:8080"
							 | 
						|
								    volumes:
							 | 
						|
								      - volume-data:/data
							 | 
						|
								    depends_on:
							 | 
						|
								      seaweedfs-master:
							 | 
						|
								        condition: service_healthy
							 | 
						|
								    networks:
							 | 
						|
								      - seaweedfs-rdma
							 | 
						|
								    healthcheck:
							 | 
						|
								      test: ["CMD", "pgrep", "-f", "weed"]
							 | 
						|
								      interval: 15s
							 | 
						|
								      timeout: 10s
							 | 
						|
								      retries: 5
							 | 
						|
								      start_period: 30s
							 | 
						|
								
							 | 
						|
								  # RDMA Simulation Environment
							 | 
						|
								  rdma-simulation:
							 | 
						|
								    build:
							 | 
						|
								      context: .
							 | 
						|
								      dockerfile: docker/Dockerfile.rdma-simulation
							 | 
						|
								    container_name: rdma-simulation
							 | 
						|
								    privileged: true  # Required for RDMA kernel module loading
							 | 
						|
								    environment:
							 | 
						|
								      - RDMA_DEVICE=rxe0
							 | 
						|
								      - UCX_TLS=rc_verbs,ud_verbs,tcp
							 | 
						|
								      - UCX_LOG_LEVEL=info
							 | 
						|
								    volumes:
							 | 
						|
								      - /lib/modules:/lib/modules:ro  # Host kernel modules
							 | 
						|
								      - /sys:/sys  # Required for sysfs access
							 | 
						|
								      - rdma-simulation-data:/opt/rdma-sim/data
							 | 
						|
								    networks:
							 | 
						|
								      - seaweedfs-rdma
							 | 
						|
								    ports:
							 | 
						|
								      - "18515:18515"  # RDMA application port
							 | 
						|
								      - "4791:4791"    # RDMA CM port
							 | 
						|
								      - "4792:4792"    # Additional RDMA port
							 | 
						|
								    command: |
							 | 
						|
								      bash -c "
							 | 
						|
								        echo '🚀 Setting up RDMA simulation environment...'
							 | 
						|
								        sudo /opt/rdma-sim/setup-soft-roce.sh || echo 'RDMA setup failed, continuing...'
							 | 
						|
								        echo '📋 RDMA environment status:'
							 | 
						|
								        /opt/rdma-sim/test-rdma.sh || true
							 | 
						|
								        echo '🔧 UCX information:'
							 | 
						|
								        /opt/rdma-sim/ucx-info.sh || true
							 | 
						|
								        echo '✅ RDMA simulation ready - keeping container alive...'
							 | 
						|
								        tail -f /dev/null
							 | 
						|
								      "      
							 | 
						|
								    healthcheck:
							 | 
						|
								      test: ["CMD", "test", "-f", "/opt/rdma-sim/setup-soft-roce.sh"]
							 | 
						|
								      interval: 30s
							 | 
						|
								      timeout: 10s
							 | 
						|
								      retries: 3
							 | 
						|
								      start_period: 30s
							 | 
						|
								
							 | 
						|
								  # Rust RDMA Engine (with RDMA simulation support)
							 | 
						|
								  rdma-engine:
							 | 
						|
								    build:
							 | 
						|
								      context: .
							 | 
						|
								      dockerfile: Dockerfile.rdma-engine
							 | 
						|
								    container_name: rdma-engine
							 | 
						|
								    environment:
							 | 
						|
								      - RUST_LOG=debug
							 | 
						|
								      - RDMA_SOCKET_PATH=/tmp/rdma-engine.sock
							 | 
						|
								      # UCX configuration for real RDMA
							 | 
						|
								      - UCX_TLS=rc_verbs,ud_verbs,tcp,shm
							 | 
						|
								      - UCX_NET_DEVICES=all
							 | 
						|
								      - UCX_LOG_LEVEL=info
							 | 
						|
								      - UCX_RNDV_SCHEME=put_zcopy
							 | 
						|
								      - UCX_RNDV_THRESH=8192
							 | 
						|
								    volumes:
							 | 
						|
								      - rdma-socket:/tmp
							 | 
						|
								      # Share network namespace with RDMA simulation for device access
							 | 
						|
								    network_mode: "container:rdma-simulation"
							 | 
						|
								    depends_on:
							 | 
						|
								      rdma-simulation:
							 | 
						|
								        condition: service_healthy
							 | 
						|
								    command: ["./rdma-engine-server", "--debug", "--ipc-socket", "/tmp/rdma-engine.sock"]
							 | 
						|
								    healthcheck:
							 | 
						|
								      test: ["CMD", "test", "-S", "/tmp/rdma-engine.sock"]
							 | 
						|
								      interval: 10s
							 | 
						|
								      timeout: 5s
							 | 
						|
								      retries: 3
							 | 
						|
								      start_period: 15s
							 | 
						|
								
							 | 
						|
								  # Go RDMA Sidecar / Demo Server
							 | 
						|
								  rdma-sidecar:
							 | 
						|
								    build:
							 | 
						|
								      context: .
							 | 
						|
								      dockerfile: Dockerfile.sidecar
							 | 
						|
								    container_name: rdma-sidecar
							 | 
						|
								    ports:
							 | 
						|
								      - "8081:8081"
							 | 
						|
								    environment:
							 | 
						|
								      - RDMA_SOCKET_PATH=/tmp/rdma-engine.sock
							 | 
						|
								      - VOLUME_SERVER_URL=http://seaweedfs-volume:8080
							 | 
						|
								      - DEBUG=true
							 | 
						|
								    volumes:
							 | 
						|
								      - rdma-socket:/tmp
							 | 
						|
								    depends_on:
							 | 
						|
								      rdma-engine:
							 | 
						|
								        condition: service_healthy
							 | 
						|
								      seaweedfs-volume:
							 | 
						|
								        condition: service_healthy
							 | 
						|
								    networks:
							 | 
						|
								      - seaweedfs-rdma
							 | 
						|
								    command: [
							 | 
						|
								      "./demo-server",
							 | 
						|
								      "--port", "8081",
							 | 
						|
								      "--rdma-socket", "/tmp/rdma-engine.sock",
							 | 
						|
								      "--volume-server", "http://seaweedfs-volume:8080",
							 | 
						|
								      "--enable-rdma",
							 | 
						|
								      "--debug"
							 | 
						|
								    ]
							 | 
						|
								    healthcheck:
							 | 
						|
								      test: ["CMD", "curl", "-f", "http://localhost:8081/health"]
							 | 
						|
								      interval: 10s
							 | 
						|
								      timeout: 5s
							 | 
						|
								      retries: 3
							 | 
						|
								      start_period: 20s
							 | 
						|
								
							 | 
						|
								  # Test Client for Integration Testing
							 | 
						|
								  test-client:
							 | 
						|
								    build:
							 | 
						|
								      context: .
							 | 
						|
								      dockerfile: Dockerfile.test-client
							 | 
						|
								    container_name: test-client
							 | 
						|
								    environment:
							 | 
						|
								      - RDMA_SOCKET_PATH=/tmp/rdma-engine.sock
							 | 
						|
								      - SIDECAR_URL=http://rdma-sidecar:8081
							 | 
						|
								      - SEAWEEDFS_MASTER=http://seaweedfs-master:9333
							 | 
						|
								      - SEAWEEDFS_VOLUME=http://seaweedfs-volume:8080
							 | 
						|
								    volumes:
							 | 
						|
								      - rdma-socket:/tmp
							 | 
						|
								    depends_on:
							 | 
						|
								      rdma-sidecar:
							 | 
						|
								        condition: service_healthy
							 | 
						|
								    networks:
							 | 
						|
								      - seaweedfs-rdma
							 | 
						|
								    profiles:
							 | 
						|
								      - testing
							 | 
						|
								    command: ["tail", "-f", "/dev/null"]  # Keep container running for manual testing
							 | 
						|
								
							 | 
						|
								  # Integration Test Runner with RDMA
							 | 
						|
								  integration-tests-rdma:
							 | 
						|
								    build:
							 | 
						|
								      context: .
							 | 
						|
								      dockerfile: Dockerfile.test-client
							 | 
						|
								    container_name: integration-tests-rdma
							 | 
						|
								    environment:
							 | 
						|
								      - RDMA_SOCKET_PATH=/tmp/rdma-engine.sock
							 | 
						|
								      - SIDECAR_URL=http://rdma-sidecar:8081
							 | 
						|
								      - SEAWEEDFS_MASTER=http://seaweedfs-master:9333
							 | 
						|
								      - SEAWEEDFS_VOLUME=http://seaweedfs-volume:8080
							 | 
						|
								      - RDMA_SIMULATION=true
							 | 
						|
								    volumes:
							 | 
						|
								      - rdma-socket:/tmp
							 | 
						|
								      - ./tests:/tests
							 | 
						|
								    depends_on:
							 | 
						|
								      rdma-sidecar:
							 | 
						|
								        condition: service_healthy
							 | 
						|
								      rdma-simulation:
							 | 
						|
								        condition: service_healthy
							 | 
						|
								    networks:
							 | 
						|
								      - seaweedfs-rdma
							 | 
						|
								    profiles:
							 | 
						|
								      - testing
							 | 
						|
								    command: ["/tests/run-integration-tests.sh"]
							 | 
						|
								
							 | 
						|
								volumes:
							 | 
						|
								  master-data:
							 | 
						|
								    driver: local
							 | 
						|
								  volume-data:
							 | 
						|
								    driver: local
							 | 
						|
								  rdma-socket:
							 | 
						|
								    driver: local
							 | 
						|
								  rdma-simulation-data:
							 | 
						|
								    driver: local
							 | 
						|
								
							 | 
						|
								networks:
							 | 
						|
								  seaweedfs-rdma:
							 | 
						|
								    driver: bridge
							 | 
						|
								    ipam:
							 | 
						|
								      config:
							 | 
						|
								        - subnet: 172.20.0.0/16
							 |