ConduitIO / ConduitIO/conduit-connector-postgres
B1 follow-up: deliver the boundary DML instead of dropping it (no-drop halt)
- Dominant language
- Go
- Stars
- 19
- Forks
- 12
- Avg merge
- 12h 20m
- Merged PRs (30d)
- 5
Description
Decision (DeVaris, 2026-08-30): v0.20 ships the DISCLOSE option — the halt message tells the operator the first record under the new schema shape is not delivered. The no-drop design is the follow-up.
Current mechanism: the drift marker emits at the first new-shape DML's LSN (pgoutput delivers RelationMessages with WALStart 0, so the marker cannot carry the relation-message LSN — D1 deviation). That boundary DML is D4-skipped in-run and dropped at the wire on restart (subscription.go WALStart <= StartLSN guard). One record per halt episode, position claims it was covered.
No-drop design: deliver the boundary DML as a normal record immediately BEFORE the marker in the same batch, so the position's semantics hold and nothing is lost. Changes batch/ack semantics on the drift path — needs its own review cycle, not a squeeze into B1.
Ref: PR #329, design doc 20260829-dbz3-b1-schema-drift-escape-hatch.md (D1/D4/D5/FM3).
Contributor guide
No contributing guide indexed for this repository
Research direction
Start with subscription.go and the D1/D4/D5/FM3 sections of 20260829-dbz3-b1-schema-drift-escape-hatch.md, then review PR #329 for the existing drift path. Trace the batch and acknowledgement semantics around the WALStart guard and the marker. Done means the boundary DML is delivered as a normal record immediately before the marker, with position semantics preserved and no record dropped on restart.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- go, postgresql
- Domain
- databases
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100