steinkrauz - Хроники кровавого энтерпрайза.

> Recent Entries
> Archive
> Friends
> User Info

April 5th, 2024


Previous Entry Add to Memories Tell A Friend Next Entry
11:31 pm - Хроники кровавого энтерпрайза.
Сижу, значит, пытаюсь прихлопнуть тапочком вражеские танчики, и вдруг звонок от линейного админа: «Родной, спасай, обнова не ставится, охрана из здания выгоняет, как жить, что делать?!». Вали, говорю, мил человек, домой, я подключусь да разберусь, что да как.

Надо сказать, что система, на которую апдейт накатывали, проприетарная, жирная и довольно зрелая, ибо писать её в начале 1990-х начали. Обновление там представляет из себя запуск туевой хучи утилит, которые меняют структуру базы, обновляют файлы, чистят метаданные и генерят кэши. Вот, думаю, открою сейчас лог утилиты, найду, что за проблема, поправлю, да и пойду дальше танки гонять.

Агащаз, как вы уже все поняли. Для начала, ошибка вылезла не в середине, где собственно изменения идут, а в конце, где генерация всяких кэшей и по идее ломаться нечему. Ан нет, ломается, говорит, процесс завершён с кодом 1, а потому ретрай вам, или кэнсел. Ну хорошо, смотрим последние по времени изменения логи, да, как раз по времени подходит, вот только тишь да гладь в этих логах. Код 1, понятно, ни к ошибкам системы, ни к ошибкам операционки не относится, в эту сторону не покопать. Что делать?

Ладно, запускаю мониторинг процессов, жму кнопочку ретрай и пытаюсь понять, что же там происходит. Ага, обновлятор запускает утиль на джаве, которая в свою очередь порождает два процесса, один, строящий кэш клиента, другой — делающий снимок структуры базы. Проверяю, куда оба процесса пишут логи: всё верно, куда надо. Логи опять чистые. Завершается всё опять ошибкой.

Всё-таки при всех минусах джавы, с точки зрения администрирования у неё есть охренительнейшее достоинство: в 9 случаях из 10 она прекрасно декомпилируется. К счастью, этот случая как раз попал в первую девятку, и код открылся без проблем. Вообще красота, в первых же десяти строчках красуется метод getReturnCode, я в него, там всё просто, получается временная папка, к ней имя файла, если файл есть, то возвращаем ошибку. О, думаю, был сбой, не удалился файл, сейчас почищу темп, и всё пучком будет. Чищу временный каталог, жму ретрай... и правильно, опять та же самая ошибка!

Возвращаюсь к коду, и понимаю, что поспешил: getReturnCode всего лишь обрабатывает значение, полученное ранее от метода execute. Если оно 0, то происходит описанная проверка, иначе просто возвращается значение аргумента. А потому что не надо работать вечером в пятницу, вредно это. Выдыхаю, уже внимательнее читаю метод execute, и ура, если задан параметр -log, то весь выхлоп запускаемой утили пишется в файл. И очередное спасибо джаве: так как простым spawn'ом её не запустишь, запускается она через батник. А уж добавить туда лишний параметр не проблема.

Жмём кнопку ретрай, дубль пять. Ожидаемая ошибка, но теперь-то у нас есть лог. И там действительно есть сообщение об ошибке, цитирую «???????? ???????? ???????? ? ??????». Всегда говорил, что локализация сервера это зло, но тут всё ещё до меня настроили. К счастью, все системные обозначения могут быть только в ASCII, и по ним уже понятно, что происходит: элемент метаданных при обновлении убрали, а вот привязанный к нему текстовый ресурс остался висеть неприкаянным, чем и сводит с ума утиль. Но, конечно, выводить сообщение об ошибке на консоль, при том, что утилита предназначена только для пакетного запуска, это победа.

Дальше уже дело техники, написать скрипт для удаления ошмётка, применить его вручную, нажать ретрай и наконец получить заветную зелёную галочку.

В чём мораль сей простыни, спросите вы? Морали целых две. Первая: товарищи Программисты, пишите на жабе. Пусть она многословна, неповоротлива и вообще уныла, но админить приложения на ней гораздо проще. Вторая: не ходите в энетрепрайз. Там тошно, оболго, стозевно и лайяй.


(8 comments | Leave a comment)

Comments:


From:(Anonymous)
Date:April 5th, 2024 - 09:21 pm
(Link)
Квадратные уравнения.
Если приходилось их решать, как вы это делали?

Через дискреминант или через формулы Виета? Первое программируется проще.
[User Picture]
From:[info]steinkrauz
Date:April 6th, 2024 - 08:32 am
(Link)
Ну, на практике мне этим заниматься не приходилось.
В институте дискиминантом решалось, Виет никакого выигрыша не даёт.

А если для полиномов, то там Дюран-Кернер используется.
From:(Anonymous)
Date:April 6th, 2024 - 08:26 am
(Link)
Ты нахуя болезную Касыряку на бабло разводил, пидарас?
From:(Anonymous)
Date:April 6th, 2024 - 08:46 am
(Link)
khuilashka tozhe ee obokral
From:(Anonymous)
Date:April 6th, 2024 - 12:01 pm
(Link)
Хуйлашка еще и Петхновского на косарь кинул. Или это Питухновский хуйлашку? А, похуй, какая разница
From:(Anonymous)
Date:April 6th, 2024 - 11:47 am
(Link)
проблевался. Лучше бомжевать чем ентерпрайз.
From:(Anonymous)
Date:April 6th, 2024 - 04:39 pm
(Link)
Морали противоречат друг другу.
Жаба в основном в энтерпрайзе и есть.
[User Picture]
From:[info]steinkrauz
Date:April 7th, 2024 - 06:35 am
(Link)
Неукоснительное соблюдение взаимоисключающих параграфов!

> Go to Top
LJ.Rossia.org