AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.08.2010, 20:18   #1  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,913 / 5736 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
У нас вчера падало при попытке исполнения следующего кода:
X++:
while select    vInventBatch3
        join            vInventDim
        where           vInventBatch3.EraIsvInventDimId == vInventDim.inventDimId
                        &&
                        vInventDim.InventSiteId == vSiteId
                        &&
                        vInventDim.InventLocationId == vInventLocationId
        join            vInventBatchPrice2
        where         vInventBatchPrice2 &&
                         vInventBatchPrice2.inventBatchId == vInventBatch3.inventBatchId
                        &&
                        vInventBatchPrice2.itemId == vInventBatch3.itemId
        {
            ..
        }
Каким-то макаром компилятор пропустил конструкцию 'join table where table && table.field==constant', но сервер во время исполнения умирал выдавая на рабочую станцию сообщение типа "Internal error number 174 found in script".

Аналогичная ситуация была когда программист написал что-то типа:
Select table1
where table1.field1==constant || (table2 && table1.field==table2.field). Хотя здесь я точную форму запроса-убийцы не помню. Идея состояла в том, что сервер похоже что пытался table2 как-то засунуть в сгенерированный SQL-запрос, но сходил с ума и падал. Сообщение было таким-же. Вылечили заменив вторую половину условия на (table2.recid!=0 && table1.field==table2.field).
Справедливости ради, замечу что у нас не очень свежее ядро (примерно февральское).
Старый 05.08.2010, 20:26   #2  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от fed Посмотреть сообщение
Аналогичная ситуация была когда программист написал что-то типа:
X++:
Select table1 where table1.field1==constant || (table2 && table1.field==table2.field).
Вылечили заменив вторую половину условия на (table2.recid!=0 && table1.field==table2.field)
Приведенный запрос - именно то, с чего началась тема! Если в select проверяется табличный буфер на "непустоту", а буфер на самом деле совсем пустой (null), и все это работает с клиента, то АОС валится на раз. И лечится как раз аналогично - переделкой проверки с буфера целиком на какое-то из его полей.
Старый 05.08.2010, 22:07   #3  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,913 / 5736 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Приведенный запрос - именно то, с чего началась тема! Если в select проверяется табличный буфер на "непустоту", а буфер на самом деле совсем пустой (null), и все это работает с клиента, то АОС валится на раз. И лечится как раз аналогично - переделкой проверки с буфера целиком на какое-то из его полей.
Не уверен. Там все на сервере работало. Вообще после того как я по неформальным каналам спросил знакомых в микрософте, они там выковырали описание внутренней ошибки 174, типа это означает "Какая-то фигня в выражении where". То есть - мне кажется что там все-таки сервер пытался сгенерить именно select с table2, но накрывался при попытке найти подходящее место.
Старый 05.08.2010, 22:14   #4  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,987 / 3273 (117) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от fed Посмотреть сообщение
Не уверен. Там все на сервере работало.
Зачтено

Считаем это другим случаем завала АОСА.
Счет в серии 1:1:1

Кто больше ?
Старый 05.08.2010, 22:38   #5  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,987 / 3273 (117) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от fed Посмотреть сообщение
То есть - мне кажется что там все-таки сервер пытался сгенерить именно select с table2, но накрывался при попытке найти подходящее место.
Что больше всего напрягает в этой ситуации - почему сервер накрывается ? Ну отваливался бы рабочий поток с одной сессией пользователя и все, так ведь аос целиком ложится!
В 3-ке, например, при попытке распаковать на сервере наследник RunBaseBatch-а из кривого контейнера, клиент отваливался, а серверу хоть бы что , несмотря на то что код исполнялся на сервере.
Старый 06.08.2010, 11:34   #6  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Logger Посмотреть сообщение
Что больше всего напрягает в этой ситуации - почему сервер накрывается ? Ну отваливался бы рабочий поток с одной сессией пользователя и все, так ведь аос целиком ложится!
Мне кажется, AOS просто не ловит соответствующие исключения, а раз так, то возникают они где-то там, где он не ожидает их словить. Вспоминается, как он валился однажды - при этом в eventlog писалось (виндой, а не самим AOS'ом) следующее:
Код:
Faulting application name: Ax32Serv.exe, version: 5.0.1500.2985, time stamp: 0x4c29d4fc
Faulting module name: Ax32Serv.exe, version: 5.0.1500.2985, time stamp: 0x4c29d4fc
Exception code: 0xc0000005
Fault offset: 0x0000000000650359
Faulting process id: 0x834
Faulting application start time: 0x01cb21cd511ff28c
Что примечательного в этом сообщении? А то, что виртуальный адрес 0x0000000000650359 находится посреди процессорной инструкции - вблизи него исполняемый код выглядит так:
Код:
.00000000`00650355: 4084FF     test  dil,dil
.00000000`00650358: 7411       jz   .00065036B
.00000000`0065035A: 488903     mov   [rbx],rax
.00000000`0065035D: 488B4630   mov   rax,[rsi][030]
.00000000`00650361: 483B18     cmp   rbx,[rax]
.00000000`00650364: 7517       jnz  .00065037D
т.е. по адресу 0x0000000000650358 начинается двухбайтовая инструкция условного перехода. Если же начать смотреть с адреса 0x0000000000650359, то увидим совсем левый код:
Код:
.00000000`00650359: 114889     adc  [rax][-077],ecx
.00000000`0065035C: 03488B     add  ecx,[rax][-075]
.00000000`0065035F: 4630483B   xor  [rax][03B],r9b
.00000000`00650363: 187517     sbb  [rbp][017],dh
Т.е. управление перешло по левому адресу (так совпало, что в сегмент кода, а могло бы куда угодно). Отсюда вывод: либо у AOS'а разрушился стек, либо он криво инициализировал какие-то структуры в памяти, используемые для передачи управления. При таком раскладе не удивительно, что он валится целиком, а не просто отстреливает одну сессию, как в трешке.
За это сообщение автора поблагодарили: aidsua (2), Corel (1).
Старый 06.08.2010, 11:38   #7  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Цитата:
Сообщение от Logger Посмотреть сообщение
почему сервер накрывается ?
Потому что криво написали обработку исключений на сервере.
Старый 06.08.2010, 19:49   #8  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,987 / 3273 (117) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от _scorp_ Посмотреть сообщение
Потому что криво написали обработку исключений на сервере.


Ну это понятно.
Вопрос почему такое допустили. Неприятно когда у тебя в системе одновременно вылетает 150 юзеров.
Теги
aoc, aos, ax2009, crash, баг, ошибка, падает, ядро

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
mbsturk: Ax 2009 Rollup 4 Version Checker Blog bot DAX Blogs 0 29.04.2010 17:05
emeadaxsupport: List of fixes that improve performance of certain features in Dynamics AX 2009 Blog bot DAX Blogs 0 13.10.2009 19:06
gatesasbait: Dynamics AX 2009 SSRS and SSAS Integration Tips Blog bot DAX Blogs 3 09.07.2009 13:07
axStart: Microsoft Dynamics AX 2009 Hot Topics Web Seminar Series Blog bot DAX Blogs 0 06.08.2008 12:05
Arijit Basu: AX 2009 - Quick Overview Blog bot DAX Blogs 4 19.05.2008 14:47
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:03.