import { EventEmitter } from 'events';
import { RedisClientType } from 'redis';
import { ISegmentProcessor, SegmentProcessingData, SegmentProcessingResult } from './interfaces';
export interface WorkStealingConfig {
    workerId: string;
    stealThreshold: number;
    stealCheckInterval: number;
    maxStealsPerCheck: number;
}
/**
 * Extends distributed processing with work stealing capability
 * Monitors for stuck segments and steals them from unresponsive workers
 */
export declare class WorkStealingProcessor extends EventEmitter implements ISegmentProcessor {
    private readonly baseProcessor;
    private stealCheckTimer;
    private readonly config;
    private isDisposed;
    private readonly MAX_STEAL_ATTEMPTS;
    private readonly activeStealAttempts;
    private consecutiveFailures;
    private readonly maxFailures;
    private readonly failureBackoff;
    constructor(redis: RedisClientType, config?: Partial<WorkStealingConfig>);
    /**
     * Process a segment with work stealing support
     */
    processSegment(data: SegmentProcessingData): Promise<SegmentProcessingResult>;
    /**
     * Check if healthy with work stealing capability
     */
    isHealthy(): Promise<boolean>;
    /**
     * Get processing mode
     */
    getMode(): string;
    /**
     * Start monitoring for stuck segments
     */
    private startWorkStealingMonitor;
    private limitSegmentsToSteal;
    private emitDetectionEvent;
    private countResults;
    private emitCompletionEvent;
    private handleFailure;
    private shouldTripCircuitBreaker;
    private tripCircuitBreaker;
    private resetFailureCount;
    private findStuckSegmentsTask;
    private attemptStealSegmentTask;
    private attemptStealSegments;
    /**
     * Check for stuck segments and attempt to steal them
     */
    private checkAndStealWork;
    private calculateClaimAge;
    private isSegmentStuck;
    private isNotBeingStolen;
    private parseSegmentData;
    private filterStuckSegments;
    private getClaimedSegmentsTask;
    /**
     * Find segments that appear to be stuck
     */
    private findStuckSegments;
    private markSegmentAsBeingStolen;
    private unmarkSegmentAsBeingStolen;
    private getOriginalSegmentKey;
    private emitWorkStolenEvent;
    private forceClaimSegmentTask;
    private processSegmentTask;
    /**
     * Attempt to steal a specific segment
     */
    private attemptStealSegment;
    /**
     * Get unique key for a segment
     */
    private getSegmentKey;
    /**
     * Dispose and clean up
     */
    dispose(): Promise<void>;
    /**
     * Get work stealing metrics
     */
    getMetrics(): {
        mode: string;
        workerId: string;
        activeStealAttempts: number;
        stealThreshold: number;
        checkInterval: number;
    };
    private evictOldestStealAttempt;
    private clearAllStealAttempts;
}
//# sourceMappingURL=workStealingProcessor.d.ts.map