ugeneunipro / ugene

UGENE is free open-source cross-platform bioinformatics software
http://ugene.net
GNU General Public License v2.0
207 stars 60 forks source link

UGENE-8098 SAFE_POINT after closing ugene on a loaded computer #1636

Closed DmitriiSukhomlinov closed 2 months ago

DmitriiSukhomlinov commented 2 months ago

Проблема связана с тем, что при попытке закрыть UGENE отменяются все текущие таски, но сами эти таски, зачастую, не проверяют свой stateInfo на предмет того, отменены они или нет, и, соответственно, продолжают исполняться даже в случае, если им уже выставлен флаг отмены. С другой же стороны, TaskScheduler имеет свои правила работы с отмененными тасками и не запускает их сабтаски. Из-за этого происходит ситуация, когда определенной родительской таске нужна какая-то информация, которую ей должна предоставить её сабтаска, а эта сабтаска не была запущена, т.к. у неё был выставлен флаг отмены. В итоге, родительская таска продолжает работать как если бы у нее была эта информация, в какой-то момент натыкается на nullptr в SAFE_POINT'е и падает.

Конкретно в данном случае: есть таска EnableServiceTask, в какой-то момент она должна запустить сабтаску ProjectServiceEnableTask. Эта сабтаска должна задать указатель на проект в AppContext (см. тут). Соответственно, из-за того, что мы закрываем UGENE пускается shutdown, который выставляет всем таскам отмену. ProjectServiceEnableTask (дочерняя) не исполняется, проект в контекст не ставится, но EnableServiceTask (родительская) про это не знает и продолжает исполняться. Соответственно, в паре мест срабатывает SAFE_POINT.

Баг воспроизводится стабильно, для этого нужно открыть файл (я воспроизводил на файле, указанном в сценарии задачи, но, думаю, тут не важно, на каком файле пробовать) и очень быстро нажать на крестик UGENE (до того, как в AppContext будет задан проект). Можно поставить breakpoint в AppContextImpl::setProject(...), чтобы точно знать, успел или нет.

Тестов нет, т.к. тестовая система не может с достаточной скоростью закрыть UGENE.

yalgaer commented 2 months ago

Замечений нет, апрув после зеленых тестов

DmitriiSukhomlinov commented 2 months ago

@yalgaer не прошли два не связанных с этим фиксом теста на разных системах, случайные падения. Я бы предпочел не перезапускать тестирование, т.к. во время предыдущего прогона у меня так же было одно случайное падение и не факт, что новый запуск тоже пройдет гладко.

DmitriiSukhomlinov commented 2 months ago

Я перезапустил тестирование, однако, на маке уже упал еще один новый тест, не связанный с данной функцией.

yalgaer commented 2 months ago

@yalgaer не прошли два не связанных с этим фиксом теста на разных системах, случайные падения. Я бы предпочел не перезапускать тестирование, т.к. во время предыдущего прогона у меня так же было одно случайное падение и не факт, что новый запуск тоже пройдет гладко.

У нас сейчас случайные падения случаются крайне редко. Если падают тесты на разных системах и не в первый раз - нужно обязательно добиться зелёных прогонов.

DmitriiSukhomlinov commented 2 months ago

@yalgaer не прошли два не связанных с этим фиксом теста на разных системах, случайные падения. Я бы предпочел не перезапускать тестирование, т.к. во время предыдущего прогона у меня так же было одно случайное падение и не факт, что новый запуск тоже пройдет гладко.

У нас сейчас случайные падения случаются крайне редко. Если падают тесты на разных системах и не в первый раз - нужно обязательно добиться зелёных прогонов.

Я перезапустил тестирования на Windows и macOS, упавшие тесты все равно есть, падения первого и второго прогона не пересекаются. Локально все упавшие тесты проходят. Некоторые из упавших тестов вообще не задействуют код, который был изменен в данном PR - например, во втором прогоне, по неизвестным причинам, много падений на подключение к базе данных NCBI. Большая часть упавших тестов имела падения, появлявшиеся и исправлявшиеся без причин, в течении последней недели. Видеозаписи показывают падения в совершенно различных местах, не имеющих никакого отношения к тому, что было поправлено в задаче. При этом, на Linux все эти тесты прошли. Все это слишком похоже на нестабильность тестовой системы.

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

yalgaer commented 2 months ago

@yalgaer не прошли два не связанных с этим фиксом теста на разных системах, случайные падения. Я бы предпочел не перезапускать тестирование, т.к. во время предыдущего прогона у меня так же было одно случайное падение и не факт, что новый запуск тоже пройдет гладко.

У нас сейчас случайные падения случаются крайне редко. Если падают тесты на разных системах и не в первый раз - нужно обязательно добиться зелёных прогонов.

Я перезапустил тестирования на Windows и macOS, упавшие тесты все равно есть, падения первого и второго прогона не пересекаются. Локально все упавшие тесты проходят. Некоторые из упавших тестов вообще не задействуют код, который был изменен в данном PR - например, во втором прогоне, по неизвестным причинам, много падений на подключение к базе данных NCBI. Большая часть упавших тестов имела падения, появлявшиеся и исправлявшиеся без причин, в течении последней недели. Видеозаписи показывают падения в совершенно различных местах, не имеющих никакого отношения к тому, что было поправлено в задаче. При этом, на Linux все эти тесты прошли. Все это слишком похоже на нестабильность тестовой системы.

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