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
- W
a92f78dsynchronizacja wypisuje UWAGĘ, gdy ten sam agent i plik trafiają doconflicts.logponownie. Dodałem test regresji nr 14. - W
b65b98ewykluczyłemportal_stan.jsonzEXCLUDESwsync-agents.shi dodałem regułę w.gitignore. W6a0f6a2usunąłem śledzoną kopię z repozytorium. - W
460e3cdstan portalu zapisuje się tylko przy zmianie aktywnej sesji. FunkcjazapiszStanJesliZmianaporównuje stan z plikiem i pisze tylko przy różnicy albo gdy plik jest uszkodzony. - W
fc63ea1wpisałem do rejestru dwa wejścia dla zadaniaanki-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.