Limpeza de Chaves de Idempotência

2 min de leitura

Limpeza de Chaves de Idempotência

Toda requisição JSON-RPC que carrega um campo idempotencyKey é registrada na tabela pgarachne.requests pela função pgarachne.save_idempotency_key(). É isso que torna a detecção de duplicatas possível — mas também significa que a tabela cresce sem limite, a menos que um operador execute a limpeza periodicamente.

O PgArachne não executa um agendador em segundo plano por conta própria. As opções mais indicadas:

pg_cron (recomendado se você puder instalar extensões)

-- 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 externo/timer do systemd

Agende uma tarefa de shell que chama a função via psql:

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

Manual/pontual

Você pode chamar a função a qualquer momento a partir do psql, de um script de migração ou de qualquer outro cliente. Ela retorna o número de linhas removidas.

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

Escolhendo uma janela de retenção

Escolha uma janela confortavelmente maior que o maior intervalo de nova tentativa esperado para seus clientes. Se um cliente com defeito tentar novamente a mesma chave de idempotência 48 horas após a requisição original, uma janela de retenção de 24 horas deixará a duplicata passar silenciosamente.

Para a maioria das implantações, 24 horas é um padrão seguro.