Pulizia delle Chiavi di Idempotenza
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>&1Manuale/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.