Очищення ключів ідемпотентності

1 хв читання

Очищення ключів ідемпотентності

Кожен JSON-RPC запит, що містить поле idempotencyKey, записується в таблицю pgarachne.requests функцією pgarachne.save_idempotency_key(). Саме це забезпечує роботу виявлення дублікатів — але це також означає, що таблиця росте необмежено, якщо оператор не запускає очищення періодично.

PgArachne сам не запускає планувальник фонових завдань. Найчистіші варіанти:

pg_cron (рекомендовано, якщо можете встановлювати розширення)

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

Заплануйте shell-завдання, яке викликає функцію через psql:

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

Вручну/за потреби

Ви можете викликати цю функцію в будь-який момент з psql, скрипта міграції або будь-якого іншого клієнта. Вона повертає кількість видалених рядків.

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

Вибір вікна зберігання

Виберіть вікно з достатнім запасом понад найдовший очікуваний інтервал повторних спроб ваших клієнтів. Якщо клієнт з помилкою повторює той самий ключ ідемпотентності через 48 годин після первинного запиту, 24-годинне вікно зберігання непомітно пропустить дублікат.

Для більшості розгортань 24 години є безпечним значенням за замовчуванням.