Pulizia delle Chiavi di Idempotenza

2 min di lettura

Pulizia delle Chiavi di Idempotenza

Ogni richiesta JSON-RPC che contiene un campo idempotencyKey viene registrata nella tabella pgarachne.requests dalla funzione pgarachne.save_idempotency_key(). È questo meccanismo che rende possibile il rilevamento dei duplicati — ma significa anche che la tabella cresce senza limiti a meno che un operatore non esegua periodicamente una pulizia.

PgArachne non esegue autonomamente uno scheduler in background. Le opzioni più pulite sono:

pg_cron (consigliato se puoi installare estensioni)

-- 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 esterno/timer systemd

Pianifica un job shell che chiami la funzione tramite psql:

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

Manuale/ad-hoc

Puoi chiamare la funzione in qualsiasi momento da psql, da uno script di migrazione o da qualsiasi altro client. Restituisce il numero di righe eliminate.

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

Scegliere una finestra di conservazione

Scegli una finestra comodamente più lunga del più lungo intervallo di ritentativo previsto per i tuoi client. Se un client malfunzionante ripete la stessa chiave di idempotenza 48 ore dopo la richiesta originale, una finestra di conservazione di 24 ore lascerà passare silenziosamente il duplicato.

Per la maggior parte delle installazioni, 24 ore è un valore predefinito sicuro.