Εκκαθάριση Κλειδιών Ιδεμποτεντίας

1 λεπτά ανάγνωσης

Εκκαθάριση Κλειδιών Ιδεμποτεντίας

Κάθε αίτημα JSON-RPC που φέρει ένα πεδίο idempotencyKey καταγράφεται στον πίνακα pgarachne.requests από τη συνάρτηση pgarachne.save_idempotency_key(). Αυτό είναι που κάνει την ανίχνευση διπλότυπων να λειτουργεί — αλλά σημαίνει επίσης ότι ο πίνακας μεγαλώνει χωρίς όριο εκτός αν ένας operator εκτελεί περιοδικά εκκαθάριση.

Το PgArachne δεν εκτελεί δικό του background scheduler. Οι πιο καθαρές επιλογές:

pg_cron (συνιστάται αν μπορείτε να εγκαταστήσετε 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/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, ένα script μετάπτωσης, ή οποιοδήποτε άλλο client. Επιστρέφει τον αριθμό των γραμμών που διαγράφηκαν.

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

Επιλογή παραθύρου διατήρησης

Επιλέξτε ένα παράθυρο αρκετά μεγαλύτερο από το μεγαλύτερο αναμενόμενο διάστημα επανάληψης για τους clients σας. Εάν ένας προβληματικός client επαναλάβει το ίδιο κλειδί ιδεμποτεντίας 48 ώρες μετά το αρχικό αίτημα, ένα παράθυρο διατήρησης 24 ωρών θα αφήσει σιωπηλά το διπλότυπο να περάσει.

Για τις περισσότερες εγκαταστάσεις, οι 24 ώρες είναι μια ασφαλής προεπιλογή.