我正在使用Kitware/cdash-docker docker compos文件来构建运行CDash
的docker容器。我正在运行来自一个大型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 预构建分支,问题仍然存在于一个 docker 主机上,但当安装在另一台(功能较弱的机器)上时,它实际上接受提交并在 PUT 请求上花费一分多钟。
所以我的问题是,如何修改文件提交的 120 秒限制,以及CDash
安装是否有可能影响此类上传性能的设置?我在 docker 容器日志中找不到任何内容,所以我对这种情况的理解是,他们一直在做他们的工作,直到客户端在超时限制上终止,我不知道如何修改。
提交超时被硬编码到 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';