searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

OVS 社区贡献快速指南

2023-10-09 07:11:48
67
0

代码提交流程

1. pull代码创建分支

    # 如果本地没有clone过上游代码,需要clone代码
    git clone github.com/openvswitch/ovs
    pushd ovs
        # 拉取最新的代码
        git fetch origin
        # 基于最新的上游代码创建一个开发分支
        git checkout -b feature_X origin/master
    popd

2. 编写代码。

    - 尽量参考已有代码的规范:空行、缩进、空格、注释等。
    - 如果代码修改涉及到新的测试例,也需要添加测试例。

3. 编写代码后需要运行测试。

3.1 运行测试之前需要先对代码进行编译,如果需要测试内核模块还需要编译内核模块。
    # 通常boot.sh运行一次之后,第二次编译就不用再次运行了。
    # 如果做了这些操作,最好重新运行boot.sh:
    #   - 版本发生变化,比如从master切换到自研2.14版本
    #   - 对.m4, .in文件进行了修改
    #   - 添加了新的文件
    ./boot.sh

    # 通常./configure也只运行一次就行,第二次编译不用再执行
    # 下面的情况需要重新运行boot.sh:
    #   - 要对编译选项进行修改
    #   - ./boot.sh被重新执行
    ./configure
    # or
    # ./configure --with-linux=/lib/modules/$(uname -r)/build

    # -j 表示并行数,用多个core进行编译能大大提高编译速度
    make -j 32

3.2 单元测试,单元测试支持并发,推荐使用并发(-j)能大大提高速度

        # 查看单元测试list
        make check TESTSUITEFLAGS=--list

        # 运行所有单元测试
        make check TESTSUITEFLAGS=-j6

        # 只运行一个或几个单元测试例,通过list的号码指定测试例
        make check TESTSUITEFLAGS='123 477-484'

        # 根据关键字查找测试例然后运行
        make check TESTSUITEFLAGS='-k ovsdb'

3.3 datapath测试,可以测试用户态的datapath也可以测试kernel datapath。datapath的测试不支持并发,且运行datapath测试之前需要停掉运行中ovs进程。

        # userspace datapath test
        make check-system-userspace

        # kernel datapath test
        # this install kmod and run tests
        make check-kmod

4. 代码本地commit

编写完代码后需要对代码进行commit,一次commit后可能还会继续修改,修改了之后需要继续commit。代码commit的一个原则:用一个commit解决一个问题,尽量不在一个commit解决多个问题。
    # 首次commit需要通过 -s 参数进行签名
    git commit -s # first commit
    # commit msg 最好根据下面的格式编写
    #   - 首行指明修改的模块、简要描述修改目的。首行长度尽量50字符,其他行72字符
    #   - 首行之后需要空一行
    #   - 描述问题,如果问题复杂可以详细描述,如果问题简单一句话描述
    #   - 继续描述我们这个patch解决问题的思路,以及一些注意事项

    # 非首次commit,且不希望记录上次commit和本次commit的差别。
    # 使用--amend覆盖上次commit,这样可以避免多个commit解决一个问题
    git commit --amend

    # 如果我们在开发阶段要进行第二次commit,但又想保留第一次的commit则不用--amend选项
    git commit # second commit
    git commit # third commit, ...
    # 但在把代码提交社区之前需要对我们的多次commit进行合并
    #   - 以第一次commit的*上一个*commit为基础进行rebase
    #   - 保留(pick)第一个commit,其他的commit压缩(squash)进第一个commit
    git rebase -i first_commit_id^

5. 生成patch

patch内容其实就是咱们commit的diff,邮件发出去之后别人可以根据diff看到咱们的改动。也可以把这个diff apply到他们本地代码。除了diff通常还包含一些其他少量信息。我们可以通过`git format-patch`命令生成patch。通常我们只需要生成一个patch进行提交,如果我们有多个patch,而这些patch之间有依赖性我们则需要一次生成多个patch,这些patch在同一个series里面。review的人会根据先后顺序review series中的patch。
    # 生成单个patch,把patch输出到 ../upcall-patchs目录下
    git format-patch -1 -v1 -o ../upcall-patchs/

    # 生成一个patch series,包含3个commit。
    # 生成后我们会看到4个patch文件,其中有一个序号000的patch
    # 是用来对patch series进行描述的
    git format-patch -3 -v1 --thread --cover-letter -o ../upcall-patchs/

    # 经过一轮review我们对代码进行了修改,且通过commit --amend本地提交了代码。
    # 这时需要重新生成patch v2
    git format-patch -3 -v2 --thread --cover-letter -o ../upcall-patchs/

    # 检查patch合规性
    utilities/checkpatch.py ../upcall-patchs/v4-0002-tests-fix-packet-data-endianness.patch

