Slide 1

Slide 1 text

SpannerとgRPCでバグった話 Tomohiro Katsukura

Slide 2

Slide 2 text

自己紹介 ・勝倉 智央 ・株式会社DeNA ・19新卒入社(1年目) ・ゲームサーバー(フレームワーク)の開発

Slide 3

Slide 3 text

app data Project GKE Cloud Spanner Cloud Storage gRPC ゲームサーバーの構成

Slide 4

Slide 4 text

なにがダメかわかりますか?

Slide 5

Slide 5 text

サンプルコード Call Stack ReadWriteTransaction()

Slide 6

Slide 6 text

Spannerパッケージのコード Call Stack runWithRetryOnAborted() ReadWriteTransaction()

Slide 7

Slide 7 text

Spannerパッケージのコード Call Stack runWithRetryOnAborted() ReadWriteTransaction() f()

Slide 8

Slide 8 text

Spannerパッケージのコード Call Stack runWithRetryOnAborted() ReadWriteTransaction() f() runInTransaction()

Slide 9

Slide 9 text

Spannerパッケージのコード Call Stack runWithRetryOnAborted() ReadWriteTransaction() f() runInTransaction() f()

Slide 10

Slide 10 text

サンプルコード gRPCのAbortedを返している。 gRPC error 概要 (Http error) OK 成功 200 UNKNOWN 不明なエラー 500 NOT_FOUND 該当なし 404 ABORTED コンフリクト 409 Call Stack runWithRetryOnAborted() ReadWriteTransaction() f() runInTransaction() f() Aborted

Slide 11

Slide 11 text

Spannerパッケージのコード Call Stack runWithRetryOnAborted() ReadWriteTransaction() f() runInTransaction() Aborted =Aborted = true

Slide 12

Slide 12 text

f() Spannerパッケージのコード Call Stack runWithRetryOnAborted() ReadWriteTransaction() Aborted =Aborted = true continue!!

Slide 13

Slide 13 text

f() Spannerパッケージのコード Call Stack runWithRetryOnAborted() ReadWriteTransaction() Aborted ループの完成 \ (^o^) /

Slide 14

Slide 14 text

app data Project GKE Cloud Spanner Cloud Storage Takasho SDK gRPC gRPC SpannerライブラリはgRPCで通信

Slide 15

Slide 15 text

まとめ GCPのサービスを使って、gRPCでweb層を構築しているアプリケーションを作成す る際は注意! * あとでみたら、spannerライブラリのドキュメントには「 retryしたいときはgRPCのabortedをreturnしてね」と書いてありました。