Retries and idempotency¶
The current Okatana API does not expose idempotency keys. A POST can succeed on the server while the caller times out before receiving the response. Blindly repeating that POST can create duplicate projects, tickets, comments, documents, or notifications.
For this reason the SDK defaults to:
GET safe-read retry policy
POST 0 automatic retries
PUT 0 automatic retries
PATCH 0 automatic retries
DELETE 0 automatic retries
GET requests can retry 429, 500, 502, 503, and 504, plus network failures and SDK timeouts. Client-generated delays use bounded exponential backoff with jitter. A valid server Retry-After delay is honored as supplied rather than shortened to the client backoff cap.
Explicit override¶
await client.Projects.GetAsync(projectId,
new OkatanaRequestOptions { MaxRetries = 4 },
cancellationToken);
A write can also be given MaxRetries, but doing so is an explicit caller decision. Use a unique external marker, project key, or stored Okatana ULID so ambiguous results can be reconciled before creating again.
For example, an external issue synchronizer can add [external:GH-1842] to the title, search that marker after an ambiguous timeout, and create only when no matching ticket exists.