This comprehensive refactoring addresses critical architectural issues: IMPORT CYCLE RESOLUTION: • pkg/crypto ↔ pkg/slurp/roles: Created pkg/security/access_levels.go • pkg/ucxl → pkg/dht: Created pkg/storage/interfaces.go • pkg/slurp/leader → pkg/election → pkg/slurp/storage: Moved types to pkg/election/interfaces.go MODULE PATH MIGRATION: • Changed from github.com/anthonyrawlins/bzzz to chorus.services/bzzz • Updated all import statements across 115+ files • Maintains compatibility while removing personal GitHub account dependency TYPE SYSTEM IMPROVEMENTS: • Resolved duplicate type declarations in crypto package • Added missing type definitions (RoleStatus, TimeRestrictions, KeyStatus, KeyRotationResult) • Proper interface segregation to prevent future cycles ARCHITECTURAL BENEFITS: • Build now progresses past structural issues to normal dependency resolution • Cleaner separation of concerns between packages • Eliminates circular dependencies that prevented compilation • Establishes foundation for scalable codebase growth 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
163 lines
7.2 KiB
Go
163 lines
7.2 KiB
Go
// Package election provides election interfaces and types
|
|
// This file contains shared interfaces to avoid circular dependencies.
|
|
|
|
package election
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
)
|
|
|
|
// LeaderInfo represents information about the current leader
|
|
type LeaderInfo struct {
|
|
NodeID string `json:"node_id"` // Leader node ID
|
|
Role string `json:"role"` // Leader role
|
|
Term int64 `json:"term"` // Election term
|
|
ElectedAt time.Time `json:"elected_at"` // When elected
|
|
LastSeen time.Time `json:"last_seen"` // Last heartbeat
|
|
Capabilities []string `json:"capabilities"` // Leader capabilities
|
|
}
|
|
|
|
// GenerationStatus represents status of context generation operations
|
|
type GenerationStatus struct {
|
|
IsGenerating bool `json:"is_generating"` // Whether generation is active
|
|
ActiveRequests int `json:"active_requests"` // Number of active requests
|
|
QueuedRequests int `json:"queued_requests"` // Number of queued requests
|
|
LastGeneration time.Time `json:"last_generation"` // Last generation time
|
|
GenerationCount int64 `json:"generation_count"` // Total generations
|
|
LeaderID string `json:"leader_id"` // Current leader
|
|
}
|
|
|
|
// ContextGenerationRequest represents a request for context generation
|
|
type ContextGenerationRequest struct {
|
|
ID string `json:"id"` // Request ID
|
|
RequesterID string `json:"requester_id"` // Node requesting
|
|
Priority int `json:"priority"` // Request priority
|
|
Context map[string]interface{} `json:"context"` // Request context
|
|
CreatedAt time.Time `json:"created_at"` // Request creation time
|
|
Deadline *time.Time `json:"deadline"` // Optional deadline
|
|
}
|
|
|
|
// ContextGenerationResult represents the result of a context generation request
|
|
type ContextGenerationResult struct {
|
|
RequestID string `json:"request_id"` // Original request ID
|
|
Success bool `json:"success"` // Whether successful
|
|
Error string `json:"error"` // Error message if failed
|
|
GeneratedAt time.Time `json:"generated_at"` // When generated
|
|
GeneratedBy string `json:"generated_by"` // Node that generated
|
|
Context []byte `json:"context"` // Generated context data
|
|
}
|
|
|
|
// ContextLeadershipCallbacks defines callbacks for context leadership events
|
|
type ContextLeadershipCallbacks struct {
|
|
// OnBecomeContextLeader is called when this node becomes context leader
|
|
OnBecomeContextLeader func(ctx context.Context, term int64) error
|
|
|
|
// OnLoseContextLeadership is called when this node loses context leadership
|
|
OnLoseContextLeadership func(ctx context.Context, newLeader string) error
|
|
|
|
// OnContextLeaderChanged is called when any leadership change occurs
|
|
OnContextLeaderChanged func(oldLeader, newLeader string, term int64)
|
|
|
|
// OnContextGenerationStarted is called when context generation starts
|
|
OnContextGenerationStarted func(leaderID string)
|
|
|
|
// OnContextGenerationStopped is called when context generation stops
|
|
OnContextGenerationStopped func(leaderID string, reason string)
|
|
|
|
// OnContextFailover is called when context leadership failover occurs
|
|
OnContextFailover func(oldLeader, newLeader string, duration time.Duration)
|
|
|
|
// OnContextError is called when context-related errors occur
|
|
OnContextError func(err error, severity ErrorSeverity)
|
|
}
|
|
|
|
// ErrorSeverity represents severity levels for election errors
|
|
type ErrorSeverity string
|
|
|
|
const (
|
|
ErrorSeverityLow ErrorSeverity = "low" // Low severity error
|
|
ErrorSeverityMedium ErrorSeverity = "medium" // Medium severity error
|
|
ErrorSeverityHigh ErrorSeverity = "high" // High severity error
|
|
ErrorSeverityCritical ErrorSeverity = "critical" // Critical error
|
|
)
|
|
|
|
// ContextManager defines interface for managing context generation
|
|
type ContextManager interface {
|
|
// Context generation management
|
|
RequestContextGeneration(req *ContextGenerationRequest) error
|
|
GetGenerationStatus() (*GenerationStatus, error)
|
|
StartGeneration(ctx context.Context) error
|
|
StopGeneration(ctx context.Context) error
|
|
|
|
// Leadership awareness
|
|
IsLeader() bool
|
|
SetLeader(isLeader bool)
|
|
|
|
// Health and status
|
|
GetHealth() (bool, error)
|
|
GetMetrics() map[string]interface{}
|
|
}
|
|
|
|
// Additional types for context failover (simplified versions)
|
|
|
|
// ContextGenerationJob represents a context generation job
|
|
type ContextGenerationJob struct {
|
|
ID string `json:"id"` // Job ID
|
|
RequestID string `json:"request_id"` // Original request ID
|
|
Status string `json:"status"` // Job status
|
|
CreatedAt time.Time `json:"created_at"` // Creation time
|
|
UpdatedAt time.Time `json:"updated_at"` // Last update
|
|
CompletedAt *time.Time `json:"completed_at"` // Completion time
|
|
Context map[string]interface{} `json:"context"` // Job context
|
|
}
|
|
|
|
// ClusterState represents simplified cluster state
|
|
type ClusterState struct {
|
|
Nodes map[string]interface{} `json:"nodes"` // Node states
|
|
Leadership map[string]string `json:"leadership"` // Leadership assignments
|
|
LastUpdated time.Time `json:"last_updated"` // Last state update
|
|
StateVersion int64 `json:"state_version"` // State version
|
|
}
|
|
|
|
// ResourceAllocation represents resource allocation
|
|
type ResourceAllocation struct {
|
|
NodeID string `json:"node_id"` // Target node
|
|
Resources map[string]interface{} `json:"resources"` // Allocated resources
|
|
AllocatedAt time.Time `json:"allocated_at"` // Allocation time
|
|
ExpiresAt *time.Time `json:"expires_at"` // Expiration time
|
|
}
|
|
|
|
// ManagerConfig represents manager configuration
|
|
type ManagerConfig struct {
|
|
MaxConcurrentJobs int `json:"max_concurrent_jobs"` // Max concurrent jobs
|
|
QueueSize int `json:"queue_size"` // Queue size limit
|
|
TimeoutDuration time.Duration `json:"timeout_duration"` // Job timeout
|
|
Settings map[string]interface{} `json:"settings"` // Additional settings
|
|
}
|
|
|
|
// GenerationPolicy represents context generation policy
|
|
type GenerationPolicy struct {
|
|
Priority string `json:"priority"` // Priority scheme
|
|
MaxRetries int `json:"max_retries"` // Maximum retries
|
|
BackoffType string `json:"backoff_type"` // Backoff strategy
|
|
Settings map[string]interface{} `json:"settings"` // Policy settings
|
|
}
|
|
|
|
// QueuePolicy represents queue management policy
|
|
type QueuePolicy struct {
|
|
Strategy string `json:"strategy"` // Queue strategy
|
|
MaxSize int `json:"max_size"` // Maximum queue size
|
|
DropPolicy string `json:"drop_policy"` // What to drop when full
|
|
Settings map[string]interface{} `json:"settings"` // Queue settings
|
|
}
|
|
|
|
// DefaultManagerConfig returns default manager configuration
|
|
func DefaultManagerConfig() *ManagerConfig {
|
|
return &ManagerConfig{
|
|
MaxConcurrentJobs: 10,
|
|
QueueSize: 100,
|
|
TimeoutDuration: 30 * time.Minute,
|
|
Settings: make(map[string]interface{}),
|
|
}
|
|
} |