Nettoyage des clés d’idempotence

2 min de lecture

Nettoyage des clés d’idempotence

Chaque requête JSON-RPC portant un champ idempotencyKey est enregistrée dans la table pgarachne.requests par la fonction pgarachne.save_idempotency_key(). C’est ce qui permet la détection des doublons — mais cela signifie aussi que la table grossit indéfiniment tant qu’un opérateur n’exécute pas un nettoyage périodique.

PgArachne n’exécute pas lui-même de planificateur en arrière-plan. Les options les plus adaptées :

pg_cron (recommandé si vous pouvez installer des extensions)

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

Cron externe/timer systemd

Planifiez une tâche shell qui appelle la fonction via psql :

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

Manuel/ponctuel

Vous pouvez appeler la fonction à tout moment depuis psql, un script de migration, ou tout autre client. Elle retourne le nombre de lignes supprimées.

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

Choisir une fenêtre de rétention

Choisissez une fenêtre confortablement plus longue que le plus long intervalle de nouvelle tentative attendu pour vos clients. Si un client défectueux retente la même clé d’idempotence 48 heures après la requête d’origine, une fenêtre de rétention de 24 heures laissera silencieusement passer le doublon.

Pour la plupart des déploiements, 24 heures constitue une valeur par défaut sûre.