finagle-mysql/finagle-redis connection init sql/command stack modules
これは何
finagleに以下のpatchを追加した
- finagle-mysql: HikariCP にあるconnection-init-sqlの機能
- finagle-redis: Connection作成時にすぐに一度だけAUTH, SELECTコマンドを発行する機能
April 2020 Patch Release Notes - Version 20.4.1
finagle StackClient
finagleといえばStackClient, StackServerである。
finagle/StackClient.scala at 8175b9e69ee22045e41a7eaa61c5cde117e701c6 · twitter/finagle · GitHub
finagleではhttp client, thrift client, mysql client, redis client...などはすべてReqを受け取ってRepを返すService[Req, Rep]として表される。
ssl接続にはhandshakeがいるし、mysqlと通信するServiceならmysql protocolを通す必要がある。これらの個々の機能はstack moduleとして、ServiceFactory[Req, Rep]をwrapする形でstackとして機能を積み上げている。
様々な通信方法がある中で、基本的な機能moduleを共通化して入れ込んでいるものが、StackClient/StackServerである。
このStackClientにstackとして積み上げられたmoduleには、Roleという個々のmoduleを特定するための名前がつけられており、これらのRoleを指定することで、特定のRoleを入れ替えたり、特定のRoleの後に別のRoleを入れたりもできる。
connection init sql/command
connection init sql/commandについては、リクエスト毎にredisに認証リクエストを送る必要はないし、コネクション作成後に1度だけ実行すれば良い処理になる。
StackClientが持つmoduleのひとつに、Role.prepConnがある。このRoleでは、通信する準備が出来た状態を表し、空実装になっている。
今回の実装では、このRole.prepConnの後に一度だけ処理を入れる機能をパッチとして追加した。
これでfinagle-mysqlでもkamipo traditionalをclient側から指定することが出来るようになった。