bricolages / bricolage

AWS-oriented Data Warehouse Framework
113 stars 20 forks source link

Add retry for postgresql connection #116

Closed ragi256 closed 4 years ago

ragi256 commented 4 years ago

execute_update 内部で PQconsumeInput() SSL SYSCALL error: Connection timed out が起きた際、ジョブ全体をリトライすると直ることが大半でした。 ~@connection.async_exec(query)するメソッドにリトライ処理を追加します。~ 最初にコネクションを張る際に select 1 で疎通を確認し、失敗したら自動でコネクション作成をリトライするようにします。

デフォルトは3回リトライし、環境変数で変更できるようなっています。

リトライ処理の実装方法は下記のコードを参考にしました。https://github.com/bricolages/bricolage/blob/7422e6c7e9ad81cd23becb56f249741fdf644689/lib/bricolage/s3datasource.rb#L127-L141

ragi256 commented 4 years ago

間違った内容のcommitなどで修正内容の割にcommitが長引いたのでsquashして一つにまとめました