S-JIS[2023-12-07/2024-01-29]

Tsurugiサービスメッセージバージョン

Tsurugiのサービスメッセージバージョン(SMV)のメモ。


概要

Tsurugi 1.0.0-BETA2で、サービスメッセージバージョン(SMV)が導入された。

これは、クライアント(Tsubakuro)とTsurugiサーバーの間でやりとりする通信データ(メッセージ)のバージョン。
サービス毎(SqlClientとかKvsClientとか)にバージョンは異なる。


互換性の無いバージョン同士では、通信することが出来ない。

例えば、以下のような古いクライアントと新しいTsurugiサーバーで通信しようとすると、inconsistent service message versionというエラーが発生する。

com.tsurugidb.tsubakuro.exception.CoreServiceException: SCD-00501: inconsistent service message version: see https://github.com/project-tsurugi/tsurugidb/blob/master/docs/service-message-compatibilities.md (client: "sql-0.0", server: "sql-1.0")

TsurugiのDBサーバーがどのSMVに対応しているかは、Service Message Version (SMV) Compatibilityに書かれている。[2023-12-09]

Tsurugi SQLコンソール(tgsql)がどのSMVに対応しているかは、tgsql --versionで表示される。
TsubakuroがどのSMVに対応しているかは、ServiceMessageVersionアノテーションで知ることが出来る。


ハンドシェイク

Tsurugi 1.0.0-BETA3(Tsubakuro 1.2.0)で、通信確立時にハンドシェイクという手順が導入された。[2024-01-29]

古いクライアント(Tsubakuro 1.1.0)から新しいDBサーバー(Tsurugi 1.0.0-BETA3)へはハンドシェイクできないため、 例えばSQL実行時に以下のようなエラーが発生する。

SCD-00102: handshake operation is required to establish sessions (service ID=3).
see https://github.com/project-tsurugi/tsurugidb/blob/master/docs/upgrade-guide.md#handshake-required

「service ID=3」というのは、https://github.com/project-tsurugi/tsurugidb/blob/master/docs/upgrade-guide.md#handshake-requiredに書かれている通り、「SQL service」を表している。
(つまり、SqlClientの通信が出来ない)


新しいクライアント(Tsubakuro 1.2.0)から古いDBサーバー(Tsurugi 1.0.0-BETA2)へ接続しようとすると、以下のようなエラーが発生する。

Exception in thread "main" java.io.IOException: Server crashed
        at com.tsurugidb.tsubakuro.channel.common.connection.wire.impl.Link.pullMessage(Link.java:57)

TCP接続において「java.io.IOException: Server crashed」が発生するのはDBサーバーが落ちた場合が多いが、このケースに関してはDBサーバーは落ちておらず、通信が出来ないだけ。


Tsurugiへ戻る / 技術メモへ戻る
メールの送信先:ひしだま