-
Notifications
You must be signed in to change notification settings - Fork 23
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
google-cloud-go/spanner のバージョン間差分リーディングスレ #127
Comments
v0.38.0 〜 spanner/v1.0.0https://github.com/googleapis/google-cloud-go/releases/tag/spanner%2Fv1.0.0 タグを打たれているコミットによると spanner/v1.0.0 = v0.46.2
googleapis/google-cloud-go@5d17c75
テストを壊して revert されたらしい。未来にまたやりなおすやつ
googleapis/google-cloud-go@02b9199 PDML は abort されてもクライアント側で内部的にリトライする前提だったがそうではなかったらしく、リトライを実装。
googleapis/google-cloud-go@1fc0d2f reprenishPool における CreateSession, DeleteSession では上から渡ってきた context の設定とは無関係にタイムアウトを1分にする。
googleapis/google-cloud-go@9a7f354 間違えて err ではなく nil を返していてバグがあったらしい
googleapis/google-cloud-go@4b1db5f
googleapis/google-cloud-go@acf4f9b
googleapis/google-cloud-go@da8e77f
googleapis/google-cloud-go@9f33eb1 GAPIC & GAX の利用開始。これまでは生の gRPC コネクションと spannerpb を使っていた。
googleapis/google-cloud-go@b1eefbd PDML で query parameter が使われていなかったやつ。
|
〜 spanner/v1.1.0https://github.com/googleapis/google-cloud-go/releases/tag/spanner%2Fv1.1.0
googleapis/google-cloud-go@b467917
googleapis/google-cloud-go@b246326 今まで spanner.Client が管理していたセッション作成や gRPC コネクションへのセッションの割り当てを責務として持つセッションクライアントを導入。 MinOpened をセッション数で割った余りを1つめの GAPIC クライアントに割り振るのはセッション数よりも MinOpened が少ない時に1RPC で済ませたいかららしいけど、もう少しうまく分配できる手があるような気はする。(均等でなくても大したことはないのか) https://pkg.go.dev/cloud.google.com/go/spanner?tab=doc#pkg-variables MinOpened のデフォルト値は0から100になった。
上のコミットに含まれる
上のコミットに含まれる
googleapis/google-cloud-go@8097922 セッション仕様実績の計算方法を改善して時期尚早なセッションの解放を抑えた。
googleapis/google-cloud-go@0599e18 shrinkPool が壊れていたのを修正している。
googleapis/google-cloud-go@fe4e66c GAX が標準で提供する Retryer を resumableStreamDecoder で使うようにし、 gRPC コードをチェックしてリトライする独自ロジックをなくした。
googleapis/google-cloud-go@5709d56 上の修正に対応する R/W tx 側の修正 |
〜 spanner/v1.2.0https://github.com/googleapis/google-cloud-go/releases/tag/spanner%2Fv1.2.0
googleapis/google-cloud-go@06cb606
googleapis/google-cloud-go@896180c 有効にした場合に Admin API の
googleapis/google-cloud-go@25b2b69
googleapis/google-cloud-go@39a127f 上のデコード側の実装
googleapis/google-cloud-go@fbe1038 対応している型のポインタを nil 含めて正しく扱えるようになった。例えば
googleapis/google-cloud-go@4c1e347 r/w tx は runInTransaction の中なので abort だけでなく session not found でも別のセッションで安全にリトライできる。リトライディレイを入れる abort と違って即時リトライする。
googleapis/google-cloud-go@4a4cd86 read only transaction は session not found が出た時に冪等性の問題なく別のセッションを使って安全にリトライできる。
googleapis/google-cloud-go@7a18dc1 single use も同様に冪等性の問題なく別のセッションを使って安全にリトライできる。
googleapis/google-cloud-go@4f99193 インデックスから厳密に1 row 取得する関数。0行もしくは複数行取得された場合はそれぞれ区別可能なエラーになる。
googleapis/google-cloud-go@f858c6c context や gRPC 由来のエラーが出た時に spanner パッケージのエラーになっていなかったのを修正。
googleapis/google-cloud-go@06a25b0 (context や gRPC など)Spanner ではないレイヤでエラーが出ていた時に DML がリトライされなかったのを修正
googleapis/google-cloud-go@6be7f45 ヘルスチェック時のタイムアウトを1秒から1分に変更。特に対応可能なことがないのにログが表示されすぎるためとのこと。
googleapis/google-cloud-go@9f47821 Go 1.13 と xerrors のインターフェース(
googleapis/google-cloud-go@4fba433 write session を裏で
googleapis/google-cloud-go@003d19f コードジェネレータが gapic-generator から protoc-gen-go_gapic に変わって色々変わっている
googleapis/google-cloud-go@cb4fdf1 session preparation での permission denied は無視できる。何故?
googleapis/google-cloud-go@187d661 ロガーを設定可能に。主にテスト時に起こることが分かっているエラーログを黙らせるために使われているっぽい。
googleapis/google-cloud-go@25d2e81 セッションプールからの取得を LIFO に。これまではラウンドロビン
googleapis/google-cloud-go@0fd5feb PermissionDenied や Database not found のようなリトライで復帰不可能なエラーではセッション獲得のリトライをしない。 |
〜 spanner/v1.2.1https://github.com/googleapis/google-cloud-go/releases/tag/spanner%2Fv1.2.1
googleapis/google-cloud-go@2875e82 applyAtLeastOnce で apply した時、 abort のときはセッションを破棄、正常終了の場合はセッションをプールに戻していたが、それ以外のエラーの時にセッションリークしていたのを修正した
googleapis/google-cloud-go@8424551
googleapis/google-cloud-go@ac2a25f
|
〜 spanner/v1.3.0https://github.com/googleapis/google-cloud-go/releases/tag/spanner%2Fv1.3.0
googleapis/google-cloud-go@7b40e56 クエリオプション及び環境変数からの optimizer version の設定方法の提供。
googleapis/google-cloud-go@b63d8a6 Cloud Spanner クライアントライブラリではなく grpc-go のコネクションプールを使う。
googleapis/google-cloud-go@b63d8a6
googleapis/google-cloud-go@2159af9 コミットリクエスト中に context 経由でのキャンセルやデッドラインが発動した場合は実際にはコミットが成功している場合もあるからエラーを区別できるようにした。この場合にはコミットの成否は不明なのでアプリケーション側で対応した方が良いとのこと。
googleapis/google-cloud-go@565ae89 ヘルスチェックを5分から30分間隔にして GetSession が呼ばれる頻度を下げた
googleapis/google-cloud-go@0109565
googleapis/google-cloud-go@863a84d
googleapis/google-cloud-go@8d3876f retry info を HTTP2/gRPC trailer ではなく status から取り出すようにしたことで trailer を処理する必要性をなくした |
〜 spanner/v1.4.0https://github.com/googleapis/google-cloud-go/releases/tag/spanner%2Fv1.4.0
googleapis/google-cloud-go@e3374f3 未リリースのはずのマネージドバックアップ対応。
googleapis/google-cloud-go@62bc962 ヘルスチェックのための |
〜 spanner/v1.5.0https://github.com/googleapis/google-cloud-go/releases/tag/spanner%2Fv1.5.0
これは下記記事の内容に相当する機能追加。 なお上記記事からの変更として、
googleapis/google-cloud-go@f2776fc#diff-69f1cc5a16638c0dfbc583c9b5798297 Session Maintainer からのヘルスチェックで呼ばれる ping の実装を 追記https://cloud.google.com/spanner/docs/sessions?hl=en#keep_an_idle_session_alive
とあるので推奨される方法に修正されたという認識でよさそう。
googleapis/google-cloud-go@90c5e7c
googleapis/google-cloud-go@b0b68af BatchReadOnlyTransaction のインスタンスがトランザクションの別のパーティションで再利用されて競合が起こり、結果が不正になることがあったのを修正した。
googleapis/google-cloud-go@d0a3172 timestamp bounds read の read timestamp が一定時間以上古いと読み込み時エラーが出る仕様があるが、場所によって1時間と4時間の2つの記述に分かれていた。4時間は間違いであり、1時間が正しいため修正された。
googleapis/google-cloud-go@ccd63b7 パスの中のコンポーネントを正規表現で抽出するロジックのバグの修正 |
spanner/v1.5.1
v1.5.0 で実装されたメトリクスが 10分の health recycling period ごとの処理でセッションプールを縮小する判断が行われた時に正しくデクリメントされなかったのを修正した。
protobuf v1.4.0 対応のため、 |
spanner/v1.6.0
googleapis/google-cloud-go@5389830 従来はセッションプールを拡張する時には足りないセッションの数だけ CreateSession RPC を呼んで作成していたが、 BatchCreateSessions RPC で一括作成するようになった。 なおセッションの要求と確保は別の goroutine で行われ、新しいセッションの作成が完了した時以外にも他の goroutine がセッションを返却した時にもセッションを要求する goroutine に処理が戻る終わるため、必ずしも BatchCreateSessions RPC の時間待つ必要はないとのこと。
CreateDatabase がリトライ可能なエラーコードのときにリトライされるようになった。
googleapis/google-cloud-go@eee5386 gRPC 的に abort の時にリトライされること、デッドロック時にも abort されることなどが明記された。 Fix timeout+staleness bound for test
マージされていたクライアント側での resource-based routing は導入しないことになったので削除している。 |
spanner/v1.7.0
googleapis/google-cloud-go@9f9e9d2 リトライ可能な internal error を限定した。通信関係の偶発的エラーを明示している様子。
googleapis/google-cloud-go@a014b9d ping の span は OpenCensus のサンプリング対象とならなくなった。 Add oc tests for session pool metrics. (googleapis/google-cloud-go#2416)
googleapis/google-cloud-go@f47eab4 custom base type サポートを mutation で使えるようにした。これまでの対応はパラメータやクエリ結果のみだったということの様子。
googleapis/google-cloud-go@2b852b6 GAX を使うようになったことで不要になっていた backoff の実装を削除したり変数名を変更するなどの整理。 |
spanner/v1.8.0
クライアント共通のデフォルトのリトライ設定を
コールバックとしてトランザクション内の処理を受け取って自動的にトランザクションのリトライやコミットが行われる
resource prefix ヘッダが正しく渡るように修正している。どうやら resource based routing が裏で行われるようにするためのヒントとして機能するようだ。See also: googleapis/google-cloud-dotnet#5255
App Engine Go 1.9 以前を考慮する必要がなくなったため、 appengine ビルドタグを使った分岐を削除した。 |
spanner/v1.9.0
single-use read-only transaction 使おうとしたセッションが何らかの理由で既に無効になっていたことにより session not found エラーが派生した時に今まではアプリケーションコードにエラーを返していたが、安全にリトライ可能なのでクライアント内で別のセッションを使って暗黙にリトライするようになった。
今まで
Partitioned DML についても安全にリトライできる Internal なエラーコードはリトライするようになった。 |
BigQuery/ZetaSQL では実装済だが
googleapis/google-cloud-go#854, googleapis/google-cloud-go#2614 で組み込み型を underlying type として持つ型や
Partitioned DML で常に |
|
RowIterator から ResultSetMetadata を取得できるようになった。今までは
任意の error を
クライアントライブラリが OpenCensus に出力している span に |
https://github.com/googleapis/google-cloud-go/releases/tag/spanner%2Fv1.13.0
DirectPath は GFE を迂回して Google 内から API を叩くための経路であると考えられ、それをクライアントライブラリから使えるようにする修正。
NUMERIC 型の列に mutation で値を設定することができなかったのを修正している。
|
https://github.com/googleapis/google-cloud-go/releases/tag/spanner%2Fv1.14.0 従来は Commit の結果として Commit Timestamp のみを得ていたが、 MutationCount を含む CommitStats を得ることができるようになった。
Data types にあるように NUMERIC はキーとしては使えないが、対応する布石の可能性がある。 https://github.com/googleapis/google-cloud-go/releases/tag/spanner%2Fv1.14.1 Scope 関係の定数が削除されて破壊的変更になっていたのが修正された。 |
https://github.com/googleapis/google-cloud-go/releases/tag/spanner%2Fv1.15.0
backup の CMEK 対応
|
https://github.com/googleapis/google-cloud-go/releases/tag/spanner/v1.16.0
未リリースの optimizer statistics package に関するフィールドが proto に追加されたため反映している。 |
https://github.com/googleapis/google-cloud-go/releases/tag/spanner/v1.17.0
request に tag を付ける未リリース機能のためのフィールドが proto に追加されたため反映している。 RPC ごとに priority を指定するためのオプションに対応した。
context がキャンセル済などでないと通常は発生しない |
https://github.com/googleapis/google-cloud-go/releases/tag/spanner/v1.18.0
DDL の進捗を取得するための リリースノート記載なし
request/transaction へのタグの指定に対応したが、 v1.18.0 のリリースまでに正式にリリースされなかったため revert されている。
|
https://github.com/googleapis/google-cloud-go/releases/tag/spanner/v1.19.0
テストコードのみの修正。
godoc 上の Cloud Spanner の型と Go の型の対応関係 から 文字通りインデントの修正のみを行っている。
リリースノート記載なし
|
https://github.com/googleapis/google-cloud-go/releases/tag/spanner%2Fv1.20.0
Query optimizer statistics packages のクライアントライブラリ側の対応を実装している。 |
v1.21.0https://github.com/googleapis/google-cloud-go/releases/tag/spanner%2Fv1.21.0
Processing Unit 単位でインスタンスのコンピュートキャパシティを指定できるように更新された proto を取り込んでリリースしている。 |
1.23.0 (2021-07-08)
マルチリージョンインスタンスでデフォルトとは異なる方の RW レプリカをデフォルトのリーダーレプリカにすることができる |
これまでは parameterized query に |
v1.25.0
JSON 型に対応している。クライアントライブラリ側では
|
「詳解 google-cloud-go/spanner」 では google-cloud-go v0.38.0 の時点でのセッションとトランザクション周りを解説している。
それからの間に多くの更新があるため、リリースごとにメモしていく。
なお、
all: auto-regenerate gapics
などの自動生成クライアントの更新による差分、spansql
,spannertest
, その他テスト周りの更新のみの差分については記載しない。下記は差分を
spanner
以下の変更だけに絞って読む方法の一例Refs
https://medium.com/google-cloud-jp/%E8%A9%B3%E8%A7%A3-google-cloud-go-spanner-%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B6%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E7%B7%A8-6b63099bd7fe
https://medium.com/google-cloud-jp/%E8%A9%B3%E8%A7%A3-google-cloud-go-spanner-%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E7%AE%A1%E7%90%86%E7%B7%A8-d805750edc75
The text was updated successfully, but these errors were encountered: