czwartek, marca 09, 2023

Exceptiony i programowanie są jednak trudne ;-)

Widziałem dziś takiego kwiatka:

public void save(Object entity) {
try {
dynamoDBTable.putItem(entity);
logger.debug("Saved {}", entity);
} catch (DynamoDbException e) {
logger.error("Cannot store {}", entity, e);
}
}

Który tak naprawdę jest odpowiednikiem:

public void save(Object entity) {
try {
dynamoDBTable.putItem(entity);
logger.debug("Saved {}", entity);
} catch (DynamoDbException e) {
// ignore
}
}

Do tego był też test ;-) który najpierw używając Mockito powodował, że putItem wyrzuci wyjątek, wołał to save, a później sprawdzał czy czasem coś w bazie się zapisało i test nazywał się saveThrowsException ;-)

Tak mam wrażenie, że parę lat temu poszła plota, że wyjątki są złe i ludzie zaczęli je po prostu ignorować.

Albo robią rethrow i w przypadku apek używających Spring MVC piszą handlery które raczą usera info o tym, że był błąd, albo dławią ;-)

Inny przypadek, który widziałem, pobieranie masy danych z paginacją z jakiegoś serwera w Internecie, i retry bez limitu wywołań wszystkich odwołań nawet jak ostatni call padnie.

Oczywiście pewnego dnia to się wydarzyło, że po pobraniu 200 stron na ostatniej padło, więc spróbowało jeszcze raz i jeszcze raz i jeszcze raz... w końcu coś zablokował IP.

Błąd został znaleziony (też przez przypadek ;-) - jakiś dziwny zwyczaj budowania alertów do wszystkiego, ale takich dziwnych, że się patrzy w logi czy jest jakiś message... i jak go nie ma to alert ;p) poszła poprawka i wszystko działa.

Dwa miesiące później nie można się połączyć do serwera, developer zagląda i stwierdza, że właściciel serwera blokuje.
W koło panika, co zrobić, potrzeba tego, a oni blokują...

Od razu hipotezy, może chcą więcej kasy, może mają deal z kimś by blokować...

Okazuje się, że z innego komputera pobieranie działa, user/hasło działają... nadal panika.

Developer nie sprawdził tego nawet, od razu powiedział, że blokują.

Chwila sprawdzania pokazuje, że blokada jest na IP, nie robi jej właściciel serwera, a ktoś kto broni ich przed DDoS... 2 miesiące temu błąd w kodzie zrobił DDoS... ale jak poszedł deploy z poprawką to adres się podmienił, a po 2 miesiącach kolejny deploy wrócił do oryginalnego błędu ;-)

Mail do właściciela serwera i po godzinie wszystko działa... 

Inny przykład. Był sobie system do urlopów, ale postanowiono go zmienić.

Ktoś napisał toola do przenoszenia danych, leciały mu/jej wyjątki więc dodano łapanie wyjątków.

Sprawdzam kiedyś swoje urlopy i mam urlop 12 marca... a wiem, że nie miałem, za to planowałem na 3 grudnia ;-) 

To wszystko robią ludzie, którzy kosztują po 20-30 tysięcy za miesiąc ;-) albo i więcej.

Nie mówimy o głupich błędach, które przeszły bo nikt ich nie zauważył, nie mówimy o czymś skomplikowanym. Mówimy o rzeczach, które widać na pierwszy rzut oka.

Jak widzisz coś co rzuca wyjątek i ten jest dławiony to zawsze jest pytanie czy to jest OK, wyjątek służy do obsługi sytuacji wyjątkowej, ale takiej które może się zdarzyć. Takiej którą można zwykle odkręcić.

Ale łatwiej zignorować ;-)

Taki venting po prostu ;-)




Podobne postybeta
Weekendy robią znów za krótkie.....
Alert RCB - minimalizacja false negative prowadzi do zwiększenia false positive ;-)
Thread.stop() i "nieśmiertelne" wątki ;-)
Nauka ;-)
Koronawirus - jak na mnie wpływa

Brak komentarzy:

Prześlij komentarz