Тайм-аут 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';
Другие вопросы по тегам