Ensure – naprawdę gwarantuje wykonanie
Ostatnio przepisywałem skrypt do zbierania statystyk ruchu ze switchy po snmp w celu pobrania ilości oktetów, które przeleciały przez jego interfejsy. Na końcu aktualizuję pliki RRD, w których te informacje zapisuje. Niby prosta rzecz, ale trzeba obsłużyć bardzo wiele wyjątków (błąd połączenia do bazy danych, timeout switcha, wywalenie się jakiegoś wątku itp. itd.).
Skrypt jest odpalany co minutę z crona i zazwyczaj wyrabia się w przeciągu 10 – 15 sekund. Czasem jednak wystąpi jakiś fackup (timeouty do switcha, timeout do bazy danych, load na maszynie itp.), więc taki skrypt może wykonywać się dłużej. W przypadku wykonywania skryptu dłużej niż minuta pojawia się problem , że cron może odpalić drugą instancję, która również może mieć w/w opóźnienia. Jest to sytuacja, do której nie możemy dopuścić.
(more…)