/**
 * WAL Checkpoint Scheduler
 * SQLite WAL 파일의 주기적 체크포인트를 관리하는 스케줄러
 *
 * 클린코드 원칙:
 * - 단일 책임 원칙: WAL 체크포인트 스케줄링만 담당
 * - 명확한 인터페이스: CheckpointMode enum과 CheckpointResult interface로 명확한 타입 정의
 */
/**
 * 체크포인트 모드
 * - PASSIVE: 다른 연결이 읽기 중이면 체크포인트를 건너뜀 (성능 영향 최소화)
 * - TRUNCATE: WAL 파일을 완전히 제거 (디스크 공간 절약)
 * - FULL: 모든 페이지를 메인 DB로 이동 후 WAL 파일 제거 (장기 트랜잭션이 없을 때만 사용)
 */
export declare enum CheckpointMode {
    PASSIVE = "PASSIVE",
    TRUNCATE = "TRUNCATE",
    FULL = "FULL"
}
/**
 * 체크포인트 실행 결과
 */
export interface CheckpointResult {
    /**
     * 체크포인트 모드
     */
    mode: CheckpointMode;
    /**
     * 성공 여부
     */
    success: boolean;
    /**
     * WAL 파일의 페이지 수
     */
    log: number;
    /**
     * 체크포인트된 페이지 수
     */
    checkpointed: number;
    /**
     * 락 상태 (1: 락, 0: 정상)
     */
    busy: number;
    /**
     * 에러 (실패 시)
     */
    error?: Error;
}
/**
 * WAL 체크포인트 스케줄러 설정
 */
export interface WalCheckpointSchedulerConfig {
    /**
     * 체크포인트 실행 주기 (밀리초)
     * 기본값: 5분 (300000ms)
     */
    intervalMs: number;
    /**
     * WAL 파일 크기 경고 임계값 (바이트)
     * 기본값: 16MB (16777216 bytes)
     */
    walSizeWarningThreshold: number;
    /**
     * WAL 파일 크기 위험 임계값 (바이트)
     * 기본값: 24MB (25165824 bytes)
     */
    walSizeDangerThreshold: number;
    /**
     * 전용 커넥션 사용 여부
     * 기본값: true
     * true인 경우 체크포인트 전용 연결을 생성하여 메인 연결과 분리
     */
    useDedicatedConnection: boolean;
    /**
     * 최대 재시도 횟수
     * 기본값: 3
     */
    maxRetries: number;
    /**
     * 재시도 백오프 시간 (밀리초)
     * 기본값: 1000ms
     * 지수 백오프의 기본 단위로 사용됨 (1초, 2초, 4초)
     */
    retryBackoffMs: number;
}
/**
 * Logger 인터페이스
 */
export interface Logger {
    info(message: string, meta?: Record<string, unknown>): void;
    warn(message: string, meta?: Record<string, unknown>): void;
    error(message: string, meta?: Record<string, unknown>): void;
}
/**
 * PerformanceMonitor 인터페이스
 */
export interface PerformanceMonitor {
    recordMetric(name: string, value: number): void;
    incrementCounter(name: string): void;
}
import Database from 'better-sqlite3';
import type { RuntimeDiagnosticsLogger } from '../../domains/monitoring/services/runtime-diagnostics-logger.js';
/**
 * WAL 체크포인트 스케줄러 클래스
 * SQLite WAL 파일의 주기적 체크포인트를 관리
 */
export declare class WalCheckpointScheduler {
    private mainDb;
    private config;
    private logger?;
    private performanceMonitor?;
    private diagnosticsLogger?;
    private intervalId;
    private isRunning;
    private dedicatedConnection;
    private checkpointInProgress;
    constructor(mainDb: Database.Database, config: WalCheckpointSchedulerConfig, logger?: Logger | undefined, performanceMonitor?: PerformanceMonitor | undefined, diagnosticsLogger?: Pick<RuntimeDiagnosticsLogger, "writeEvent"> | undefined);
    /**
     * 스케줄러 시작 (idempotent)
     */
    start(): void;
    /**
     * 스케줄러 중지 (idempotent, 비동기)
     */
    stop(): Promise<void>;
    /**
     * 즉시 체크포인트 실행
     * @param mode 체크포인트 모드 (기본값: TRUNCATE)
     * @returns 체크포인트 실행 결과
     */
    checkpointNow(mode?: CheckpointMode): Promise<CheckpointResult>;
    /**
     * 체크포인트 실행 (재시도 로직 포함)
     * busy=1인 경우 실패로 간주하여 재시도 수행
     * 동시 실행 방지: checkpointInProgress 플래그로 중첩 실행 방지
     *
     * @param mode 체크포인트 모드
     * @returns 체크포인트 실행 결과
     */
    private checkpoint;
    /**
     * 주기적 체크포인트 스케줄링
     * 동시 실행 방지: checkpointInProgress 플래그로 중첩 실행 방지
     */
    private scheduleCheckpoint;
    /**
     * 대기 함수 (지수 백오프용)
     * @param ms 대기 시간 (밀리초)
     */
    private sleep;
    /**
     * 체크포인트 실행 (실제 SQL 실행)
     * better-sqlite3의 pragma는 기본적으로 배열을 반환함
     *
     * @param db 데이터베이스 연결
     * @param mode 체크포인트 모드
     * @returns 체크포인트 실행 결과
     */
    private executeCheckpoint;
    /**
     * WAL 파일 크기 조회
     * 파일 시스템 API를 통한 크기 조회 (읽기 전용, 락 유발 없음)
     *
     * @returns WAL 파일 크기 (바이트), 파일이 없거나 에러 발생 시 0 반환
     */
    private getWalFileSize;
    private writeDiagnosticsEvent;
}
//# sourceMappingURL=wal-checkpoint-scheduler.d.ts.map