• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

supabase / etl / 29976461051
74%

Build:
DEFAULT BRANCH: main
Ran 23 Jul 2026 03:23AM UTC
Jobs 1
Files 265
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

23 Jul 2026 03:13AM UTC coverage: 73.932% (+0.08%) from 73.848%
29976461051

push

github

web-flow
clickhouse: Prevent unsafe schema rewind during CDC replay (#925)

* fix(clickhouse): Prevent unsafe schema rewind during CDC replay

A restart can replay a relation event that has an old schema
snapshot. Before this change, the destination applied the reverse
schema diff. The reverse diff dropped new columns and deleted their
data.

Reject relation events that have a snapshot older than the applied
snapshot. Use the new error kind DestinationSchemaRewind for this
condition. Tell the operator to resynchronize the table. Also reject
stale snapshots on the interrupted-recovery path. Do not execute
reverse DDL in these conditions.

Pin wait_for_async_insert=1 on the ClickHouse client. This setting
makes each insert acknowledgement durable. A schema change cannot
overtake acknowledged rows.

Add integration tests for stale relation replay on both engines. Add
a test for the recovery guard. Update the schema-changes
documentation.

* docs(clickhouse): Document crash window for schema-rewind errors

The schema-rewind limitation read like it only applied to unusual
replays. Name the concrete trigger: one crash after a schema change is
applied at the destination but before replication progress is
confirmed replays the stream from before the change and fails the
pipeline with the same error.

* fix(clickhouse): Use previous replication mask when recovering schema changes

ClickHouse schema-change recovery built the previous schema with
metadata.replication_mask, which records the target mask. Any
interrupted change that added or dropped columns paired an old schema
with a mask of the wrong width and panicked on the mask-length
assertion in ReplicatedTableSchema::from_mask, so recovery after a
crash mid-DDL could never complete.

DuckLake already solved this by projecting target mask bits back onto
the previous schema by ordinal position. Move that helper to a shared
recovery module and use it in the ClickHouse recovery path.

* test(clickhouse): Cover successf... (continued)

95 of 102 new or added lines in 4 files covered. (93.14%)

17 existing lines in 5 files now uncovered.

43805 of 59250 relevant lines covered (73.93%)

9066.89 hits per line

Uncovered Changes

Lines Coverage ∆ File
7
64.37
-5.63% crates/etl/src/runtime/error_policy.rs

Coverage Regressions

Lines Coverage ∆ File
10
84.7
0.81% crates/etl/src/replication/apply.rs
3
83.51
-0.77% crates/etl/src/postgres/client/raw.rs
2
47.29
0.08% crates/etl-maintenance/src/ducklake/runner.rs
1
91.39
2.55% crates/etl-destinations/src/clickhouse/core.rs
1
86.42
-1.23% crates/etl/src/postgres/stream/events.rs
Jobs
ID Job ID Ran Files Coverage
1 29976461051.1 23 Jul 2026 03:22AM UTC 265
73.93
GitHub Action Run
Source Files on build 29976461051
  • Tree
  • List 265
  • Changed 12
  • Source Changed 5
  • Coverage Changed 12
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #29976461051
  • 6f40701d on github
  • Prev Build on main (#29907505219)
  • Next Build on main (#29985801266)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc