2012-07-27 21:49:02
POŻAREN!1

Wakacje, ludzie wyjeżdżają, jest więc ciut luźniej ponieważ jest mniejszy przyrost zadań i wreszcie ludzie się z nich wygrzebują - abo sprężają się, bo chcą mieć spokojny urlop i zostawić sobie jak najmniej na po urlopie. Po tygodniu który zdawał się sprowadzać do zabawy w "kto pierwszy odklika nowe, pierdołowate* zadanie, ten się nie nudzi" na zmianę z liczeniem lampek w LCDku (Internet też ma wolne), przyszedł do mnie nasz nadszyszkownik i ogłosił mi, że klient przyjdzie mailem. To brzmiało złowieszczo, jak awantura na pół kraju.

I co gorsza, nie myliłem się.

PROLOG

Dzień wcześniej dostaliśmy sygnał, że poprzedniego wieczora wysypało się jedno z API i ktoś miał problem z testowaniem. Po zanalizowaniu sprawy odrzuciłem zgłoszenie jako nie mające miejsca, ponieważ u nas wszystko zadziałało. Jakiś czas później dowiedzieliśmy się, że specjaliści od opierdalania się i zwalania winy na innych usunęli usterkę i sprawa jest nieaktualna. Pomyślałem sobie - "Coś za szybko jak na nich. Założę się, że do jutra zjedzie się znowu..." i wziąłem się za liczenie ilości zielonych diodek na zmianę ze ściganiem się z kumplem o to, kto pierwszy drapnie nowy task. Nic nie zapowiadało tego, co się wkrótce stanie.

Anomalia

Okazało się, że wkrótce zajdą pewne zmiany i rozwój (z jednego miasta) dostał cynk od biznesu (centrali mieszczącej się w drugim mieście) przedwczoraj. Rozwój zaś zaczął mieć z tym problemy, aż w końcu natrafili na coś zaskakująco dziwnego, ponieważ nikt nie wiedział o co chodzi, zgłosili sprawę nam (trzecie miasto). Początkowo myślałem, że to kolejna pierdółka wynikająca z użycia złego WSDLa albo niestosowania się do niego, jednak to nie było to. Sama odpowiedź systemu była myląca - co ma dodawanie klienta grupowego do rejestracji karty kredytowej?! Po godzinie analizowania ścieżek kodu pod debuggerem doszedłem do wniosku, że sprawa wymaga dobrej znajomości jednego z naszych podsystemów, ale mogła to być również sieczka w danych na bazie do testów i eksperymentów. Wobec braku lepszej alternatywy i oddalającej się godziny "W", zadzwoniłem do zgłaszającego i zasugerowałem założenie nowego klienta i przetestowanie na nim, po czym ewakuowałem się.

POŻAREN!1

Zaczęło się niepozornie. Ot, zgłoszenie na mały, mało ważny fix w WSDLu*, powrót naszej Inspektor Gadżeciary z urlopu (to jest akurat dobry news), nadchodzące upały i przeprowadzka do nowego open-space'u, takie tam, ot, zwykły dzień w biurze. Jednak po pewnym czasie dostałem powiadomienie o nowym mailu i jednocześnie zadzwonił telefon...

"O co chodzi z tym zgłoszeniem? Robicie coś? Co jest z tym grane?" Skontrowałem, że czekam na odpowiedź na wczorajszą sugestię. Ciut za późno - przełączyłem się na mailer, okazało się, że to powiadomienie z task trackera. FUBAR. Zrobili, to samo. Jest źle, bo na środowisku testowym leży rejestrowanie kart kredytowych poprzez jeden z naszych wewnętrznych systemów. "No, ... w takim razie nie mogę teraz nic doradzić.". Zaczęło się telefoniczne przesłuchiwanie mnie - co wiem, co się stało, co popsuliśmy, z czego wynika ten błąd, "PRZECIEŻ TO DZIAŁAŁO!"... Żądali ofiar, a ja nie miałem co im dać. Poza Routerem. Na odchodne padła sugestia, że wersja jednego z API była podnoszona i możliwe że to od wtedy nie działa.

Wiedziałem, że rozwój ma taką wiedzę na temat sytuacji, że nawet jak niczego nie przekręcą, to i tak nawet Router nic nie wyczaruje, więc naprodukowałem logów, wyskrobałem maila z opisem sytuacji, wysłałem. Po chwili - mailowy sztorm. Padła jedna wskazówka, padła druga, ale ani jedno, ani drugie niewiele mi dawało. Zacząłem analizować SVN licząc, że znajdę zmianę, która spowodowała całe zamieszanie, ale bezskutecznie. Padła trzecia wskazówka - "logi z ostatniego działającego wywołania". To był niezły trop, więc uderzyłem do kolegi, on wyciągnął dla mnie logi z testowego ServiceMixa i zacząłem szukać wzorca wywołań, który odpowiadał temu, jaki ja posiadałem w swoich logach. Po chwili znalazłem, i zdawał się pasować do jednej z pozostałych dwóch wskazówek. Jednak coś nie pasowało - działające wywołanie nie nastawiało bufora na jedną z części odpowiedzi. "I to dopiero teraz nie działa? Bzdura..." Szybki debug ograniczył zakres poszukiwań w SVNie z czterech plików (po kilka tysięcy linii każdy) do jednej metody w jednym z plików, to z kolei poprowadziło mnie w czasie do początku miesiąca, gdy inny kolega poprawiał błąd w innym z naszych wewnętrznych systemów.

Spokojnie, Przemysław Tytoń

Kolega dostał zadanie - jedno z wywołań API może automatycznie przypisać jedną z cech do klienta, ale musi być podstawiony wcześniej bufor na tę cechę. I wszystko okej, ale... Dlaczego zmiana kolegi polegała na usunięciu komentarza sprzed samego podstawienia? Dalsze grzebanie w przepastnych czeluściach naszego SVNa zaowocowało znalezieniem commitu datowanego na ostatni kwartał zeszłego roku, opisanego jako efekt poprawek po testach. Integralną częścią commitu było oczywiście zakomentowanie podstawienia. Co oznaczało, że całe tornado, w którego środku stałem, to najzwyczajniejsza regresja.

Ale skoro tak, to mamy dwa wzajemnie wykluczające się błędy i nie można się ograniczyć do prostego revertu. Trzeba było wykombinować, jak tu wywoływać API po staremu dla jednego kontekstu, a jak dla drugiego. Szybki rzut okiem na listę metod które wywołują metodę, w której tkwił problem - i szybka poprawka, wystarczył dodatkowy boolean jako argument i poprawka w trzech miejscach. Voila! Działa tu, działa tu, testy przechodzą.

Zbranchowałem repozytorium tak, by poprawka weszła nie tylko do nowego wydania ale i do poprzedniego, kolega wgrał fixa na środowisko testowe, ... odpalam zdalnie.

To wcale nie jest koniec

Pechowa usługa dalej nie działa. Czemu? API, które okazuje się być krytyczne dla niej, leży. I niestety, chodzi o dokładnie to samo API, które dwa dni wcześniej wysrało się, a które dzień później miało działać. To system zewnętrzny dla nas, więc myślę sobie, że nawet nie muszę się specjalnie przejmować, w końcu nie kontroluję tego. Zamknąłem zgłoszenie dodając do niego stosowną uwagę odnośnie API, znalazłem sobie pierwsze poważniejsze zgłoszenie, zająłem się nim, i w międzyczasie dostałem maila z komentarzem do zamkniętego zgłoszenia - "no tak, jedno się zreperuje, to spier... się co innego". Uśmiechnąłem się, spojrzałem na zegarek - jeszcze chwila i można ogłosić weekend. Ale coś mnie tknęło, i sprawdziłem jeszcze raz co się dzieje ze środowiskiem testowym i ... szyna się wygięła. A z osób, które mogłyby ją wyprostować, nikogo już nie ma. "Piotrek, ale jest piątek, 16:30, kto teraz będzie cokolwiek z tym robił?". Poniekąd prawda.

Przy podpisywaniu karty obecności zaczepił mnie nadszyszkownik i zażądał relacji z tajfunu. Po wszystkim dostałem zadanie opieprzania specjalistów ds. opieprzania się i zwalania winy na innych aż zaklika. Jasne. No cóż. Ale to na szczęście dopiero w poniedziałek...

Wracając do domu wyciągnąłem telefon by sprawdzić która godzina. Już chowałem, gdy coś mnie tknęło - spojrzałem jeszcze raz, a tam, gdzie normalnie widniało "Lodz", nagle pojawił się "Bialogard". What the fuck... To pewnie przez tą masę krytyczną, przez którą stałem na skrzyżowaniu przez 15 minut, próbując znieść hałas dzwonków, klaksonów i okrzyków rowerrorystów, którym się wydaje, że to jest sympatyczne...

PROLOG

Wnioski nasuwają się takie:

  • Jeśli otaczasz kod komentarzem, zostawiaj obok notatkę dlaczego. Nawet jeśli tylko dla siebie. I nie chodzi o głupie "FIXME" abo "TODO". Masz siąść do kodu po ciężkiej amnezji i wiedzieć, dlaczego to zrobiłeś.
  • Jeżeli usuwasz komentarz z okolic zakomentowanego kodu, a nie wiesz czemu został zakomentowany, najpierw dowiedz się o co chodzi, dopiero potem przejdź do czynu.
  • Jak pokazałem, opisy podawane SVNowi/GITowi/CVSowi/TFSowi przy commitowaniu są czasami niezmiernie ważne.
  • Każdy piątek jest pechowy, nie tylko 13-go.

* - "W WSDLu element TakiŚmakiIOwaki jest oznaczony jako wymagany, natomiast w opisie implementacji jest nieobowiązkowy. Proszę o poprawienie WSDLa.". Znalezienie elementu w WSDLu - 27 sekund. Poprawka - 3 sekundy.


Może Cię zainteresować...

Powered by:
Hellcore Mailer - polski program pocztowyOpera Web BrowserFreeBSD - The Power to Serve!Slackware
RSSy:
Sidekick:
Projekty:
O autorze:
Zobacz:
Kategorie:
Archiwum:
Szukaj: