Pro Yearly is on sale from $80 to $50! »

SpannerとgRPCを使ったらバグった話

730d7a51a441325c66316ecd3e56ffab?s=47 lp-peg
December 18, 2019
1.1k

 SpannerとgRPCを使ったらバグった話

730d7a51a441325c66316ecd3e56ffab?s=128

lp-peg

December 18, 2019
Tweet

Transcript

  1. SpannerとgRPCでバグった話 Tomohiro Katsukura

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

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

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

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

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

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

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

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

  10. サンプルコード gRPCのAbortedを返している。 gRPC error 概要 (Http error) OK 成功 200

    UNKNOWN 不明なエラー 500 NOT_FOUND 該当なし 404 ABORTED コンフリクト 409 Call Stack runWithRetryOnAborted() ReadWriteTransaction() f() runInTransaction() f() Aborted
  11. Spannerパッケージのコード Call Stack runWithRetryOnAborted() ReadWriteTransaction() f() runInTransaction() Aborted =Aborted =

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

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

    /
  14. app data Project GKE Cloud Spanner Cloud Storage Takasho SDK

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