注意

本文档适用于 Ceph 的开发版本。

Testing - Windows

自 Pacific 版本以来,Ceph 客户端工具和库可以在 Windows 上原生使用。这使得 Windows 节点无需 iSCSI 网关或 SMB 共享等额外层即可使用 Ceph。

为了确保这些组件在 Windows 上继续正常运行,我们移植了大量的单元测试和集成测试。

Windows CI Job

Windows CI 作业为每个 GitHub 拉取请求执行以下步骤:

  • 启动一个 Linux VM,用于构建服务端(Linux)Ceph 二进制文件并交叉编译 Windows(客户端)二进制文件。

  • 重新创建 Linux VM 并启动一个 Ceph vstart 集群。

  • 启动一个 Windows VM 并在那里运行 Ceph 测试。

一个小的 PowerShell 框架并行化测试、聚合结果并隔离或跳过一些已知不稳定的测试。

控制台输出可能包含编译错误以及失败测试的名称。要获取失败测试的控制台输出以及 Ceph 和操作系统日志,请查看 Jenkins“状态”页面上的构建 artifacts。

../../../_images/windows_ci_status_page.png

Windows CI artifacts 可以下载为 zip 存档或在浏览器中查看。点击“artifacts”按钮查看 artifacts 文件夹的内容。

../../../_images/windows_ci_artifacts.png

Artifact contents

  • client/ - Ceph 客户端日志 (Windows)
    • eventlog/ - Windows 系统日志

    • logs/ - Ceph 日志

    • -windows.conf - Ceph 配置文件

  • cluster/ - Ceph 服务端日志 (Linux)
    • ceph_logs/

    • journal

  • test_results/
    • out/ - 按测试可执行文件分组的原始和 xml 测试输出

    • test_results.html - 聚合测试报告 (html)

    • test_results.txt - 聚合测试报告 (纯文本)

我们使用 subunit 格式和相关工具来聚合测试结果,这在并行运行大量测试时特别方便。

聚合测试报告提供了失败测试的绝佳概览。转到文件末尾查看实际错误。

{0} unittest_mempool.mempool.bufferlist_reassign [0.000000s] ... ok
{0} unittest_mempool.mempool.bufferlist_c_str [0.006000s] ... ok
{0} unittest_mempool.mempool.btree_map_test [0.000000s] ... ok
{0} ceph_test_dokan.DokanTests.test_mount [9.203000s] ... FAILED

Captured details:
~~~~~~~~~~~~~~~~~
    b'/home/ubuntu/ceph/src/test/dokan/dokan.cc:136'
    b'Expected equality of these values:'
    b'  wait_for_mount(mountpoint)'
    b'    Which is: -138'
    b'  0'
    b''
    b'/home/ubuntu/ceph/src/test/dokan/dokan.cc:208'
    b'Expected equality of these values:'
    b'  ret'
    b'    Which is: "ceph-dokan: exit status: -22"'
    b'  ""'
    b'Failed unmapping: Y:\\'
{0} ceph_test_dokan.DokanTests.test_mount_read_only [9.140000s] ... FAILED

html 报告方便地按测试套件(测试二进制文件)对测试结果进行分组。出于安全原因,默认不渲染,但可以下载并在本地查看。

../../../_images/windows_ci_html_report.png

超时和缺失的测试结果通常表明进程崩溃。请注意,在执行测试前后,控制台上会打印 ceph 状态,这有助于识别崩溃的服务。

您可能还需要检查服务日志(包括客户端和服务器端)。另外,请注意,Windows “应用程序”事件日志将在 Windows 进程崩溃时包含条目。

Frequently asked questions

  1. 为什么 Windows CI 作业是我的 PR 上唯一失败的?

Ceph 集成测试通常通过 Teuthology 在 Ceph Lab 基础设施上执行。这些测试由 Ceph QA 团队按需触发,不会为每个提交的拉取请求自动运行。

由于 Windows CI 作业只关注客户端 Ceph 组件,因此它可以为 GitHub 上的每个拉取请求及时运行各种集成测试。换句话说,它运行各种 librados、librbd 和 libcephfs 测试,而其他检查(如“make check”)不会运行。

因此,Windows CI 经常会捕获其他检查遗漏的回归,否则这些回归只会通过 Teuthology 才会发现。通常,这些回归不是特定于平台的,也会影响 Linux。

如果 Windows CI 失败,我们强烈建议按照上述说明检查测试结果。

请注意,Windows 构建脚本可能使用不同的编译标志和传递给 CMake 的 -D 选项。例如,它默认为 Release 模式而不是 Debug 模式。同时,它使用不同的工具链 (mingw-llvm) 和一套独立的依赖项,如果需要,请确保更新版本。

  1. 为什么 Windows CI 作业是强制性的?

最初,测试作业是可选的,因此经常引入回归。

一段时间后,Windows 支持变得足够成熟,可以使这个 CI 作业成为强制性的。这大大减少了解决回归所需的工作量,并向 Ceph 用户保证了持续的 Windows 支持。

如前所述,另一个巨大的优势是它运行集成测试,可以快速捕获通常也影响 Linux 构建的回归。这使开发人员无需等待完整的 Teuthology 结果。

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入