A drain page that keeps failing with nothing charged or paused, as
Trellis.status/2 and Trellis.self_check/3 report it: the segment whose
page fails (seg_seq), the qualified source tables it holds changes to
(tables), the latest failure's error and its sqlstate (nil when it
didn't come from Postgres), when a drain first and last failed on it
(since, last_seen), and how many drain passes have (attempts).
Summary
Types
@type t() :: %Trellis.DrainFailure{ attempts: pos_integer(), error: String.t(), last_seen: DateTime.t(), seg_seq: integer(), since: DateTime.t(), sqlstate: String.t() | nil, tables: [String.t()] }