Major milestone: CHORUS leader election is now fully functional! ## Key Features Implemented: ### 🗳️ Leader Election Core - Fixed root cause: nodes now trigger elections when no admin exists - Added randomized election delays to prevent simultaneous elections - Implemented concurrent election prevention (only one election at a time) - Added proper election state management and transitions ### 📡 Admin Discovery System - Enhanced discovery requests with "WHOAMI" debug messages - Fixed discovery responses to properly include current leader ID - Added comprehensive discovery request/response logging - Implemented admin confirmation from multiple sources ### 🔧 Configuration Improvements - Increased discovery timeout from 3s to 15s for better reliability - Added proper Docker Hub image deployment workflow - Updated build process to use correct chorus-agent binary (not deprecated chorus) - Added static compilation flags for Alpine Linux compatibility ### 🐛 Critical Fixes - Fixed build process confusion between chorus vs chorus-agent binaries - Added missing admin_election capability to enable leader elections - Corrected discovery logic to handle zero admin responses - Enhanced debugging with detailed state and timing information ## Current Operational Status: ✅ Admin Election: Working with proper consensus ✅ Heartbeat System: 15-second intervals from elected admin ✅ Discovery Protocol: Nodes can find and confirm current admin ✅ P2P Connectivity: 5+ connected peers with libp2p ✅ SLURP Functionality: Enabled on admin nodes ✅ BACKBEAT Integration: Tempo synchronization working ✅ Container Health: All health checks passing ## Technical Details: - Election uses weighted scoring based on uptime, capabilities, and resources - Randomized delays prevent election storms (30-45s wait periods) - Discovery responses include current leader ID for network-wide consensus - State management prevents multiple concurrent elections - Enhanced logging provides full visibility into election process 🎉 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
44 lines
1.1 KiB
Docker
44 lines
1.1 KiB
Docker
# CHORUS - Simple Docker image using pre-built binary
|
|
FROM alpine:3.18
|
|
|
|
# Install runtime dependencies
|
|
RUN apk --no-cache add \
|
|
ca-certificates \
|
|
tzdata \
|
|
curl
|
|
|
|
# Create non-root user for security
|
|
RUN addgroup -g 1000 chorus && \
|
|
adduser -u 1000 -G chorus -s /bin/sh -D chorus
|
|
|
|
# Create application directories
|
|
RUN mkdir -p /app/data && \
|
|
chown -R chorus:chorus /app
|
|
|
|
# Copy pre-built binary from build directory (ensure it exists and is the correct one)
|
|
COPY build/chorus-agent /app/chorus-agent
|
|
RUN chmod +x /app/chorus-agent && chown chorus:chorus /app/chorus-agent
|
|
|
|
# Switch to non-root user
|
|
USER chorus
|
|
WORKDIR /app
|
|
|
|
# Note: Using correct chorus-agent binary built with 'make build-agent'
|
|
|
|
# Expose ports
|
|
EXPOSE 8080 8081 9000
|
|
|
|
# Health check
|
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
|
|
CMD curl -f http://localhost:8081/health || exit 1
|
|
|
|
# Set default environment variables
|
|
ENV LOG_LEVEL=info \
|
|
LOG_FORMAT=structured \
|
|
CHORUS_BIND_ADDRESS=0.0.0.0 \
|
|
CHORUS_API_PORT=8080 \
|
|
CHORUS_HEALTH_PORT=8081 \
|
|
CHORUS_P2P_PORT=9000
|
|
|
|
# Start CHORUS
|
|
ENTRYPOINT ["/app/chorus-agent"] |