Conversation
There was a problem hiding this comment.
Reviewed the object-backed Reverse ETL persistence cutover, recovery/state transitions, cloud storage adapters, sync-controller pod settings, Helm wiring, and Prisma schema changes.
No new actionable correctness, security, or user-visible regression findings. Validation run: Helm lint and contract tests; sync-controller Go tests; retl-runner typecheck, build, and test suite (221 passed, 1 optional scale test skipped).
b21b760 to
90beb73
Compare
There was a problem hiding this comment.
Reviewed the Reverse ETL object-backed persistence, controller/Helm deployment wiring, and console setup/run-management paths.
No actionable bugs, security issues, or user-visible regressions found. I also checked the existing resolved review thread and did not re-raise it. Local Helm lint and the Reverse ETL Helm contract suite pass.
90beb73 to
5854146
Compare
There was a problem hiding this comment.
Reviewed the object-backed Reverse ETL persistence cutover, recovery and full-replacement paths, plus sync-controller/Helm runtime wiring.
No new actionable findings found. Existing resolved discussion about legacy control rows was considered and is not repeated.
Stack / merge order
Stacked on #1525 (
feat/jitsu-227-console-ui). Merge #1525 first, then retargetthis PR to
newjitsubefore merging. This branch now contains both the console UIand object-backed runner for combined local testing; this PR's diff includes persistence/deployment, delivery observability, and the
opt-in Google full-audience replacement feature described below.
Restacked on the recovered #1525 tip
d55901592, including its 14 previouslyunpushed local commits. Preserves editor/preview, consent, scheduling, navigation,
ClickHouse spooling and snapshot-progress fixes. Conflict resolution retains the
object-backed backend, both safe failure paths, controller overrides and the
existing MicroTime fix; the obsolete SQL snapshot writer is not restored.
Includes safe startup diagnostics and the dev syncctl tunnel fix. Local ignored
configuration and dev-only Helm edits remain separate. No deployment was performed
as part of this recovery/restack.
Summary
JITSU-227Replaces Reverse ETL per-row PostgreSQL persistence with local SQLite indexing and
GCS/S3 immutable snapshots, batches and receipts. PostgreSQL retains only control,
audience ownership, checkpoints and task metadata.
reverse_sync_batch,reverse_sync_operation,reverse_sync_generation,reverse_sync_source_key,reverse_sync_desired,reverse_sync_membership.legacy backend/fallback and its SQL retention sweeper.
artifact_headpointer commits the immutable manifest together withlifecycle/store/checkpoint transitions. No object I/O inside SQL transactions.
Legacy null-head rows fail closed even in phase
new; interrupted new startupremains recoverable.
from baseline + receipts, preserving partial success and sequence tombstones.
Unknown provider outcomes still require reconciliation, not blind replay.
byte-bounded snapshot/baseline files; cancellation and operation-ID guards.
covers restoration and compaction.
Parity fixes cover omitted checkpoint cursors, interrupted finish resolution,
cancelled staging and competing phase transitions.
reverseEtlvalues for runner image,existing runtime Secret, dedicated runner service account and cloud identity
annotations; namespace-scoped lease-only RBAC, separate from connector jobs.
/tmpsize limit for scheduled, manual and recovery runs. syncctl validatessettings on startup; required store/bucket Secret keys prevent missing-storage starts.
a dedicated CI workflow. Cached generated Zod output is cleared before regeneration.
Google full audience replacement and delivery observability
mirroring. Supported for managed and existing owned audiences, with explicit exclusive
management/takeover confirmation. Existing sync configurations are not converted.
member, including unchanged members; wait for all uploads to be accepted before
submitting
audienceMembers:removeAllwith that originalremoveAsOfTime.re-uploading. Missing/ambiguous cleanup receipts block replay. Promote and prune the
durable baseline only after confirmed cleanup.
audience; no other tools/users may upload to an exclusively managed target.
Failed extraction or rejected uploads never authorize cleanup.
count for cleanup; logs explicitly distinguish uploaded/accepted records from cleanup
status and matched/targetable audience size.
delivery summary per attempt, and actionable redacted failures. Pending Google work is
presented as a status refresh rather than recovery.
Latest validation
pruning/restoration, configuration confirmation and unchanged default behavior.
Rollout — destructive schema cutover
deploy:consolelabel. Runner deploys separately.Back up the database; reconcile pending provider requests with the old
runner/schema; explicitly retire/reset test syncs and audiences first.
explicit data-loss confirmation. Do not bypass that in unattended deployment.
Prefer a fresh disabled test sync with a new empty Jitsu-managed audience.
Deleting old state alone loses the removal baseline and is not a safe reset.
RETL_OBJECT_STORE/RETL_OBJECT_BUCKET, then deploy the new runnerand verify storage before enabling new syncs. Node >=22.13; Node24 recommended.
backup restoration and provider reconciliation, not just unsetting storage.
baselines and unresolved batches must survive. Monitor orphan/bucket growth.
cleanup instructions are in
services/retl-runner/src/artifacts/README.md.local diagnostics rebuilt the runner and reset the paused test sync; they are
not an automatic migration/deployment step provided by this PR.
See
services/retl-runner/src/artifacts/README.mdfor detailed cutover, permissions,storage configuration and retention precautions.
helm/REVERSE_ETL.mddocumentsGCS/EKS/Minikube authentication, runtime Secret keys, resources, and the pre-upgrade
schema hook hazard: pause/drain before invoking Helm, not as part of its upgrade.
Verification
bundle builds; 229 runner tests pass (1 opt-in scale test skipped), 90 console
integration tests pass with the reduced schema, and all 136 console unit tests
pass. Warehouse-query: 170 tests pass. The 9 committed Helm tests and strict lint
pass. Scoped runtime/Helm reviews, verification of the corrected storage quickstart,
and fresh final review cover the recovered changes and conflict resolutions.
ignored generated model files.
immutable test objects, the real S3 SDK against a local HTTP service, and GCS doubles.
phase, lost startup/commit responses, restart, partial failure, staged finish
continuation, phase conflicts, async mirrors/removals, corruption, duplicate
operation IDs and snapshots larger than one artifact.
completed clean for
6061f083..18ce2f97.go test -vet=off ./... -count=1; pre-existingfmt.Errorfvet error is not changed).and Helm 4.2.2. Coverage includes disabled defaults, required configuration,
GKE/EKS annotations, external service accounts, least-privilege RBAC, resource
propagation, duplicate/conflicting env rejection and no automatic data-loss flag.
No live GCS/S3 bucket or advertising API was called during validation.