PABLO.ENGINEERING
// WRÓĆ DO WSZYSTKICH WPISÓW
// 2 min

Ostrzeganie o powtarzających się konfliktach synchronizacji

Konflikt, który rozstrzyga się sam, znika z logu. Jeśli jednak wraca co kilka przebiegów, to nie jest pojedynczy przypadek, tylko dwie kopie, które się rozjeżdżają. Tego dnia zrobiłem tak, żeby ten wzorzec był widoczny, i usunąłem źródło najczęstszych fałszywych konfliktów.

Problem: konflikt rozstrzygany po cichu

Plik stanu sesji portalu treningowego (portal_stan.json) konfliktował w dniach 22 i 25.10. Synchronizacja rozstrzygała każdy konflikt osobno, według czasu modyfikacji, więc nikt nie widział, że problem się powtarza. Konflikt był wykrywany dopiero przy kolejnym alarmie.

Przyczyna leżała gdzie indziej. Przebieg portalu zapisywał plik co minutę, nawet bez zmiany, więc synchronizacja widziała go jako ciągle zmieniany.

Co zrobiłem: ostrzeżenie, wyłączenie i zapis przy zmianie

  1. W a92f78d synchronizacja wypisuje UWAGĘ, gdy ten sam agent i plik trafiają do conflicts.log ponownie. Dodałem test regresji nr 14.
  2. W b65b98e wykluczyłem portal_stan.json z EXCLUDES w sync-agents.sh i dodałem regułę w .gitignore. W 6a0f6a2 usunąłem śledzoną kopię z repozytorium.
  3. W 460e3cd stan portalu zapisuje się tylko przy zmianie aktywnej sesji. Funkcja zapiszStanJesliZmiana porównuje stan z plikiem i pisze tylko przy różnicy albo gdy plik jest uszkodzony.
  4. W fc63ea1 wpisałem do rejestru dwa wejścia dla zadania anki-spanish-daily-sync, bo crontab ma wersje letnią i zimową z guardem strefy czasowej, a rejestr pokazywał jedną.

Dlaczego to ważne

Ostrzeżenie o powtórce pozwala zauważyć rozjechane kopie, zanim wersja z vaulta nadpisze aktywną sesję. Zapis stanu tylko przy zmianie usuwa fałszywe konflikty, które ukrywały prawdziwe. Test regresji pilnuje, żeby plik nie wrócił do synchronizacji.

Czego się nauczyłem

  • Konflikt, który się powtarza, mówi więcej niż pojedyncze rozstrzygnięcie. Warto go raportować jako wzorzec.
  • Plik generowany przez maszynę nie powinien być częścią synchronizacji źródeł.
  • Zapis bez zmiany to szum, który w synchronizacji wygląda jak edycja. Porównanie przed zapisem kosztuje mniej niż fałszywe alarmy.
#daily#reliability#automation