Closed DmitriiSukhomlinov closed 2 months ago
Замечений нет, апрув после зеленых тестов
@yalgaer не прошли два не связанных с этим фиксом теста на разных системах, случайные падения. Я бы предпочел не перезапускать тестирование, т.к. во время предыдущего прогона у меня так же было одно случайное падение и не факт, что новый запуск тоже пройдет гладко.
Я перезапустил тестирование, однако, на маке уже упал еще один новый тест, не связанный с данной функцией.
@yalgaer не прошли два не связанных с этим фиксом теста на разных системах, случайные падения. Я бы предпочел не перезапускать тестирование, т.к. во время предыдущего прогона у меня так же было одно случайное падение и не факт, что новый запуск тоже пройдет гладко.
У нас сейчас случайные падения случаются крайне редко. Если падают тесты на разных системах и не в первый раз - нужно обязательно добиться зелёных прогонов.
@yalgaer не прошли два не связанных с этим фиксом теста на разных системах, случайные падения. Я бы предпочел не перезапускать тестирование, т.к. во время предыдущего прогона у меня так же было одно случайное падение и не факт, что новый запуск тоже пройдет гладко.
У нас сейчас случайные падения случаются крайне редко. Если падают тесты на разных системах и не в первый раз - нужно обязательно добиться зелёных прогонов.
Я перезапустил тестирования на Windows и macOS, упавшие тесты все равно есть, падения первого и второго прогона не пересекаются. Локально все упавшие тесты проходят. Некоторые из упавших тестов вообще не задействуют код, который был изменен в данном PR - например, во втором прогоне, по неизвестным причинам, много падений на подключение к базе данных NCBI. Большая часть упавших тестов имела падения, появлявшиеся и исправлявшиеся без причин, в течении последней недели. Видеозаписи показывают падения в совершенно различных местах, не имеющих никакого отношения к тому, что было поправлено в задаче. При этом, на Linux все эти тесты прошли. Все это слишком похоже на нестабильность тестовой системы.
Дальше я могу только перезапускать тестирование до бесконечности, пока однажды, возможно, если повезет, во время одного из прогонов, не пройдут все тесты.
@yalgaer не прошли два не связанных с этим фиксом теста на разных системах, случайные падения. Я бы предпочел не перезапускать тестирование, т.к. во время предыдущего прогона у меня так же было одно случайное падение и не факт, что новый запуск тоже пройдет гладко.
У нас сейчас случайные падения случаются крайне редко. Если падают тесты на разных системах и не в первый раз - нужно обязательно добиться зелёных прогонов.
Я перезапустил тестирования на Windows и macOS, упавшие тесты все равно есть, падения первого и второго прогона не пересекаются. Локально все упавшие тесты проходят. Некоторые из упавших тестов вообще не задействуют код, который был изменен в данном PR - например, во втором прогоне, по неизвестным причинам, много падений на подключение к базе данных NCBI. Большая часть упавших тестов имела падения, появлявшиеся и исправлявшиеся без причин, в течении последней недели. Видеозаписи показывают падения в совершенно различных местах, не имеющих никакого отношения к тому, что было поправлено в задаче. При этом, на Linux все эти тесты прошли. Все это слишком похоже на нестабильность тестовой системы.
Дальше я могу только перезапускать тестирование до бесконечности, пока однажды, возможно, если повезет, во время одного из прогонов, не пройдут все тесты.
Проблема связана с тем, что при попытке закрыть UGENE отменяются все текущие таски, но сами эти таски, зачастую, не проверяют свой
stateInfo
на предмет того, отменены они или нет, и, соответственно, продолжают исполняться даже в случае, если им уже выставлен флаг отмены. С другой же стороны,TaskScheduler
имеет свои правила работы с отмененными тасками и не запускает их сабтаски. Из-за этого происходит ситуация, когда определенной родительской таске нужна какая-то информация, которую ей должна предоставить её сабтаска, а эта сабтаска не была запущена, т.к. у неё был выставлен флаг отмены. В итоге, родительская таска продолжает работать как если бы у нее была эта информация, в какой-то момент натыкается наnullptr
вSAFE_POINT
'е и падает.Конкретно в данном случае: есть таска
EnableServiceTask
, в какой-то момент она должна запустить сабтаскуProjectServiceEnableTask
. Эта сабтаска должна задать указатель на проект вAppContext
(см. тут). Соответственно, из-за того, что мы закрываем UGENE пускается shutdown, который выставляет всем таскам отмену.ProjectServiceEnableTask
(дочерняя) не исполняется, проект в контекст не ставится, ноEnableServiceTask
(родительская) про это не знает и продолжает исполняться. Соответственно, в паре мест срабатываетSAFE_POINT
.Баг воспроизводится стабильно, для этого нужно открыть файл (я воспроизводил на файле, указанном в сценарии задачи, но, думаю, тут не важно, на каком файле пробовать) и очень быстро нажать на крестик UGENE (до того, как в
AppContext
будет задан проект). Можно поставить breakpoint вAppContextImpl::setProject(...)
, чтобы точно знать, успел или нет.Тестов нет, т.к. тестовая система не может с достаточной скоростью закрыть UGENE.