packages feed

clickhouse-migrate-0.2.1.0: src/ClickHouseMigrate/Internal/RepairTypes.hs

module ClickHouseMigrate.Internal.RepairTypes where

import ClickHouseMigrate.Ledger (AppendReceipt, AttemptId, AuditContext, LedgerPosition, QuiescenceEvidence)
import ClickHouseMigrate.Report (StepAttempt)
import ClickHouseMigrate.Target (QueryId)

-- Observations describe diagnostics, never the authority to enter recovery.
data RepairObservation
  = NoRecordedQueries
  | NoVisibleRecordedQueries
  | RecordedQueriesActive ![QueryId]
  | ProcessObservationUnavailable
  deriving stock (Eq, Show)

type RepairObservationSink = RepairObservation -> IO ()

data ProcessObservationPolicy = StrictObservation | ExternalDrain !RepairObservationSink

data RecoveryEvidence = RecoveryEvidence !AuditContext !QuiescenceEvidence ![AppendReceipt] !ProcessObservationPolicy

data RepairRequest
  = ResumeRequest !LedgerPosition !AttemptId !RecoveryEvidence
  | RetryStepRequest !LedgerPosition !AttemptId !StepAttempt !RecoveryEvidence
  | AcceptStepRequest !LedgerPosition !AttemptId !StepAttempt !RecoveryEvidence
  | FinalizeRequest !LedgerPosition !AttemptId !RecoveryEvidence

data RepairRequestError = MissingRecoveryEvidence | InvalidStepAttempt | InvalidRecoveryTarget | TooManyPendingReceipts | ForeignLedgerReceipt
  deriving stock (Eq, Show)