6. 通过邮件发送patch

       发送邮件之前需要先[subscribe dev@openvswitch.org](mail.openvswitch.org/mailman/listinfo/ovs-dev) ,否则我们可能发不出去邮件,也收不到review的回复。
       patch系统会记录邮件发送人,然后和commit里面的签名进行对比,如果对比不通过会有问题。所以要设置一下邮件的发件人,默认是邮箱。
       比如我的commit 签名是: `xxx <xxx@abc.com>`,但是我的email发件人被识别为: `xxx@abc.com <xxx@abc.com>`。这样就有问题,可以在foxmail设置`发信名称`来配置发件人为 xxx。
根据如下信息依次发送series中的patch:
    - 收件人: dev@openvswitch.org
    - 主题: patch文件的`Subject`内容
    - 邮件内容: patch文件subject以下的所有内容
邮件发送后几分钟就能在patchwork系统看到我们的提交了。

7. 回复邮件

别人review了我们的patch会提出一些问题,我们需要通过邮件进行回应。我看其他人回复的邮件,上一封邮件的内容会被`>`符号标记出来。我通过设置foxmail的模板实现了配置自动添加`>`符号,但功能还有缺陷(会加入很多额外的空行)。需要特别注意。
 

8. 引用

- github.com/openvswitch/ovs
- github.com/torvalds/linux/tree/master/net/openvswitch
- docs.openvswitch.org/en/latest/topics/testing/
- patchwork.ozlabs.org/project/openvswitch/list/
- mail.openvswitch.org/mailman/listinfo/
0条评论
作者已关闭评论
李****成
2文章数
0粉丝数
李****成
2 文章 | 0 粉丝
李****成
2文章数
0粉丝数
李****成
2 文章 | 0 粉丝
原创

OVS 社区贡献快速指南

2023-10-09 07:11:48
67
0

代码提交流程

1. pull代码创建分支

    # 如果本地没有clone过上游代码,需要clone代码
    git clone github.com/openvswitch/ovs
    pushd ovs
        # 拉取最新的代码
        git fetch origin
        # 基于最新的上游代码创建一个开发分支
        git checkout -b feature_X origin/master
    popd

2. 编写代码。

    - 尽量参考已有代码的规范:空行、缩进、空格、注释等。
    - 如果代码修改涉及到新的测试例,也需要添加测试例。

3. 编写代码后需要运行测试。

3.1 运行测试之前需要先对代码进行编译,如果需要测试内核模块还需要编译内核模块。
    # 通常boot.sh运行一次之后,第二次编译就不用再次运行了。
    # 如果做了这些操作,最好重新运行boot.sh:
    #   - 版本发生变化,比如从master切换到自研2.14版本
    #   - 对.m4, .in文件进行了修改
    #   - 添加了新的文件
    ./boot.sh

    # 通常./configure也只运行一次就行,第二次编译不用再执行
    # 下面的情况需要重新运行boot.sh:
    #   - 要对编译选项进行修改
    #   - ./boot.sh被重新执行
    ./configure
    # or
    # ./configure --with-linux=/lib/modules/$(uname -r)/build

    # -j 表示并行数,用多个core进行编译能大大提高编译速度
    make -j 32

3.2 单元测试,单元测试支持并发,推荐使用并发(-j)能大大提高速度

        # 查看单元测试list
        make check TESTSUITEFLAGS=--list

        # 运行所有单元测试
        make check TESTSUITEFLAGS=-j6

        # 只运行一个或几个单元测试例,通过list的号码指定测试例
        make check TESTSUITEFLAGS='123 477-484'

        # 根据关键字查找测试例然后运行
        make check TESTSUITEFLAGS='-k ovsdb'

3.3 datapath测试,可以测试用户态的datapath也可以测试kernel datapath。datapath的测试不支持并发,且运行datapath测试之前需要停掉运行中ovs进程。

        # userspace datapath test
        make check-system-userspace

        # kernel datapath test
        # this install kmod and run tests
        make check-kmod

4. 代码本地commit

编写完代码后需要对代码进行commit,一次commit后可能还会继续修改,修改了之后需要继续commit。代码commit的一个原则:用一个commit解决一个问题,尽量不在一个commit解决多个问题。
    # 首次commit需要通过 -s 参数进行签名
    git commit -s # first commit
    # commit msg 最好根据下面的格式编写
    #   - 首行指明修改的模块、简要描述修改目的。首行长度尽量50字符,其他行72字符
    #   - 首行之后需要空一行
    #   - 描述问题,如果问题复杂可以详细描述,如果问题简单一句话描述
    #   - 继续描述我们这个patch解决问题的思路,以及一些注意事项

    # 非首次commit,且不希望记录上次commit和本次commit的差别。
    # 使用--amend覆盖上次commit,这样可以避免多个commit解决一个问题
    git commit --amend

    # 如果我们在开发阶段要进行第二次commit,但又想保留第一次的commit则不用--amend选项
    git commit # second commit
    git commit # third commit, ...
    # 但在把代码提交社区之前需要对我们的多次commit进行合并
    #   - 以第一次commit的*上一个*commit为基础进行rebase
    #   - 保留(pick)第一个commit,其他的commit压缩(squash)进第一个commit
    git rebase -i first_commit_id^

5. 生成patch

patch内容其实就是咱们commit的diff,邮件发出去之后别人可以根据diff看到咱们的改动。也可以把这个diff apply到他们本地代码。除了diff通常还包含一些其他少量信息。我们可以通过`git format-patch`命令生成patch。通常我们只需要生成一个patch进行提交,如果我们有多个patch,而这些patch之间有依赖性我们则需要一次生成多个patch,这些patch在同一个series里面。review的人会根据先后顺序review series中的patch。
    # 生成单个patch,把patch输出到 ../upcall-patchs目录下
    git format-patch -1 -v1 -o ../upcall-patchs/

    # 生成一个patch series,包含3个commit。
    # 生成后我们会看到4个patch文件,其中有一个序号000的patch
    # 是用来对patch series进行描述的
    git format-patch -3 -v1 --thread --cover-letter -o ../upcall-patchs/

    # 经过一轮review我们对代码进行了修改,且通过commit --amend本地提交了代码。
    # 这时需要重新生成patch v2
    git format-patch -3 -v2 --thread --cover-letter -o ../upcall-patchs/

    # 检查patch合规性
    utilities/checkpatch.py ../upcall-patchs/v4-0002-tests-fix-packet-data-endianness.patch

6. 通过邮件发送patch

       发送邮件之前需要先[subscribe dev@openvswitch.org](mail.openvswitch.org/mailman/listinfo/ovs-dev) ,否则我们可能发不出去邮件,也收不到review的回复。
       patch系统会记录邮件发送人,然后和commit里面的签名进行对比,如果对比不通过会有问题。所以要设置一下邮件的发件人,默认是邮箱。
       比如我的commit 签名是: `xxx <xxx@abc.com>`,但是我的email发件人被识别为: `xxx@abc.com <xxx@abc.com>`。这样就有问题,可以在foxmail设置`发信名称`来配置发件人为 xxx。
根据如下信息依次发送series中的patch:
    - 收件人: dev@openvswitch.org
    - 主题: patch文件的`Subject`内容
    - 邮件内容: patch文件subject以下的所有内容
邮件发送后几分钟就能在patchwork系统看到我们的提交了。

7. 回复邮件

别人review了我们的patch会提出一些问题,我们需要通过邮件进行回应。我看其他人回复的邮件,上一封邮件的内容会被`>`符号标记出来。我通过设置foxmail的模板实现了配置自动添加`>`符号,但功能还有缺陷(会加入很多额外的空行)。需要特别注意。
 

8. 引用

- github.com/openvswitch/ovs
- github.com/torvalds/linux/tree/master/net/openvswitch
- docs.openvswitch.org/en/latest/topics/testing/
- patchwork.ozlabs.org/project/openvswitch/list/
- mail.openvswitch.org/mailman/listinfo/
文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0