Тайм-аут CDash при предоставлении покрытия кода
Я использую Docker Kitware / cdash- docker для создания файлов для сборки работающего Docker- контейнера. CDash
, Я запускаю представления от большого C++
проект, который генерирует около 3,5 МБ XML-файлов, содержащих информацию о покрытии кода. ctest затем истекает при отправке со следующим сообщением
Error when uploading file: <code coverage xml file name>
Error message was: Operation too slow. Less than 1 bytes/sec transferred the last 120 seconds
Problem when submitting via HTTP
Я изменил образ докера, чтобы проверить готовую ветку v2.4.0 CDash
и проблема остается на одном хосте докера, но при установке на другом (менее мощном компьютере) он фактически принимает отправку и тратит чуть более минуты на запрос PUT.
Итак, мои вопросы, как я могу изменить ограничение 120 секунд для отправки файлов, и есть ли настройки для CDash
установка, которая может повлиять на производительность для таких загрузок? Я ничего не могу найти в журналах докеров-контейнеров, так что я понимаю ситуацию так, что они продолжают выполнять свою работу до тех пор, пока клиент не завершит работу с ограничением времени ожидания, которое я не могу понять, как изменить.
1 ответ
Тайм-аут отправки жестко запрограммирован в исполняемый файл CTest. https://gitlab.kitware.com/cmake/cmake/blob/master/Source/CTest/cmCTestSubmitHandler.cxx#L36
Я исправил это, увеличил его до 600, и мои представления работают. Необходимо выяснить, борется ли мой сервер с чем-то, или это можно считать ошибкой CTest.
Изменить: окончательное и правильное решение этой проблемы заключается в использовании асинхронных представлений. Чтобы использовать асинхронную передачу, добавьте следующую строку в local_config.php:
$CDASH_ASYNCHRONOUS_SUBMISSION = true;
Это не работает из сопоставленного с портом контейнера докера, поскольку асинхронная отправка создает запрос керлинга для себя, который должен начать анализ загруженных файлов. Поскольку мой сервер CDash работал на порте 80 в док-контейнере, который был сопоставлен с портом 8080 на хосте докера, запрос curl сам по себе вывел использование порта 8080, что неверно с точки зрения контейнера докера.
Установка базового URL-адреса CDash для localhost явно решает эту проблему
$CDASH_BASE_URL = 'http://localhost';