1

我正在使用Kitware/cdash-docker docker compose 文件来构建一个运行CDash. 我正在运行一个大型C++项目的提交,该项目生成大约 3.5Mb 包含代码覆盖率信息的 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

我已经修改了 docker 映像以检查 v2.4.0-prebuilt 分支CDash,并且问题仍然存在于一个 docker 主机上,但是当安装在另一台(功能较弱的机器)上时,它实际上接受了提交并在 PUT 上花费了一分钟多一点要求。

所以我的问题是,如何修改文件提交的 120 秒限制,是否有CDash可能影响此类上传性能的安装设置?我在 docker 容器日志中找不到任何东西,所以我对这种情况的理解是,他们一直在做他们的工作,直到客户端因超时限制而终止,我不知道如何修改。

4

1 回答 1

2

提交超时被硬编码到 CTest 可执行文件中(从 cmake 3.20.3 开始,在 中cmCTestSubmitHandler.cxx)。

默认值为120 秒。我对其进行了修补,将其增加到 600,并且我的提交正在运行。需要调查我的服务器是否正在努力解决问题,或者这是否可以被视为 CTest 错误。

编辑:这个问题的最终和正确的解决方案是使用异步提交。要使用异步提交,请将以下行添加到config.local.php

$CDASH_ASYNCHRONOUS_SUBMISSION = true;

这不适用于端口映射的 docker 容器,因为异步提交会向自身创建一个 curl 请求,它需要开始解析上传的文件。由于我的 Cdash 服务器在 docker 容器上的端口 80 上运行,该端口映射到 docker 主机上的端口 8080,因此对自身的 curl 请求推断出端口 8080 的使用,这从 docker 容器的角度来看是不正确的。

将 Cdash 基本 URL 设置为 localhost 可显式解决此问题

$CDASH_BASE_URL = 'http://localhost';
于 2018-07-12T08:14:48.540 回答