Гейзенбаг - после очистки всех кешей, на некоторых машинах повисает процесс httpd

Issue #195 resolved
Valeriy Streltsov created an issue

Originally reported on Google Code with ID 195

На первое время очевидные задачи.

1. Убить switch-case в dotstyleprovider, по возможности вообще избавиться от этого
класса. Сделать это путем создания новых dst узлов для рисования дерева (аналогично
другим dst узлам, более-менее адекватный пример см. в nfa_matcher). В них перенести
функцию dot_script из обычных узлов, и скорее всего определить функции типа label(),
shape(), color() и т. д.

2. Избавиться от некоторых switch-case в explaining graph. Там есть dst узлы для листа
и оператора, но не для конкретных операторов\листов. Их следует создать - это убьет
значительную часть switch-case'ов.

3. Обратить внимание на то, что конструкции типа

if ($this->pregnode->subtype == qtype_preg_leaf_assert::SUBTYPE_CIRCUMFLEX)
    return get_string('circumflex_leaf_assert', 'qtype_preg');

можно заменить на

return get_string($this->pregnode->subtype);

если же ключ в lang файле не совпадает с subtype, можно сделать функцию, вычисляющую
его на основе subtype - это гораздо проще такого копипаста, который там сейчас; код
будет проще читаться и будет некоторая "дисциплина" именования классов\строк в lang
файле.

Reported by vostreltsov on 2013-04-26 14:58:50

