代码覆盖率提交时 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';
我正在使用 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';