#task #testing #parallel-testing #mongo-db #generated #generate #split

bin+lib mongo-task-generator

动态将常绿任务拆分为子任务,以测试mongodb/mongo项目。

2 个版本

0.6.5 2022年10月24日
0.6.4 2022年10月22日

#1985 in 数据库接口

Apache-2.0

300KB
6K SLoC

mongo-task-generator

动态将常绿任务拆分为子任务,以测试mongodb/mongo项目。

目录

描述

一个工具,用于动态生成和拆分mongodb/mongo项目的resmoke测试为可以并行运行的子任务。例如,一个运行2小时的任务可以拆分为4个子任务,并行运行以将墙钟时间缩短到接近30分钟。

该工具将使用 Evergreen 测试统计 来确定如何将测试分配给子任务。如果由于任何原因无法获得测试统计信息,它将回退到将测试拆分,以便每个子任务包含相等数量的测试。

该工具还将生成fuzzer任务。在fuzzer任务的情况下,生成决定了要生成的fuzzer测试数量。有两个控制生成fuzzer测试数量的选项,n_filesn_tasks。它们应在evergreen配置文件的任务定义中指定。n_files 控制每个子任务中生成的fuzzer文件数量,从而有效地控制每个子任务的运行时间。n_tasks 控制生成的子任务数量。例如,如果 n_files=3n_tasks=5,总共将在5个子任务中运行15个文件。

获取帮助

问问题应该选择哪个渠道?

如果您对 Mongo Task Generator 有任何疑问,请通过 Slack 上的 #server-testing 频道或通过电子邮件发送给我们 [email protected]

我如何请求对 Mongo Task Generator 进行更改/报告错误?

在 Jira 中创建 DAG 票据

我在票据或问题中应该包括哪些内容?

请尽可能提供更多信息。这可以帮助避免长时间的信息收集线程。

请包括以下内容

  • 请求动机:为什么要进行这项更改?(这有助于我们了解请求的优先级和紧急性)
  • 背景:是否有任何背景信息我们应该了解这个请求?
  • 描述:您希望调查或更改什么?

依赖项

该项目旨在在Linux上运行。它已在Ubuntu 18.04上进行测试。

需要evergreen CLI

安装

工具可以从github releases页面下载。它目前基于Ubuntu 18.04,应该适用于最近的x86 Linux发行版。

可以使用类似wgetcurl的工具自动化安装。

wget https://github.com/mongodb/mongo-task-generator/releases/download/v0.1.0/mongo-task-generator

使用

要在mongodb仓库的根目录下生成任务信息,请运行mongo-task-generator命令。生成的配置将创建在generated_resmoke_config目录中。该目录中的evergreen_config.json文件应作为generate.tasks命令调用的部分传递给evergreen。

mongo-task-generator

USAGE:
    mongo-task-generator --evg-project-file <EVG_PROJECT_FILE> --expansion-file <EXPANSION_FILE> --evg-auth-file <EVG_AUTH_FILE>

OPTIONS:
        --evg-auth-file <EVG_AUTH_FILE>
            File with information on how to authenticate against the evergreen API

        --evg-project-file <EVG_PROJECT_FILE>
            File containing evergreen project configuration

        --expansion-file <EXPANSION_FILE>
            File containing expansions that impact task generation

    -h, --help
            Print help information

文档

有关任务生成工作的详细信息,请参阅生成任务

贡献者指南

高级架构

任务生成流程图

graph TD
    A[Read Evergreen Project Config] -->B(For each task in each build variant)
    B --> C{task is generated?}
    C --> |No| B
    C -->|Yes| D{task is fuzzer?}
    D -->|Yes| E[Generate Fuzzer based on task definition]
    E --> B
    D -->|No| F[Lookup task runtime history from Evergreen]
    F --> G{valid history obtained?}
    G --> |Yes| H[Split task by test runtimes]
    G --> |No| I[Split task by counts]
    H --> J[Generate resmoke suite config]
    I --> J
    J --> |generated task definitions|B
    B --> |done|K[For each Build Variant]
    K --> L[Create task specs and display tasks in Build Variant]
    L --> M[Create shrub config]
    M --> N[Write shrub config to disk]
    N --> O([End])

设置本地开发环境

请确保已安装Rust开发环境。请参阅此处的说明。

从仓库的根目录运行cargo build来构建项目。

linting/formatting

cargo fmt
cargo clippy

运行测试

cargo test

版本控制

该项目使用semver进行版本控制。

请在CHANGELOG.md中包含每个新版本添加的描述。

代码审查

该项目使用Evergreen Commit Queue。添加包含evergreen merge的PR评论以触发合并。

部署

部署通过github actions完成。可以通过git标签触发部署。要创建部署,请将您希望部署的提交标记为git标签,并将标签推送到远程仓库。

git标签应格式如下:“v”后跟要部署的3位数版本号。例如,“v0.1.0”。

git tag v0.1.0
git push origin --tags

标记的版本将部署到项目的发布页

资源

依赖项

~14–31MB
~440K SLoC