有关代码覆盖率提交的CDash超时

时间:2018-07-09 13:21:09

标签: docker ctest cdash

我正在使用Kitware/cdash-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主机上,但是当安装在另一台Docker(功能不强的机器)上时,它实际上接受了提交并花费了在PUT请求上花了超过一分钟的时间。

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

1 个答案:

答案 0 :(得分:0)

提交超时被硬编码到CTest可执行文件中。 https://gitlab.kitware.com/cmake/cmake/blob/master/Source/CTest/cmCTestSubmitHandler.cxx#L36

我对此进行了修补,将其增加到600s,并且我的提交正在运行。需要调查我的服务器是否正在遇到问题,或者是否可以将其视为CTest错误。

编辑: 解决此问题的最终正确方法是使用异步提交。要使用异步提交,请将以下行添加到local_config.php:

$CDASH_BASE_URL = 'http://localhost';

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

将CDash基本URL设置为localhost可以明确解决此问题

 .first{
    position: absolute;
    bottom: 15%;
    right: 3%;
    font-family: 'Heebo', sans-serif;
    font-weight: 900;    
    font-size: 5rem;
    color: rgb(255, 131, 30);
    white-space: nowrap;
    overflow: hidden;
    z-index: 30;
    background: url('http://127.0.0.1:3000/img/brush.svg');
    background-repeat: no-repeat;
    background-size: 115%;
    background-position: center;
}

.second{
    margin: 1rem;
    position: absolute;
    bottom: 0px;
    right: 8%;
    font-family: 'Heebo', sans-serif;
    font-weight: 900;
    font-size: 6.5rem;
    color: orange;
    white-space: nowrap;
    overflow: hidden;
    z-index: 30;  
    background: url('http://127.0.0.1:3000/img/brush.svg');
    background-repeat: no-repeat;
    background-size: 110%;
    background-position: center;  
}