# SeaweedFS Admin Integration Test Makefile # Tests the admin server and worker functionality using official weed commands .PHONY: help build build-and-restart restart-workers start stop restart logs clean status test admin-ui worker-logs master-logs admin-logs vacuum-test vacuum-demo vacuum-status vacuum-data vacuum-data-high vacuum-data-low vacuum-continuous vacuum-clean vacuum-help .DEFAULT_GOAL := help COMPOSE_FILE := docker-compose-ec-test.yml PROJECT_NAME := admin_integration build: ## Build SeaweedFS with latest changes and create Docker image @echo "๐Ÿ”จ Building SeaweedFS with latest changes..." @echo "1๏ธโƒฃ Generating admin templates..." @cd ../../ && make admin-generate @echo "2๏ธโƒฃ Building Docker image with latest changes..." @cd ../ && make build @echo "3๏ธโƒฃ Copying binary for local docker-compose..." @cp ../weed ./weed-local @echo "โœ… Build complete! Updated image: chrislusf/seaweedfs:local" @echo "๐Ÿ’ก Run 'make restart' to apply changes to running services" build-and-restart: build ## Build with latest changes and restart services @echo "๐Ÿ”„ Recreating services with new image..." @echo "1๏ธโƒฃ Recreating admin server with new image..." @docker-compose -f $(COMPOSE_FILE) up -d admin @sleep 5 @echo "2๏ธโƒฃ Recreating workers to reconnect..." @docker-compose -f $(COMPOSE_FILE) up -d worker1 worker2 worker3 @echo "โœ… All services recreated with latest changes!" @echo "๐ŸŒ Admin UI: http://localhost:23646/" @echo "๐Ÿ’ก Workers will reconnect to the new admin server" restart-workers: ## Restart all workers to reconnect to admin server @echo "๐Ÿ”„ Restarting workers to reconnect to admin server..." @docker-compose -f $(COMPOSE_FILE) restart worker1 worker2 worker3 @echo "โœ… Workers restarted and will reconnect to admin server" help: ## Show this help message @echo "SeaweedFS Admin Integration Test" @echo "================================" @echo "Tests admin server task distribution to workers using official weed commands" @echo "" @echo "๐Ÿ—๏ธ Cluster Management:" @grep -E '^(start|stop|restart|clean|status|build):.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " %-18s %s\n", $$1, $$2}' @echo "" @echo "๐Ÿงช Testing:" @grep -E '^(test|demo|validate|quick-test):.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " %-18s %s\n", $$1, $$2}' @echo "" @echo "๐Ÿ—‘๏ธ Vacuum Testing:" @grep -E '^vacuum-.*:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " %-18s %s\n", $$1, $$2}' @echo "" @echo "๐Ÿ“œ Monitoring:" @grep -E '^(logs|admin-logs|worker-logs|master-logs|admin-ui):.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " %-18s %s\n", $$1, $$2}' @echo "" @echo "๐Ÿš€ Quick Start:" @echo " make start # Start cluster" @echo " make vacuum-test # Test vacuum tasks" @echo " make vacuum-help # Vacuum testing guide" @echo "" @echo "๐Ÿ’ก For detailed vacuum testing: make vacuum-help" start: ## Start the complete SeaweedFS cluster with admin and workers @echo "๐Ÿš€ Starting SeaweedFS cluster with admin and workers..." @docker-compose -f $(COMPOSE_FILE) up -d @echo "โœ… Cluster started!" @echo "" @echo "๐Ÿ“Š Access points:" @echo " โ€ข Admin UI: http://localhost:23646/" @echo " โ€ข Master UI: http://localhost:9333/" @echo " โ€ข Filer: http://localhost:8888/" @echo "" @echo "๐Ÿ“ˆ Services starting up..." @echo " โ€ข Master server: โœ“" @echo " โ€ข Volume servers: Starting (6 servers)..." @echo " โ€ข Filer: Starting..." @echo " โ€ข Admin server: Starting..." @echo " โ€ข Workers: Starting (3 workers)..." @echo "" @echo "โณ Use 'make status' to check startup progress" @echo "๐Ÿ’ก Use 'make logs' to watch the startup process" start-staged: ## Start services in proper order with delays @echo "๐Ÿš€ Starting SeaweedFS cluster in stages..." @echo "" @echo "Stage 1: Starting Master server..." @docker-compose -f $(COMPOSE_FILE) up -d master @sleep 10 @echo "" @echo "Stage 2: Starting Volume servers..." @docker-compose -f $(COMPOSE_FILE) up -d volume1 volume2 volume3 volume4 volume5 volume6 @sleep 15 @echo "" @echo "Stage 3: Starting Filer..." @docker-compose -f $(COMPOSE_FILE) up -d filer @sleep 10 @echo "" @echo "Stage 4: Starting Admin server..." @docker-compose -f $(COMPOSE_FILE) up -d admin @sleep 15 @echo "" @echo "Stage 5: Starting Workers..." @docker-compose -f $(COMPOSE_FILE) up -d worker1 worker2 worker3 @sleep 10 @echo "" @echo "Stage 6: Starting Load generator and Monitor..." @docker-compose -f $(COMPOSE_FILE) up -d load_generator monitor @echo "" @echo "โœ… All services started!" @echo "" @echo "๐Ÿ“Š Access points:" @echo " โ€ข Admin UI: http://localhost:23646/" @echo " โ€ข Master UI: http://localhost:9333/" @echo " โ€ข Filer: http://localhost:8888/" @echo "" @echo "โณ Services are initializing... Use 'make status' to check progress" stop: ## Stop all services @echo "๐Ÿ›‘ Stopping SeaweedFS cluster..." @docker-compose -f $(COMPOSE_FILE) down @echo "โœ… Cluster stopped" restart: stop start ## Restart the entire cluster clean: ## Stop and remove all containers, networks, and volumes @echo "๐Ÿงน Cleaning up SeaweedFS test environment..." @docker-compose -f $(COMPOSE_FILE) down -v --remove-orphans @docker system prune -f @rm -rf data/ @echo "โœ… Environment cleaned" status: ## Check the status of all services @echo "๐Ÿ“Š SeaweedFS Cluster Status" @echo "==========================" @docker-compose -f $(COMPOSE_FILE) ps @echo "" @echo "๐Ÿ“‹ Service Health:" @echo "Master:" @curl -s http://localhost:9333/cluster/status | jq '.IsLeader' 2>/dev/null || echo " โŒ Master not ready" @echo "Admin:" @curl -s http://localhost:23646/ | grep -q "Admin" && echo " โœ… Admin ready" || echo " โŒ Admin not ready" logs: ## Show logs from all services @echo "๐Ÿ“œ Following logs from all services..." @echo "๐Ÿ’ก Press Ctrl+C to stop following logs" @docker-compose -f $(COMPOSE_FILE) logs -f admin-logs: ## Show logs from admin server only @echo "๐Ÿ“œ Admin server logs:" @docker-compose -f $(COMPOSE_FILE) logs -f admin worker-logs: ## Show logs from all workers @echo "๐Ÿ“œ Worker logs:" @docker-compose -f $(COMPOSE_FILE) logs -f worker1 worker2 worker3 master-logs: ## Show logs from master server @echo "๐Ÿ“œ Master server logs:" @docker-compose -f $(COMPOSE_FILE) logs -f master admin-ui: ## Open admin UI in browser (macOS) @echo "๐ŸŒ Opening admin UI in browser..." @open http://localhost:23646/ || echo "๐Ÿ’ก Manually open: http://localhost:23646/" test: ## Run integration test to verify task assignment and completion @echo "๐Ÿงช Running Admin-Worker Integration Test" @echo "========================================" @echo "" @echo "1๏ธโƒฃ Checking cluster health..." @sleep 5 @curl -s http://localhost:9333/cluster/status | jq '.IsLeader' > /dev/null && echo "โœ… Master healthy" || echo "โŒ Master not ready" @curl -s http://localhost:23646/ | grep -q "Admin" && echo "โœ… Admin healthy" || echo "โŒ Admin not ready" @echo "" @echo "2๏ธโƒฃ Checking worker registration..." @sleep 10 @echo "๐Ÿ’ก Check admin UI for connected workers: http://localhost:23646/" @echo "" @echo "3๏ธโƒฃ Generating load to trigger EC tasks..." @echo "๐Ÿ“ Creating test files to fill volumes..." @echo "Creating large files with random data to trigger EC (targeting ~60MB total to exceed 50MB limit)..." @for i in {1..12}; do \ echo "Creating 5MB random file $$i..."; \ docker run --rm --network admin_integration_seaweed_net -v /tmp:/tmp --entrypoint sh chrislusf/seaweedfs:local -c "dd if=/dev/urandom of=/tmp/largefile$$i.dat bs=1M count=5 2>/dev/null && weed upload -master=master:9333 /tmp/largefile$$i.dat && rm /tmp/largefile$$i.dat"; \ sleep 3; \ done @echo "" @echo "4๏ธโƒฃ Waiting for volumes to process large files and reach 50MB limit..." @echo "This may take a few minutes as we're uploading 60MB of data..." @sleep 60 @echo "" @echo "5๏ธโƒฃ Checking for EC task creation and assignment..." @echo "๐Ÿ’ก Monitor the admin UI to see:" @echo " โ€ข Tasks being created for volumes needing EC" @echo " โ€ข Workers picking up tasks" @echo " โ€ข Task progress (pending โ†’ running โ†’ completed)" @echo " โ€ข EC shards being distributed" @echo "" @echo "โœ… Integration test setup complete!" @echo "๐Ÿ“Š Monitor progress at: http://localhost:23646/" quick-test: ## Quick verification that core services are running @echo "โšก Quick Health Check" @echo "====================" @echo "Master: $$(curl -s http://localhost:9333/cluster/status | jq -r '.IsLeader // "not ready"')" @echo "Admin: $$(curl -s http://localhost:23646/ | grep -q "Admin" && echo "ready" || echo "not ready")" @echo "Workers: $$(docker-compose -f $(COMPOSE_FILE) ps worker1 worker2 worker3 | grep -c Up) running" validate: ## Validate integration test configuration @echo "๐Ÿ” Validating Integration Test Configuration" @echo "===========================================" @chmod +x test-integration.sh @./test-integration.sh demo: start ## Start cluster and run demonstration @echo "๐ŸŽญ SeaweedFS Admin-Worker Demo" @echo "=============================" @echo "" @echo "โณ Waiting for services to start..." @sleep 45 @echo "" @echo "๐ŸŽฏ Demo Overview:" @echo " โ€ข 1 Master server (coordinates cluster)" @echo " โ€ข 6 Volume servers (50MB volume limit)" @echo " โ€ข 1 Admin server (task management)" @echo " โ€ข 3 Workers (execute EC tasks)" @echo " โ€ข Load generator (creates files continuously)" @echo "" @echo "๐Ÿ“Š Watch the process:" @echo " 1. Visit: http://localhost:23646/" @echo " 2. Observe workers connecting" @echo " 3. Watch tasks being created and assigned" @echo " 4. See tasks progress from pending โ†’ completed" @echo "" @echo "๐Ÿ”„ The demo will:" @echo " โ€ข Fill volumes to 50MB limit" @echo " โ€ข Admin detects volumes needing EC" @echo " โ€ข Workers receive and execute EC tasks" @echo " โ€ข Tasks complete with shard distribution" @echo "" @echo "๐Ÿ’ก Use 'make worker-logs' to see worker activity" @echo "๐Ÿ’ก Use 'make admin-logs' to see admin task management" # Vacuum Testing Targets vacuum-test: ## Create test data with garbage and verify vacuum detection @echo "๐Ÿงช SeaweedFS Vacuum Task Testing" @echo "================================" @echo "" @echo "1๏ธโƒฃ Checking cluster health..." @curl -s http://localhost:9333/cluster/status | jq '.IsLeader' > /dev/null && echo "โœ… Master ready" || (echo "โŒ Master not ready. Run 'make start' first." && exit 1) @curl -s http://localhost:23646/ | grep -q "Admin" && echo "โœ… Admin ready" || (echo "โŒ Admin not ready. Run 'make start' first." && exit 1) @echo "" @echo "2๏ธโƒฃ Creating test data with garbage..." @docker-compose -f $(COMPOSE_FILE) exec vacuum-tester go run create_vacuum_test_data.go -files=25 -delete=0.5 -size=200 @echo "" @echo "3๏ธโƒฃ Configuration Instructions:" @echo " Visit: http://localhost:23646/maintenance/config/vacuum" @echo " Set for testing:" @echo " โ€ข Enable Vacuum Tasks: โœ… Checked" @echo " โ€ข Garbage Threshold: 0.20 (20%)" @echo " โ€ข Scan Interval: [30] [Seconds]" @echo " โ€ข Min Volume Age: [0] [Minutes]" @echo " โ€ข Max Concurrent: 2" @echo "" @echo "4๏ธโƒฃ Monitor vacuum tasks at: http://localhost:23646/maintenance" @echo "" @echo "๐Ÿ’ก Use 'make vacuum-status' to check volume garbage ratios" vacuum-demo: ## Run automated vacuum testing demonstration @echo "๐ŸŽญ Vacuum Task Demo" @echo "==================" @echo "" @echo "โš ๏ธ This demo requires user interaction for configuration" @echo "๐Ÿ’ก Make sure cluster is running with 'make start'" @echo "" @docker-compose -f $(COMPOSE_FILE) exec vacuum-tester sh -c "chmod +x demo_vacuum_testing.sh && ./demo_vacuum_testing.sh" vacuum-status: ## Check current volume status and garbage ratios @echo "๐Ÿ“Š Current Volume Status" @echo "=======================" @docker-compose -f $(COMPOSE_FILE) exec vacuum-tester sh -c "chmod +x check_volumes.sh && ./check_volumes.sh" vacuum-data: ## Create test data with configurable parameters @echo "๐Ÿ“ Creating vacuum test data..." @echo "Usage: make vacuum-data [FILES=20] [DELETE=0.4] [SIZE=100]" @echo "" @docker-compose -f $(COMPOSE_FILE) exec vacuum-tester go run create_vacuum_test_data.go \ -files=$${FILES:-20} \ -delete=$${DELETE:-0.4} \ -size=$${SIZE:-100} vacuum-data-high: ## Create high garbage ratio test data (should trigger vacuum) @echo "๐Ÿ“ Creating high garbage test data (70% garbage)..." @docker-compose -f $(COMPOSE_FILE) exec vacuum-tester go run create_vacuum_test_data.go -files=30 -delete=0.7 -size=150 vacuum-data-low: ## Create low garbage ratio test data (should NOT trigger vacuum) @echo "๐Ÿ“ Creating low garbage test data (15% garbage)..." @docker-compose -f $(COMPOSE_FILE) exec vacuum-tester go run create_vacuum_test_data.go -files=30 -delete=0.15 -size=150 vacuum-continuous: ## Generate garbage continuously for testing @echo "๐Ÿ”„ Generating continuous garbage for vacuum testing..." @echo "Creating 5 rounds of test data with 30-second intervals..." @for i in {1..5}; do \ echo "Round $$i: Creating garbage..."; \ docker-compose -f $(COMPOSE_FILE) exec vacuum-tester go run create_vacuum_test_data.go -files=10 -delete=0.6 -size=100; \ echo "Waiting 30 seconds..."; \ sleep 30; \ done @echo "โœ… Continuous test complete. Check vacuum task activity!" vacuum-clean: ## Clean up vacuum test data (removes all volumes!) @echo "๐Ÿงน Cleaning up vacuum test data..." @echo "โš ๏ธ WARNING: This will delete ALL volumes!" @read -p "Are you sure? (y/N): " confirm && [ "$$confirm" = "y" ] || exit 1 @echo "Stopping cluster..." @docker-compose -f $(COMPOSE_FILE) down @echo "Removing volume data..." @rm -rf data/volume*/ @echo "Restarting cluster..." @docker-compose -f $(COMPOSE_FILE) up -d @echo "โœ… Clean up complete. Fresh volumes ready for testing." vacuum-help: ## Show vacuum testing help and examples @echo "๐Ÿงช Vacuum Testing Commands (Docker-based)" @echo "==========================================" @echo "" @echo "Quick Start:" @echo " make start # Start SeaweedFS cluster with vacuum-tester" @echo " make vacuum-test # Create test data and instructions" @echo " make vacuum-status # Check volume status" @echo "" @echo "Data Generation:" @echo " make vacuum-data-high # High garbage (should trigger)" @echo " make vacuum-data-low # Low garbage (should NOT trigger)" @echo " make vacuum-continuous # Continuous garbage generation" @echo "" @echo "Monitoring:" @echo " make vacuum-status # Quick volume status check" @echo " make vacuum-demo # Full guided demonstration" @echo "" @echo "Configuration:" @echo " Visit: http://localhost:23646/maintenance/config/vacuum" @echo " Monitor: http://localhost:23646/maintenance" @echo "" @echo "Custom Parameters:" @echo " make vacuum-data FILES=50 DELETE=0.8 SIZE=200" @echo "" @echo "๐Ÿ’ก All commands now run inside Docker containers" @echo "Documentation:" @echo " See: VACUUM_TEST_README.md for complete guide"