/** * SMI-643: PartitionStrategy - Load balancing for parallel repository indexing * * Provides: * - Partition repositories by letter range (A-F, G-L, M-R, S-Z) * - Load balancing across workers * - Handle uneven distributions */ import type { GitHubRepository } from './GitHubIndexer.js'; /** * A partition of repositories for a worker */ export interface Partition { /** Unique partition identifier */ id: string; /** Start letter for this partition (inclusive) */ startLetter: string; /** End letter for this partition (inclusive) */ endLetter: string; /** Letter pattern description (e.g., "A-F") */ range: string; /** Repositories assigned to this partition */ repositories: GitHubRepository[]; } /** * Options for partitioning strategy */ export interface PartitionOptions { /** Number of partitions to create (default: 4) */ partitionCount?: number; /** Custom partition ranges (overrides partitionCount) */ customRanges?: Array<{ start: string; end: string; }>; } /** * Default letter ranges for 4-way partitioning */ export declare const DEFAULT_PARTITION_RANGES: Array<{ start: string; end: string; }>; /** * Partition strategy for distributing repositories across workers */ export declare class PartitionStrategy { private ranges; constructor(options?: PartitionOptions); /** * Generate balanced letter ranges for any partition count */ private generateRanges; /** * Get the partition ranges */ getRanges(): Array<{ start: string; end: string; }>; /** * Get empty partitions for workers to fill */ createEmptyPartitions(): Partition[]; /** * Check if a repository name belongs to a specific partition */ belongsToPartition(repoName: string, partition: Partition): boolean; /** * Assign a single repository to the appropriate partition */ assignToPartition(repo: GitHubRepository, partitions: Partition[]): Partition | null; /** * Partition a list of repositories across all partitions */ partitionRepositories(repositories: GitHubRepository[]): Partition[]; /** * Get partition statistics for load balancing analysis */ getPartitionStats(partitions: Partition[]): PartitionStats; /** * Rebalance partitions by redistributing excess repositories */ rebalancePartitions(partitions: Partition[]): Partition[]; } /** * Statistics about partition distribution */ export interface PartitionStats { partitionCount: number; totalRepositories: number; averagePerPartition: number; minSize: number; maxSize: number; imbalanceRatio: number; isBalanced: boolean; distribution: Array<{ id: string; range: string; count: number; percentage: number; }>; } /** * Create a default partition strategy with 4 workers */ export declare function createDefaultStrategy(): PartitionStrategy; /** * Create a custom partition strategy */ export declare function createCustomStrategy(ranges: Array<{ start: string; end: string; }>): PartitionStrategy; //# sourceMappingURL=PartitionStrategy.d.ts.map