Comments (38)

  1. Oleg Sychev repo owner
    Все (!) switch/case (и их аналоги из условий) по типам узлов (и подтипам) должны быть
    заменены на функции узлов конкретного дерева того или иного инструмента.
    
    Остальные будем рассматривать.
    

    Reported by oasychev on 2013-04-26 15:01:26

  2. Valeriy Streltsov reporter
    Иерархию пустых классов для дерева я создал, нужные методы в сам инструмент добавил.
    Очередь за переносом кода в эти узлы; помимо dotstyleprovider нужно также перенести
    функцию dot_script из обычных узлов. Возможно в ней нужно будет что-то поменять.
    

    Reported by vostreltsov on 2013-04-27 08:49:17

  3. Valeriy Streltsov reporter
    4. Удалить дублирование в lang файлах.
    

    Reported by vostreltsov on 2013-04-27 20:19:35

  4. Oleg Sychev repo owner
    Валерий - к пункту 4 хорошо бы конкретику. Можем вместе за это как-нибудь сесть, если
    сами не можете. Иначе это остается на уровне благого пожелания. Надо разобраться в
    общем, что можно сливать - а что нельзя...
    

    Reported by oasychev on 2013-04-28 12:57:33

  5. Valeriy Streltsov reporter
    В общем-то я часть уже удалил. Тем не менее, с префиксом description_ есть описания
    флагов (посикс, юникод) - их бы я сделал без префикса, рядом со строками для абстрактных
    узлов. И еще можно удалить всякие строки типа "unknown node" - как они вообще могут
    понадобиться, если такое должно откидываться акцептингом?!
    

    Reported by vostreltsov on 2013-04-28 16:12:22

  6. Valeriy Streltsov reporter
    5. Григорий (вроде бы) добавил radiobutton'ы для режима отображения дерева. Нужно сделать
    кликабельными также и label'ы, а не только кружочки - это будет выглядеть намного лучше
    (Пример - при написании сообщения сюда можно видеть checkbox "Send email", нужно сделать
    по аналогии).
    

    Reported by vostreltsov on 2013-06-04 09:37:22

  7. Former user Account Deleted
    5. Готово, вытолкнул.
    
    6. Необходимо убрать кеширование изображения дерева для корректной работы радиобаттонов,
    ибо в данный момент при смене режима отображения дерева изображение дерева для текущего
    регулярного выражения не меняется.
    

    Reported by grvlter on 2013-06-20 11:05:59

  8. Former user Account Deleted
    6. Кэширование исправил
    

    Reported by TOPT.iiiii on 2013-06-20 11:46:08

  9. Oleg Sychev repo owner
    preg_description_tool.php
    7. switch в set_modifier можно (нужно!) убрать - PHP может использовать строковую переменную
    как имя поля, просто поставьте $ после ->. Так что можно завести в классе массив (можно
    даже константой) с соответствием буква => имя поля и функция set_modifier  вообще не
    понадобится, т.к. сведется к индексации. А reset пойдет через foreach
    

    Reported by oasychev on 2013-06-29 18:17:35

  10. Oleg Sychev repo owner
    Кстати, Валерий, аналогичное 7 замечание относится и к preg_regex_handler.
    А Дмитрий может использовать эту функцию, она тоже статическая...
    

    Reported by oasychev on 2013-06-29 22:06:29

  11. Oleg Sychev repo owner
    1-2 почти выполнено, от switch-case мы избавились
    исключение - простые ассерты, здесь ждем Валерия чтобы убить switch в общих узлах простых
    ассертов, сделав подклассы - потом в description надо будет сделать аналогично Дмитрию
    

    Reported by oasychev on 2013-07-02 14:11:25

  12. Oleg Sychev repo owner
    Как то у нас работа замедлилась. Нужна встреча, чтобы обсудить проблемы? Могу предложить
    5 июля.
    Либо до 4 жду нового серьезного прогресса...
    

    Reported by oasychev on 2013-07-02 14:12:11

  13. Oleg Sychev repo owner
    8. - см. ситуацию в tools_errors_5.jpg с графом - там в символьных классах нередко вылезает
    что-то вправо от основного прямоугольника, имхо баг
    9.  Пока радиокнопки переключения режимов отображения чарсетов не работают ни на одном
    инструменте... - сами надписи я выправил и перенес куда надо - не забудьте затянуть
    мои изменения
    10. Тестирование регексов должно учитывать параметры на основной форме - нотацию, движок,
    точность/чуствительность к регистру и т.д. - все, что может повлиять на исход совпадения
    - и передавать параметры в функцию создания вопроса соответственно.
    11. Проблема в дереве - см. tools_errors_8.JPG - почему так наехало? Понимаю что dot
    - но что его спровоцировало?
    12. В графе к цветам узлов нужно нарисовать легенду или tooltip - что они значат...
    Откуда человек догадается что серый цвет имеет отношение к регистрочуствительности?
    13. Регекс (?=.*?\banalgesi[ca]?[s ]?\b) выдает ошибку при "check" - отладить
    14.  В дереве заменить lookaround assertion на более конкретную надпись, она есть в
    строках
    15.  Сделать дерево/граф/описание/тестирование сворачиваемыми секциями! А выбор показа
    символьных классов - advanced.
    16. Строки для формы переименовать как я сделал новые - начиная с authoring_form_ а
    не regex_   Не забыть оба файла - и русский тоже...
    

    Reported by oasychev on 2013-07-14 15:03:45

    <hr> * Attachment: tools_errors_5.jpg * Attachment: tools_errors_8.JPG

  14. Oleg Sychev repo owner
    И - касается не только этого issue - в коммите на каждую исправленную ошибку (речь именно
    об ошибках, а не доделках) я хочу видеть юнит-тест, гарантирующий, что она не повторится.
    

    Reported by oasychev on 2013-07-14 15:32:12

  15. Oleg Sychev repo owner
    Иванов, а прмоугольник символьного класса в файле   tools_errors_5.jpg  - это нормально?
    

    Reported by oasychev on 2013-07-18 16:53:56

  16. Former user Account Deleted
    Исправлена вчера ошибка с появлением пустого узла опции как на tools_errors_5.jpg
    

    Reported by ZluMYO on 2013-07-20 05:54:04

  17. Former user Account Deleted
    Исправил пункт 13 из комментария №13.
    

    Reported by ZluMYO on 2013-07-20 10:09:34

  18. Oleg Sychev repo owner
    Не забываем доделать к релизу:
    а) нормальное выставление темы на странице инструментов авторинга
    б) сворачивание/разворачивание секций тоже нормальное
    в) и пункт 16 - переименуйте с нормальными префиксами...
    

    Reported by oasychev on 2013-07-25 22:34:08

  19. Valeriy Streltsov reporter
    Ассерты в AST отрефакторены, напоминаю про нужность аналогичного рефакторинга в description
    tool.
    

    Reported by vostreltsov on 2013-09-06 14:41:18

  20. Valeriy Streltsov reporter
    У нас теперь получается, что get_engine_node_name($nodetype) должна еще и subtype принимать
    - без этого отрефакторить дескрипшен не выйдет вроде бы... Можно пойти до конца и устранить
    абсолютно все свич-кейсы, в т.ч. в операторах и т.д.
    

    Reported by vostreltsov on 2013-09-06 15:07:32

  21. Oleg Sychev repo owner
    Добавил второй параметр, поправил в НКА чтобы потестить - Валерий, поправьте ДКА взамен....
    
    Иванов, Пахомов, Терехов - срочно восстановить работоспособность инструментов авторинга
    

    Reported by oasychev on 2013-09-06 17:21:50

  22. Valeriy Streltsov reporter
    У ДКА этой функции нет; из инструментов авторинга - граф поправил, в дескрипшен добавил
    и заодной убил свичкейс. Всё вроде бы хорошо теперь.
    

    Reported by vostreltsov on 2013-09-06 18:33:17

  23. Former user Account Deleted
    Исправлены пункты 10, 14, 16.
    Нормальное выставление темы на странице инструментов авторинга ещё актуально?
    

    Reported by grvlter on 2013-09-08 17:13:24

  24. Oleg Sychev repo owner
    Тема уже выставляется.
    
    А вот по пункту 10 мы с Валерием обсуждали - надо сделать на форме инструмента эти
    настройки изменяемыми, как и на основной форме: ну потестировал человек регекс, захотел
    поменять и посмотреть, что выйдет - что ему закрывать, потом открывать заново? И соответственно
    при закрытии по "Ок" эти настройки переносятся в основную форму.
    

    Reported by oasychev on 2013-09-08 18:55:22

  25. Oleg Sychev repo owner
    Еще добавлю - из другого, но то закрыто
    17) инструмент тестирования при ошибочном регексе молча игнорирует тестирование; ничего
    не показывая если установлен PHP Preg matcher
    Если НКА-матчер выбран, то ошибки показываются черным, а следовало бы красным их выделить....
    

    Reported by oasychev on 2013-09-09 19:59:17

  26. Oleg Sychev repo owner
    18) btn_check_strings_clicked  не вызывается при начальном открытии формы авторинга
    - а если там будут строки, считанные из БД?
    19) у меня на Денвере сервер вешается при следующей последовательности действий
     - создаем вопрос с НКА - матчером
     - вводим на форме вопроса (?=.*adc) ddd
     - вызываем авторинг
     - потом добавляем скобку вот так (?=.*adc) (ddd
     - нажимаем Update
    Ничего не обновляется, а при закрытии окна редактирования вопроса повисает сервер.
    

    Reported by oasychev on 2013-09-09 22:03:41

  27. Oleg Sychev repo owner
    Всем протестировать. Напишите, кто может воспроизвести ошибку 19 - и надо все-таки отследить,
    чего оно так...  Там jquery при закрытии формы много раз вызывает upd_failure - больше
    15 точно... 
    

    Reported by oasychev on 2013-09-09 22:05:04

  28. Valeriy Streltsov reporter
    На линуксе и apache 2.2.25 зависаний нет...
    

    Reported by vostreltsov on 2013-09-09 22:13:08

  29. Oleg Sychev repo owner
    Симптомы проблемы: после "повисающего" Update btn_check_strings_clicked продолжает вызываться,
    но ни upd_check_strings_success, ни upd_failure при этом не срабатывают.
    

    Reported by oasychev on 2013-09-09 22:15:10

  30. Valeriy Streltsov reporter
    На денвере у меня тоже не зависает
    

    Reported by vostreltsov on 2013-09-10 08:24:23

  31. Former user Account Deleted
    Обновился от репозитория Валерия, проверил на денвере, всё работает.
    * строится дерево с узлом "синтаксическая ошибка"
    * граф не построился, но вывел сообщение об ошибке, подсветив "("
    * описание сгенерировано частично, также содержит сообщение об ошибке.
    

    Reported by grvlter on 2013-09-10 15:08:11

  32. Oleg Sychev repo owner
    Похоже мы имеем дело гейзенбагом. http://en.wikipedia.org/wiki/Heisenbug
    Пока протоколирую течение болезни: 
    Apache2 создает один процесс на открытую страницу и все аякс-запросы с нее обрабатывает
    в нем;
    какой-то из запросов - похоже к testing tool - вешает httpd.exe с кучей памяти (от
    60 до 120 мегабайт);
    он, естественно перестает отвечать на последующие запросы;
    после удаления через диспетчер задач повисшего процесса лезет "error undefined" и все
    разблокируется...
    

    Reported by oasychev on 2013-09-11 07:32:05

  33. Oleg Sychev repo owner
    Судя по поведения бага, проблемы надо искать на стороне сервера? Или есть другие мнения?
    

    Reported by oasychev on 2013-09-11 09:34:23

  34. Oleg Sychev repo owner
    Оказывается, гейзенбаг надежно возникает при создании вопроса и загрузке окна авторинга
    сразу после очистки всех кешей в Moodle. На любом регексе - даже "ааа"...
    

    Reported by oasychev on 2013-09-13 16:00:38

  35. Oleg Sychev repo owner
    Оставляю эту задачу для отслеживания и ловли загадочного гейзенбага.
    Что такого может кешироваться, что потом все нормально работает?
    

    Reported by oasychev on 2013-09-14 11:53:32

  36. Valeriy Streltsov reporter
    Можно попробовать из moodledata/cache методом исключения поудалять разные штуки...
    

    Reported by vostreltsov on 2013-09-14 18:24:24

  37. Oleg Sychev repo owner
    Последние исправления в javascript на гейзенбаг не повлияли.
    
    Удаление всего moodledata/cache баг не вызывает, а вот очистка кешей из под Moodle
    - вызывает. Видимо есть еще кеши в БД...
    

    Reported by oasychev on 2013-09-17 18:32:04

  38. Log in to comment