optimizing badger cache, won a 10-15% improvement in most benchmarks

This commit is contained in:
2025-11-16 15:07:36 +00:00
parent 9bb3a7e057
commit 95bcf85ad7
72 changed files with 8158 additions and 4048 deletions

250
scripts/test-docker.sh Executable file
View File

@@ -0,0 +1,250 @@
#!/bin/bash
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
echo "=== ORLY Dgraph Docker Integration Test Suite ==="
echo ""
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Function to print colored output
print_error() {
echo -e "${RED}$1${NC}"
}
print_success() {
echo -e "${GREEN}$1${NC}"
}
print_info() {
echo -e "${YELLOW} $1${NC}"
}
# Check if docker is available
if ! command -v docker &> /dev/null; then
print_error "Docker is not installed or not in PATH"
exit 1
fi
# Check if docker-compose is available
if ! command -v docker-compose &> /dev/null && ! docker compose version &> /dev/null; then
print_error "Docker Compose is not installed or not in PATH"
exit 1
fi
# Determine docker-compose command
if docker compose version &> /dev/null 2>&1; then
DOCKER_COMPOSE="docker compose"
else
DOCKER_COMPOSE="docker-compose"
fi
print_info "Using docker-compose command: $DOCKER_COMPOSE"
echo ""
# Change to scripts directory
cd "$SCRIPT_DIR"
# Parse arguments
SKIP_BUILD=false
KEEP_RUNNING=false
RUN_RELAY_TESTER=false
while [[ $# -gt 0 ]]; do
case $1 in
--skip-build)
SKIP_BUILD=true
shift
;;
--keep-running)
KEEP_RUNNING=true
shift
;;
--relay-tester)
RUN_RELAY_TESTER=true
shift
;;
*)
echo "Unknown option: $1"
echo "Usage: $0 [--skip-build] [--keep-running] [--relay-tester]"
exit 1
;;
esac
done
# Cleanup function
cleanup() {
if [ "$KEEP_RUNNING" = false ]; then
print_info "Cleaning up containers..."
$DOCKER_COMPOSE -f docker-compose-test.yml down
print_success "Cleanup complete"
else
print_info "Containers left running (--keep-running)"
echo ""
print_info "To stop: cd $SCRIPT_DIR && $DOCKER_COMPOSE -f docker-compose-test.yml down"
print_info "View logs: $DOCKER_COMPOSE -f docker-compose-test.yml logs -f"
print_info "ORLY: http://localhost:3334"
print_info "Dgraph: http://localhost:8080"
print_info "Ratel: http://localhost:8000"
fi
}
# Set trap for cleanup
if [ "$KEEP_RUNNING" = false ]; then
trap cleanup EXIT
fi
# Stop any existing containers
print_info "Stopping any existing containers..."
$DOCKER_COMPOSE -f docker-compose-test.yml down --remove-orphans
echo ""
# Build images if not skipping
if [ "$SKIP_BUILD" = false ]; then
print_info "Building ORLY docker image..."
$DOCKER_COMPOSE -f docker-compose-test.yml build orly
print_success "Build complete"
echo ""
fi
# Start dgraph
print_info "Starting dgraph server..."
$DOCKER_COMPOSE -f docker-compose-test.yml up -d dgraph
# Wait for dgraph to be healthy
print_info "Waiting for dgraph to be healthy..."
MAX_WAIT=60
WAITED=0
while [ $WAITED -lt $MAX_WAIT ]; do
if docker exec orly-dgraph curl -sf http://localhost:8080/health > /dev/null 2>&1; then
print_success "Dgraph is healthy"
break
fi
sleep 2
WAITED=$((WAITED + 2))
if [ $WAITED -ge $MAX_WAIT ]; then
print_error "Dgraph failed to become healthy after ${MAX_WAIT}s"
docker logs orly-dgraph
exit 1
fi
done
echo ""
# Start ORLY
print_info "Starting ORLY relay with dgraph backend..."
$DOCKER_COMPOSE -f docker-compose-test.yml up -d orly
# Wait for ORLY to be healthy
print_info "Waiting for ORLY to be healthy..."
MAX_WAIT=60
WAITED=0
while [ $WAITED -lt $MAX_WAIT ]; do
if curl -sf http://localhost:3334/ > /dev/null 2>&1; then
print_success "ORLY is healthy and responding"
break
fi
sleep 2
WAITED=$((WAITED + 2))
if [ $WAITED -ge $MAX_WAIT ]; then
print_error "ORLY failed to become healthy after ${MAX_WAIT}s"
echo ""
print_info "ORLY logs:"
docker logs orly-relay
exit 1
fi
done
echo ""
# Check ORLY version
print_info "Checking ORLY version..."
ORLY_VERSION=$(docker exec orly-relay /app/orly version 2>&1 | head -1 || echo "unknown")
echo "ORLY version: $ORLY_VERSION"
echo ""
# Verify dgraph connection
print_info "Verifying dgraph connection..."
if docker logs orly-relay 2>&1 | grep -q "successfully connected to dgraph"; then
print_success "ORLY successfully connected to dgraph"
elif docker logs orly-relay 2>&1 | grep -q "dgraph"; then
print_info "ORLY dgraph logs:"
docker logs orly-relay 2>&1 | grep -i dgraph
else
print_info "No explicit dgraph connection message (may be using badger)"
fi
echo ""
# Basic connectivity test
print_info "Testing basic relay connectivity..."
if curl -sf http://localhost:3334/ > /dev/null 2>&1; then
print_success "ORLY is accessible at http://localhost:3334"
else
print_error "Failed to connect to ORLY"
exit 1
fi
echo ""
# Test WebSocket connection
print_info "Testing WebSocket connection..."
if command -v websocat &> /dev/null; then
TEST_REQ='["REQ","test",{"kinds":[1],"limit":1}]'
if echo "$TEST_REQ" | timeout 5 websocat ws://localhost:3334 2>/dev/null | grep -q "EOSE"; then
print_success "WebSocket connection successful"
else
print_info "WebSocket test inconclusive (may need events)"
fi
elif command -v wscat &> /dev/null; then
print_info "Testing with wscat..."
# wscat test would go here
else
print_info "WebSocket testing tools not available (install websocat or wscat)"
fi
echo ""
# Run relay-tester if requested
if [ "$RUN_RELAY_TESTER" = true ]; then
print_info "Building relay-tester image..."
$DOCKER_COMPOSE -f docker-compose-test.yml build relay-tester
echo ""
print_info "Running relay-tester against ORLY..."
if $DOCKER_COMPOSE -f docker-compose-test.yml run --rm relay-tester -url ws://orly:3334; then
print_success "Relay-tester passed!"
else
print_error "Relay-tester failed"
echo ""
print_info "ORLY logs:"
docker logs orly-relay --tail 50
exit 1
fi
echo ""
fi
# Show container status
print_info "Container status:"
$DOCKER_COMPOSE -f docker-compose-test.yml ps
echo ""
# Show useful information
print_success "All tests passed!"
echo ""
print_info "Endpoints:"
echo " ORLY WebSocket: ws://localhost:3334"
echo " ORLY HTTP: http://localhost:3334"
echo " Dgraph HTTP: http://localhost:8080"
echo " Dgraph gRPC: localhost:9080"
echo " Ratel UI: http://localhost:8000"
echo ""
if [ "$KEEP_RUNNING" = false ]; then
print_info "Containers will be stopped on script exit"
else
print_info "Containers are running. Use --keep-running flag was set."
fi
exit 0