使用 VS Code 开发 Milvus

Milvus 的开发环境在最近半年里有过很多变化,目前的 Milvus 如果直接 clone 下来用 VS Code 打开的话会有不少 Error(不过并不影响编译)。主要是 CMake 和 CGO 调用的地方会报错,运气不好的话可能没法用查找引用的功能。这篇文章主要介绍针对 Milvus 的 VS Code 配置,让开发和测试更舒服。

CMake

Milvus 使用 conan 来管理 C++ 依赖,cmake 的 build 目录是 cmake_build,而不是 build。因此首先需要修改 cmake 的 build 目录路径,让 VS Code 的 CMake 插件能正确解析 CMakeLists.txt。在 .vscode/settings.json 中添加:

{
	// ...
    "cmake.sourceDirectory": "${workspaceFolder}/internal/core",
    "cmake.buildDirectory": "${workspaceFolder}/cmake_build"
}

如果使用 clangd,还需要添加:

    "clangd.arguments": [
        "--compile-commands-dir=${workspaceFolder}/cmake_build",
    ]

Golang

Milvus 依赖 Knowhere 来做底层的 ANN 查询,后者是一个 C++ 库,因此会有很多的 CGO 调用。为了让 Go 插件能正确解析,首先需要编译一次 Milvus,直接在项目根目录执行 make 即可。编译之后,在 .vscode/settings.json 中添加:

{
	// ...
    "go.toolsEnvVars": {
        "LD_LIBRARY_PATH": "${workspaceFolder}/internal/core/output/lib",
        "PKG_CONFIG_PATH": "${workspaceFolder}/internal/core/output/lib/pkgconfig",
    }
}

接下来就可以体验畅通无阻的开发了,所有 Go/C++ 代码的跳转和搜索功能应该都能正常使用,如果不起作用的话可以尝试 Ctrl + Shift + P (Command + Shift + P for Mac),选择 Reload Window 重启 VS Code。

单测

第三方组件

目前 Milvus 的单测还有一部分需要依赖第三方组件(Etcd, MinIO, Pulsar),因此运行单测之前需要先把第三方组件启动起来。不过 Milvus 已经提供了一个 docker-compose.yml 来方便的把依赖环境启动起来:

sudo docker-compose -f deployments/docker/dev/docker-compose.yml up -d

环境变量

Milvus 运行单测时需要依赖一些环境变量,不过可以通过 scripts/setenv.sh 来完成(fish 用户无法使用):

source scripts/setenv.sh && go test ...

也可以手动 export:

export PKG_CONFIG_PATH=(pwd)/internal/core/output/lib/pkgconfig
export RPATH=(pkg-config --libs-only-L milvus_common | cut -c 3-)

完成后使用下面的命令执行单测:

go test -ldflags="-r $RPATH" ...