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.
346 lines
15 KiB
346 lines
15 KiB
# 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"
|