Idempotency Key Cleanup

1 Min. Lesezeit

Idempotency Key Cleanup

Jeder JSON-RPC-Request mit einem idempotencyKey-Feld wird von der Funktion pgarachne.save_idempotency_key() in der Tabelle pgarachne.requests gespeichert. Das ist die Grundlage für die Duplikaterkennung — es bedeutet aber auch, dass die Tabelle unbegrenzt wächst, wenn nicht regelmäßig ein Cleanup durchgeführt wird.

PgArachne führt selbst keinen Hintergrund-Scheduler aus. Die saubersten Optionen:

pg_cron (empfohlen, falls Sie Extensions installieren können)

-- Run every hour, remove keys older than 24 hours
SELECT cron.schedule(
  'pgarachne-idempotency-cleanup',
  '0 * * * *',
  $$SELECT pgarachne.cleanup_idempotency_keys('24 hours'::interval);$$
);

Externer Cron/systemd-Timer

Planen Sie einen Shell-Job, der die Funktion über psql aufruft:

0 * * * * psql "host=... user=... dbname=..." \
  -c "SELECT pgarachne.cleanup_idempotency_keys('24 hours'::interval);" \
  >> /var/log/pgarachne-cleanup.log 2>&1

Manuell/ad-hoc

Sie können die Funktion jederzeit über psql, ein Migrationsskript oder einen anderen Client aufrufen. Sie gibt die Anzahl der gelöschten Zeilen zurück.

SELECT pgarachne.cleanup_idempotency_keys();          -- default: 24 hours
SELECT pgarachne.cleanup_idempotency_keys('7 days'::interval);

Retention-Fenster wählen

Wählen Sie ein Fenster, das deutlich länger ist als das längste zu erwartende Retry-Intervall Ihrer Clients. Wenn ein fehlerhafter Client denselben Idempotency Key 48 Stunden nach dem ursprünglichen Request erneut sendet, lässt ein 24-Stunden-Retention-Fenster das Duplikat unbemerkt durch.

Für die meisten Deployments sind 24 Stunden ein sicherer Standardwert.