Request early access

Enter your first name and email address. We will email you a link to confirm your request for Tajo access.

Beginner 6 min Updated Nov 6, 2026

Recover a stuck or failed sync

What Tajo does by itself when a worker stops or a sync run fails, what the sync's page shows, and when you act: retry, reconnect, fix the mapping or publish again.

A sync run can stop halfway because a worker restarts, the other system is down or a record is refused. After a stopped worker or a passing outage, Tajo picks the sync up again on its own. It does not resend records it wrote in the last seven days. This page says what it does, what you see on the sync’s page, and the few cases where you need to act.

Quick check Open the sync from Syncs and mappings under Connections and read the newest run in Run history. A failed run says what happened and what to do next.

What Tajo does on its own

The cursor. A run reads its source in batches from the sync’s saved cursor. The cursor moves at the end of a batch only when every record in that batch landed. If the run fails, the last position it reached cleanly is kept. The next run starts there, so an interrupted batch is read again rather than skipped.

The delivery ledger. Before a record is written, it gets a delivery key. The key is a hash of the sync, the source, the page cursor, the record’s position on the page and the record itself, so it holds no personal data. Before the destination is called, the key is claimed. When the write succeeds, the key is marked completed and kept for seven days. The key does not depend on which run asks, so a retry or a later scheduled run derives the same key for the same record. Inside those seven days, the stored result is used and the destination is not called again. That is why a replayed batch does not land twice.

One run at a time. Each sync has one lease, held by the run in progress for its whole lifetime. The lease has its own token and a life of 15 minutes, renewed every 5 minutes while the run works. A run that loses its lease stops before its next write or checkpoint, to avoid writing twice. When a worker stops, its lease is no longer renewed and lapses within 15 minutes.

Automatic retries. A queued run that fails gets up to five attempts. Tajo waits 60 seconds before the second attempt, then 120, 240 and 480 seconds. A retry or test run you start yourself runs once. A run that collided with a run already in progress is not retried, and neither is a run whose published version or connections are no longer valid.

Stuck runs. For a sync Tajo runs on a schedule, a run is closed and a new one queued once it started over an hour ago and no longer holds its lease. The closed run shows “The run stopped reporting progress and was closed.” So a stopped run’s lease lasts at most 15 minutes, and a scheduled sync’s stuck run is replaced after an hour. Understanding data sync lists which syncs run on a schedule.

Pause after repeated failures. If the last five finished runs since the sync was last changed all failed, Tajo pauses the sync. Its page shows “Paused automatically by the failure circuit breaker” with the last error. One successful run resets the count. Nothing restarts a paused sync by itself: it stays paused until you fix the cause and publish it again.

The hourly check. Every hour, at 13 minutes past, Tajo alerts its own team about any workspace with an active sync and no successful run in the last 24 hours. That includes a workspace where no run was recorded at all. The alert fires once, and fires again only after a run has succeeded. A workspace whose oldest active sync was enabled or changed less than 24 hours ago is not checked yet. This alert reaches Tajo, not you, and it does not change your sync.

What you see

Open the sync from Syncs and mappings. Run history lists each run with records written out of records read, the failed count, the duration and when it started. Its status is Queued, Running, Succeeded, Partial (some records failed) or Failed.

  • A running run that has not reported progress for 2 minutes shows “Waiting for a fresh progress update”.
  • A failed run shows one sentence on what happened, one on what to do next, the failure’s name and the run id.
  • View DLQ on the Syncs page lists failed and partial runs across every sync, each with a Retry button.

What to do

  1. Read the newest failed run. Its “what to do” line is the next step. The table below lists the failures you are most likely to meet.
  2. If it says “Nothing”, wait. The next scheduled run recovers by itself.
  3. If it says to run the sync again, press Retry on the failed run under View DLQ. The retry starts from the saved cursor, so batches already written are not written again. A retry that succeeds takes the failed run off the list.
  4. If the sync was paused, fix the cause the banner names, then publish the sync again with Publish sync or Request publish approval.
  5. If the same failure comes back, send us the run id shown under the failed run.

Each failure name maps to one sentence on what happened, one on what to do next, and who fixes it: you or Tajo.

Failure nameWhat happenedWhat to doWho fixes it
lease_conflictAnother run of this sync was already in progress.Nothing. The run in progress will finish; the next scheduled run starts normally.Tajo
lease_lostThe run lost its slot part-way through and stopped to avoid writing twice.Run the sync again.Tajo
lease_unavailableThe sync could not reserve its run slot.Run the sync again. If it fails the same way, send us the run id.Tajo
stale_job_sweptThe run stopped reporting progress and was closed.Run the sync again.Tajo
provider_rate_limitedThe other system asked us to slow down.Nothing. Wait for the next scheduled run.Tajo
provider_unavailableThe other system was unavailable or did not answer in time.Nothing. Wait for the next scheduled run. If it fails the same way for a day, send us the run id.Tajo
connection_missingA tool the sync uses is not connected in this workspace; the run names it.Connect it, then run the sync again.You
connection_unauthorizedThe other system refused our access.Reconnect the connection so it gets a fresh authorization, then run the sync again.You
destination_rejectedThe destination rejected every record in this run.Check the field mapping against the destination’s required fields and formats, then run the sync again.You
node_failedA step of the sync failed while reading, transforming or writing records.Open the run to see which step failed and why, fix that, then run the sync again.You
attestation_rule_not_activeThis sync is paused.Resume the sync to run it.You
attestation_publication_not_attestedThis version of the sync has not been published.Publish the sync. Changes to a sync do not run until they are published.You
unclassified_exceptionThe sync failed for a reason we have not classified yet.Run the sync again. If it fails the same way, send us the run id.Tajo

What can go wrong

  • Retry answers “This sync rule is already running.” A retry or test run you start is refused while any run of the sync shows as Queued or Running, including a run whose worker stopped. For a sync Tajo runs on a schedule, that run is closed and replaced once it started more than an hour ago. For any other sync, send us the run id.
  • A sync failed for more than seven days. After seven days the ledger forgets a completed write. A batch replayed after that can write records again, so check the destination for duplicate contacts.
  • One sync is silent while another works. The hourly check watches the workspace, not each sync. One healthy sync hides a silent one in the same workspace, so read each sync’s Run history.
  • You want different limits. The five-failure pause and the 24-hour check are set for the whole Tajo deployment, not per sync.

This page as Markdown: recover-a-stuck-or-failed-sync.md

Loading Markdown…