18 ноября 2016 г.

jarvis

Лучшее – враг хорошего. Работает – не трогай. Не работает – тоже не трогай. Вот, например, один тред иногда падает из-за ошибок сетевых. Не смог подконнектиться, бывает. Ну и бог бы с ним. В следующий раз сделает. Казалось бы. Но нет. Непорядочек же. Надо же аккуратненько. Во-первых, заводим lock, чтобы избежать race conditions и прочего свального греха и неразберихи. И впихиваем try и finally, где аккуратненько делаем shutdown сокету и close. Мы ж правильные! Мы ж докуху прочитали, как правильно по феншую сокеты закрывать! Ну и lock отпускаем там же, в finally. Любуемся, ликуем, улыбаемся и машем. До первого падения. После которого перестаёт работать вообще ВСЁ. То есть, раньше тред падал, и всё продолжало работать. А теперь падает – и всё встаёт колом. Это называется «юный разработчик добавил обработку исключительных ситуаций». А всё дело в том, что если исключение вызвал connect и сокет не открылся, то вызов shutdown на этот сокет опять же вызывает exception. А релиз лока, разумеется, стоит после, и дело до него не доходит. Потому что finally, конечно, исполняется в любом случае, но не факт, что весь, хаха. Лок не освобождается, все стоят и терпеливо ждут, ничего не работает, решается только перезапуском. Мораль была в начале, а вообще, если тред падает – это нормально. Выведи трейс в лог, наплюй и забудь, потом разберешься. Для этого треды и нужны, чтобы падать безопасно. Не надо делать правильно там, где правильно правильно не делать. Кстати, постить мне тоже Яша напоминает. Может и сам постить, но это пример ложной автоматизации. Это когда затраты на подготовку к автоматизации превышают затраты на «сделать руками». Частенько встречается в автотестировании в виде «две недели готовим тестовые данные, вжик – автотесты за три секунды, полторы недели разгребаем логи». Это не значит, что не надо автотестирование. Это значит, что задачу надо решать целиком. И если в сухом остатке автоматизация заключается исключительно в добавлении новых действий, то она не нужна #Jarvis

Комментариев нет:

Отправить комментарий