C-Parser: как понять сообщение об ошибке?

Запросы на решение проблем

Модератор: ykolesnikov

Ответить
Voldemar0
OTRS Новобранец
Сообщения: 3
Зарегистрирован: 22 июн 2012, 08:43

C-Parser: как понять сообщение об ошибке?

Сообщение Voldemar0 » 22 июн 2012, 08:58

Привет!
С месяц назад установил OTRS 3.1.3. Всё нормально поставилось, логинился, разделы разные щёлкал - работало. Сегодня полезли на неё снова - вываливается ошибка 500. В логах апача следующее:

Код: Выделить всё

[Fri Jun 22 12:16:30 2012] -e: Use of uninitialized value in concatenation (.) or string at /usr/local/otrs//Kernel/System/Log.pm line 161.
ERROR: OTRS-CGI-01 Perl: 5.12.4 OS: freebsd Time: Fri Jun 22 12:16:30 2012

 Message: C-Parser: 
mismatched tag at line 18, column 2, byte 558 at /usr/local/lib/perl5/site_perl/5.12.4/mach/XML/Parser.pm line 187
!

 Traceback (31639): 
   Module: Kernel::System::XML::XMLParse (v1.109) Line: 776
   Module: Kernel::System::XML::XMLParse2XMLHash (v1.109) Line: 608
   Module: Kernel::Output::HTML::DashboardProductNotify::Run (v1.11) Line: 86
   Module: Kernel::Modules::AgentDashboard::_Element (v1.29) Line: 513
   [:skip:]
   Module: ModPerl::RegistryCooker::default_handler (v1.90) Line: 170
   Module: ModPerl::Registry::handler (v1.99) Line: 31

[Fri Jun 22 12:16:30 2012] -e: Use of uninitialized value in concatenation (.) or string at /usr/local/otrs//Kernel/System/Log.pm line 161.
ERROR: OTRS-CGI-01 Perl: 5.12.4 OS: freebsd Time: Fri Jun 22 12:16:30 2012

 Message: XML::Parser produced errors. I use XML::Parser::Lite as fallback!

 Traceback (31639): 
   Module: Kernel::System::XML::XMLParse (v1.109) Line: 777
   Module: Kernel::System::XML::XMLParse2XMLHash (v1.109) Line: 608
   Module: Kernel::Output::HTML::DashboardProductNotify::Run (v1.11) Line: 86
  [:skip:]
   Module: ModPerl::RegistryCooker::default_handler (v1.90) Line: 170
   Module: ModPerl::Registry::handler (v1.99) Line: 31

[Fri Jun 22 12:16:30 2012] [error] [Fri Jun 22 12:16:30 2012] Lite.pm: mismatched tag 'head'\n
И syslog тоже пишет :

Код: Выделить всё

Jun 22 12:16:30 otrs OTRS-CGI-01[31639]: [Error][Kernel::System::XML::XMLParse][Line:776]: C-Parser:  mismatched tag at line 18, column 2, byte 558 at /usr/local/lib/perl5/site_perl/5.12.4/mach/XML/Parser.pm line 187 ! 
Jun 22 12:16:30 otrs OTRS-CGI-01[31639]: [Error][Kernel::System::XML::XMLParse][Line:777]: XML::Parser produced errors. I use XML::Parser::Lite as fallback! 
Проверил контрольные суммы установленных пакетов - никаких проблем (ОС FreeBSD, pkg_info -g *).

По инету порылся - похожие тексты сообщений об ошибках есть, но не нашлось ответов - что с эти делать ?
И - главное - я понять сами сообщения не могу:

1) Например, Traceback: там перечисляются через '::' вложенные методы ? Но тут же и номера строк - а в каких файлах эти строки ?

2) "[Error][Kernel::System::XML::XMLParse][Line:776]: C-Parser: mismatched tag at line 18, column 2, byte 558 at /usr/local/lib/perl5/site_perl/5.12.4/mach/XML/Parser.pm line 187 !" - я так понимаю, парсер сообщает (а почему C-парсер ? это имя собственное ? или он действительно C-шный код разбирает ???) о найденной ошибке, но где ? XML/Parser.pm - это сам парсер или файл, который парсится ? Номера строк : 18 или 187 ?
Я посмотрел Parser.pm - это перловский код, в строке 187:
eval { $result = $expat->parse($arg); };
- это же просто вызов метода с присвоением возвращаемого им значения, тут же нет никаких условий?

3) Всё таки эти две ошибки - критические или нет? Вроде выглядят похоже, но на одной выполнение кода не прекращается, а на другой - финал. Правильно я понимаю: Parser.pm возвращает ошибку, тогда вместо него запускается нечто Lite и оно тоже не может разобраться в аргументах, после чего скрипт сваливается?

Что они всё таки парсят?

alexus
OTRS Гуру
Сообщения: 5192
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 92 раза
Поблагодарили: 82 раза

Re: C-Parser: как понять сообщение об ошибке?

Сообщение alexus » 22 июн 2012, 09:42

Во-первых, обновитесь до 3.1.6. Во-вторых, Parser.pm парсит различные XML`и, которые есть в OTRS. Смотрите, кто и что правил в последнее время.
С уважением,
Алексей Юсов

Prod: OTRS CE ITSM 6.0.28 on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

Voldemar0
OTRS Новобранец
Сообщения: 3
Зарегистрирован: 22 июн 2012, 08:43

Re: C-Parser: как понять сообщение об ошибке?

Сообщение Voldemar0 » 23 июн 2012, 11:52

Я её победил!!! :))
Ну почти...

Выяснилась довольно неприятная и нетривиальная вещь:

Во первых, про сообщения об ошибках:

1)
"Use of uninitialized value in concatenation (.) or string at /usr/local/otrs//Kernel/System/Log.pm line 161." - это сообщение возникает в модуле Log.pm, когда он пытается определить версию модулей, создавая список Trackback. В Log.pm есть странноватый участок:

Код: Выделить всё

                eval { $VersionString = 'v' . $Package1->VERSION };                                                                                
                if ( !$VersionString || $VersionString eq 'v' ) {                                                                                  
                    $VersionString = 'unknown version';                                                                                            
                }                                                                                                                                  
Т.е. если $Package1->VERSION пуста, возвращается "unknow version", но, похоже, авторы не предусмотрели или пропустили случай, когда VERSION вообще не определена. В одном из модулей есть такое.

2)
Ключевая ошибка в моём случае всё таки была одна:
"mismatched tag at line 18, column 2, byte 558"
Повторный вывод бектрейса и сообщение "XML::Parser produced errors." - это просто вторая строка сообщения об ошибке. Она выводится повторным обращением к лог-подсистеме, а та, в свою очередь, вместе с сообщением повторно выводит бектрейс.

3)
Таким образом сообщение
"[Error][Kernel::System::XML::XMLParse][Line:776]: C-Parser: mismatched tag at line 18, column 2, byte 558 at /usr/local/lib/perl5/site_perl/5.12.4/mach/XML/Parser.pm line 187 !"
следует понимать так:
Модуль Kernel/System/XML.pm (процедура XMLParse, строка 776)
обратилась к Parser.pm, строка 187,
которая сообщает, в переданном ей для анализа тексте, в строке 18, колонка 2
отстутствует _закрывающий_ тег.

Во вторых:
Самого файла-текста с ошибкой в файловой системе нет, система запрашивает его по адресу:
http://otrs.org/product.xml?Product=OTRS-3.1.3
и, никуда не сохраняя, передаёт парсеру.
(почему его всё таки назвали "C-Parser" я так и не понял - это название единственный раз присутствует в XML.pm,
просто в виде текстовой строки...)

Проблема в моём случае была в том, что у нас файрвол на любые неавторизованные запросы по http возвращает редирект на
страничку-заглушку. А OTRS не пыталась проверять ни размеры ни контрольные суммы ни, хотя бы, какие-нибудь сигнатуры
в получаемых с веба данных. И бодро валилась :(

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

yuri0001
OTRS Бывалый
Сообщения: 492
Зарегистрирован: 11 фев 2011, 20:25
Откуда: Череповец

Re: C-Parser: как понять сообщение об ошибке?

Сообщение yuri0001 » 23 июн 2012, 12:32

Добрый день!
Ответа на причину ошибки дать не могу, опыт подсказывает, как уже и говорил Алексей, где-то накосячили в настройках, а сообщение об ошибке лишь следствие косяка и может не быть впрямую связано с ошибкой. Как это ни назидательно звучит и выглядит, ITSM - это не только методология, поддерживаемая OTRS, но и необходимость для повседневной работы - все изменения должны документировться, тестироваться и лучше по отдельности, а не скопом. Я уже налетал на такое, правил настройки в нескольких местах, а когда свалился OTRS непонятно было и долго искал "откудова звук" :) . А оказалось русских буков наставил в текстах настроек.
Что касается открытия дырки к OTRS.org,то если ошибка воспроизводится легко и неоднократно, то нужны минуты. Думаю, некритично. Мы у себя на заводе открывали доступ специалистам разработчика из Голландии (BAAN IV), согласовав это со службой безопасности. Так что если тяга к истине есть, то надо делать. :oops:
С уважением
Ю. Колесников
OTRS 3.3.1, ITSM 3.3.1, SUSE 12, MySQL5

Voldemar0
OTRS Новобранец
Сообщения: 3
Зарегистрирован: 22 июн 2012, 08:43

Re: C-Parser: как понять сообщение об ошибке?

Сообщение Voldemar0 » 25 июн 2012, 12:34

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

Мне просто показалась странным (это не ошибка, скорее - какая-то недоработка), что получаемые извне данные никак не проверяются (или проверяются, но нет нормального обработчика ошибок?). Открыть доступ я, конечно, ей могу, но хотелось бы просто отключить эту проверку, а ещё лучше - отключить вообще любые попытки выйти наружу. Обновления версий сыпятся чуть ли не каждую неделю, но так часто обновлятся я не планирую, придерживаясь здесь принципа - не трогай пока работает.

alexus
OTRS Гуру
Сообщения: 5192
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 92 раза
Поблагодарили: 82 раза

Re: C-Parser: как понять сообщение об ошибке?

Сообщение alexus » 26 июн 2012, 18:15

Voldemar0 писал(а):Обновления версий сыпятся чуть ли не каждую неделю, но так часто обновлятся я не планирую, придерживаясь здесь принципа - не трогай пока работает.
Ну не каждую неделю - http://www.otrs.com/ru/open-source/novo ... -desk-317/. Некоторые обновления все-таки необходимы.
С уважением,
Алексей Юсов

Prod: OTRS CE ITSM 6.0.28 on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

asy
OTRS Новобранец
Сообщения: 23
Зарегистрирован: 11 окт 2012, 11:44

Re: C-Parser: как понять сообщение об ошибке?

Сообщение asy » 11 окт 2012, 12:31

yuri0001 писал(а):Ответа на причину ошибки дать не могу, опыт подсказывает, как уже и говорил Алексей, где-то накосячили в настройках, а сообщение об ошибке лишь следствие косяка
Позволю не согласиться. Описан явный баг, и это достойно багтрекера. Получаемые данные должны проверяться. И, тем более, система не должна быть завязана на обязательный доступ в Интернет. Хотя это уже фичереквест, а не баг.

Ответить