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