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.ver到S。- 当
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