Initialisation depot
This commit is contained in:
104
arti-api/auth-service/pipeline/test-replica-locking.sh
Executable file
104
arti-api/auth-service/pipeline/test-replica-locking.sh
Executable file
@@ -0,0 +1,104 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Test replica-based build locking mechanism
|
||||
# This script demonstrates how the build system uses replicas for atomic locking
|
||||
|
||||
set -e
|
||||
|
||||
NAMESPACE="apps--droneio--prd"
|
||||
DEPLOYMENT="buildah-external"
|
||||
|
||||
echo "🧪 Testing Replica-Based Build Locking"
|
||||
echo "======================================"
|
||||
|
||||
# Function to get current replicas
|
||||
get_replicas() {
|
||||
kubectl get deployment $DEPLOYMENT -n $NAMESPACE -o jsonpath='{.spec.replicas}'
|
||||
}
|
||||
|
||||
# Function to check if build can start
|
||||
can_start_build() {
|
||||
local replicas=$(get_replicas)
|
||||
if [ "$replicas" = "0" ]; then
|
||||
echo "✅ Build can start (replicas=0)"
|
||||
return 0
|
||||
else
|
||||
echo "❌ Build already running (replicas=$replicas)"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to start build (scale up)
|
||||
start_build() {
|
||||
echo "🔒 Acquiring build lock (scaling up)..."
|
||||
kubectl scale deployment $DEPLOYMENT --replicas=1 -n $NAMESPACE
|
||||
echo "⏳ Waiting for pod to be ready..."
|
||||
kubectl wait --for=condition=ready pod -l app=buildah-external -n $NAMESPACE --timeout=120s
|
||||
echo "✅ Build lock acquired!"
|
||||
}
|
||||
|
||||
# Function to end build (scale down)
|
||||
end_build() {
|
||||
echo "🔽 Releasing build lock (scaling down)..."
|
||||
kubectl scale deployment $DEPLOYMENT --replicas=0 -n $NAMESPACE
|
||||
echo "⏳ Waiting for pods to terminate..."
|
||||
kubectl wait --for=delete pod -l app=buildah-external -n $NAMESPACE --timeout=60s || echo "Pods may still be terminating"
|
||||
echo "✅ Build lock released!"
|
||||
}
|
||||
|
||||
# Test sequence
|
||||
echo "📊 Current deployment status:"
|
||||
kubectl get deployment $DEPLOYMENT -n $NAMESPACE
|
||||
|
||||
echo ""
|
||||
echo "🔍 Checking if build can start..."
|
||||
if can_start_build; then
|
||||
echo ""
|
||||
echo "🚀 Starting test build..."
|
||||
start_build
|
||||
|
||||
echo ""
|
||||
echo "📊 Deployment during build:"
|
||||
kubectl get deployment $DEPLOYMENT -n $NAMESPACE
|
||||
kubectl get pods -l app=buildah-external -n $NAMESPACE
|
||||
|
||||
echo ""
|
||||
echo "🔍 Testing concurrent build attempt..."
|
||||
if can_start_build; then
|
||||
echo "🚨 ERROR: Concurrent build should be blocked!"
|
||||
exit 1
|
||||
else
|
||||
echo "✅ Concurrent build correctly blocked!"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "🛑 Ending test build..."
|
||||
end_build
|
||||
|
||||
echo ""
|
||||
echo "📊 Final deployment status:"
|
||||
kubectl get deployment $DEPLOYMENT -n $NAMESPACE
|
||||
|
||||
echo ""
|
||||
echo "🔍 Verifying build can start again..."
|
||||
if can_start_build; then
|
||||
echo "✅ Build system ready for next build!"
|
||||
else
|
||||
echo "🚨 ERROR: Build system not properly reset!"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo ""
|
||||
echo "⚠️ Cannot test - build already running"
|
||||
echo "Use: kubectl scale deployment $DEPLOYMENT --replicas=0 -n $NAMESPACE"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "🎉 Replica-based locking test completed successfully!"
|
||||
echo ""
|
||||
echo "💡 Benefits:"
|
||||
echo " ✅ Atomic operations (no race conditions)"
|
||||
echo " ✅ No lock files to manage"
|
||||
echo " ✅ Kubernetes-native approach"
|
||||
echo " ✅ Resource efficient (only runs when needed)"
|
||||
echo " ✅ Automatic cleanup on failure"
|
||||
Reference in New Issue
Block a user