跳转到主要内容

Query-Meta 兼容性判断

本准则将介绍如何判断和管理 databend-query 和 databend-meta 之间的兼容性。

版本查询

  • 查询 databend-query 的构建版本及其兼容的 databend-meta 版本:

    databend-query --cmd ver

    # output:
    version: 0.7.61-nightly
    min-compatible-metasrv-version: 0.7.59

    以上结果表示 databend-query 的 0.7.61-nightly 版本可以与 databend-meta 的0.7.59及以上版本兼容。

  • 查询 databend-meta 的构建版本及其兼容的 databend-query 版本:

    databend-meta --cmd ver

    # output:
    version: 0.7.61-nightly
    min-compatible-client-version: 0.7.57

    以上结果表示 databend-meta 的 0.7.61-nightly 版本可以与 databend-query 的0.7.57及以上版本兼容。

部署版本兼容的 databend-quert 和 databend-meta

Databend 集群中的 databend-query 和 databend-meta 必须版本兼容。 二者需要满足以下条件:

databend-query.version >= databend-meta.min-compatible-client-version
databend-bend.version >= databend-query.min-compatible-metasrv-version
警告

如二者版本不兼容,当 databend-query 尝试连接 databend-meta 会出错,在 databend-query 的日志中可找到 InvalidArgument 错误。 且 databend-query 会停止工作。

如何检查兼容性

databend-query 和 databend-meta 建立连接时的握手 RPC 期间会检查二者的兼容性。

客户端 C(databend-query) 和服务器 S(databend-meta) 保留两个语义版本:

  • C 维持自己的版本(C.ver) 和最小兼容 S 版本(C.min_srv_ver)。
  • S 维持自己的版本(S.ver) 和最小兼容 C 版本(S.min_cli_ver)。

握手时:

  • C 发送自己的 C.verS
  • S 接收握手请求时, S 声明 C.ver >= S.min_cli_ver
  • 然后 S 回复自己的 S.ver
  • C 收到回复 ,声明 S.ver >= C.min_srv_ver

如果以上两个声明都满足,握手就会成功。

如:

  • S: (ver=3, min_cli_ver=1) 兼容 C: (ver=3, min_srv_ver=2)
  • S: (ver=4, min_cli_ver=4) 不兼容 C: (ver=3, min_srv_ver=2)。 这是因为虽然满足 S.ver(4) >= C.min_srv_ver(3),但是不满足C.ver(3) >= S.min_cli_ver(4)
C.ver:    1             3      4
C --------+-------------+------+------------>
^ .------' ^
| | |
'-------------. |
| | |
v | |
S ---------------+------+------+------------>
S.ver: 2 3 4