Skip to content

fix(ingestor): default idempotency key to install-time stamp, not release revision #130

@saadqbal

Description

@saadqbal

Problem

ingestor.idempotencyKey (in ingestor/templates/_helpers.tpl) currently falls back to <release>-<revision> when .Values.idempotencyKey is unset. After helm uninstall, Helm restarts revisions at 1 on the next install, so the key is identical across attempts under the same release name.

If the image digest or any other dedupe-relevant field changed between attempts — the dominant case during testing/debugging — jobs-manager returns a 409 like:

idempotency_key 'my-dataset-1' already used with a different image_digest or table; refusing to reuse

Behavior is correct (jobs-manager protecting against silent param drift) but the default surfaces it confusingly. A customer following the README will hit this on their second install attempt and assume the chart is broken.

Fix

When .Values.idempotencyKey is unset, derive the key from install time instead of release revision:

{{- define "ingestor.idempotencyKey" -}}
{{- if .Values.idempotencyKey -}}
{{ .Values.idempotencyKey }}
{{- else -}}
{{ printf "%s-%d" .Release.Name (now | unixEpoch) }}
{{- end -}}
{{- end -}}

now | unixEpoch is unique-enough across realistic install rates within one release name; if it ever isn't, the operator is hammering reinstalls inside a single second and the 409 is the correct outcome.

Doc changes

  • ingestor/values.yaml — flip the doc comment to "defaults to <release>-<unix-epoch>; override only for at-most-once semantics".
  • ingestor/README.md — same flip in the frequently-overridden table.
  • ingestor/Chart.yaml — bump version 0.1.0 → 0.1.1 (default-behavior change).

Acceptance

  • helm install x ./ingestor → uninstall → reinstall under the same release name + same ingest.yaml → second install is a fresh ingestion run, not a 409.
  • helm install x ./ingestor --set idempotencyKey=foo → uninstall → reinstall with the same key + same config → jobs-manager returns 200 replay.
  • helm template renders distinct keys on two successive renders.

Refs

Sibling to #125 (which dropped the digest pinning gate). Together these polish the customer-facing install loop.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions