代码覆盖率提交时 CDash 超时

CDash timeout on code coverage submit

我正在使用 Kitware/cdash-docker docker 组合文件构建 docker 容器 运行 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 图像以检查 CDash 的 v2.4.0-prebuilt 分支,问题仍然存在于一台 docker 主机上,但是当安装在另一台主机上时(更少强大的机器)它实际上接受了提交并在 PUT 请求上花费了一分多钟。

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

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

默认值为120 seconds。我修补了它,将其增加到 600s,我的提交是 运行。需要调查我的服务器是否遇到问题,或者这是否可以被视为 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';