nest-leader-election
Version:
Distributed leader election for NestJS
41 lines (40 loc) • 1.39 kB
TypeScript
import { Repository, type DataSource } from "typeorm";
import { LeaderLease } from "../entities/index.js";
export interface LeaderElectorConfig {
leaseDuration?: number;
renewalInterval?: number;
baseCleanInterval?: number;
jitterRange?: number;
lockId?: number;
instanceId?: string;
schema?: string;
createTableOnInit?: boolean;
}
export declare class LeaderElectorCore {
private readonly leaderLeaseRepository;
name: string;
private readonly logger;
private readonly LOCK_ID;
private isLeader;
private renewalTimer?;
private readonly baseLeaseDuration;
private readonly baseCleanInterval;
private readonly baseRenewalInterval;
private readonly jitterRange;
private readonly instanceId;
private readonly schema;
private readonly createTableOnInit;
constructor(leaderLeaseRepository: Repository<LeaderLease>, config: LeaderElectorConfig);
static create(dataSource: DataSource, config: LeaderElectorConfig): Promise<LeaderElectorCore>;
protected initialize(): Promise<void>;
private getJitter;
private createLockTableIfNotExists;
private startCleanupJob;
private cleanupExpiredLeases;
private tryAcquireLeaseWithJitter;
private tryAcquireLease;
private handleLeadershipAcquired;
release(): Promise<void>;
shutdown(): Promise<void>;
amILeader(): boolean;
}