【问题标题】:CDash timeout on code coverage submit代码覆盖率提交上的 Cdash 超时
【发布时间】:2018-07-09 13:21:08
【问题描述】:

我正在使用Kitware/cdash-docker docker compose 文件来构建一个运行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 容器日志中找不到任何内容,所以我对这种情况的理解是,他们一直在做他们的工作,直到客户端因超时限制而终止,我不知道如何修改。

【问题讨论】:

    标签: docker ctest cdash


    【解决方案1】:

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

    默认值为120 seconds。我对其进行了修补,将其增加到 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';
    

    【讨论】:

    • 文件是config.local.php。感谢您的回答,虽然可以救命。
    • 感谢您的评论,我已经更新了文件名
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 2017-11-18
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多